牛骨文教育服务平台(让学习变的简单)
博文笔记
  • 当前位置:
  • 牛骨文教育服务平台
  • >
  • 博文笔记
  • >
  • C程序设计语言练习1-16 修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多的打印文本

C程序设计语言练习1-16 修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多的打印文本

创建时间:2016-11-30 投稿人: 浏览次数:1150

教材原题读取一组文本行,并把最长的文本行打印出来,源码及分析请见此处。

分析:

1.边界条件为“当输入单词长度超出最长文本行个数限定”,在getLine()操作时,循环语句 for (i = 0; (c = getchar()) != EOF&& c != " "; i++)  不再利用i<MAXNUM-1检查字符是否超出数组边界,这里取i<MAXNUM-1的目的是,字符串数组最后一位s[MAXNUM-1]要存储空字符‘’作为文本行结束符,为后续copy(char[] to,char[] from)提供终止条件。现在,我们排除i<MAXNUM-1对单词个数临界值的检查,则此for循环可以返回任意长度的字符串个数。 2.教材中判定条件i<MAXNUM-1 改为i<MAXNUM-2,因为i<MAXNUM-1判断无论是否到达换行符" ",数组满则停止读字符,最后一位s[MAXNUM-1]=‘’,标记字符串结束。例如教材中设MAXNUM=5 ,可输入字符个数为4,最后一位放‘’。所以当输入123 ,则返回长度为4,line[]输出为123 ;当输入为1234 ,则返回长度为5,line[]输出为1234。习题1-16将判断条件改成i<MAXNUM-2的目的是为了当存在越界单词时,保证数组后两位存入" ",""。则以MAXNUM=5 为例,当当输入123 ,则返回长度为4,line[]输出为123 ;当输入为1234 ,则返回长度为5line[]输出为123 。
//修改打印最长问本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多的打印文本

#include "stdio.h"
#define MAXLINE 5//以5作为测试值,正常请修改为1000

int getLine(char line[], int maxline);
void copy(char to[], char from[]);

int main() {

	int max = 0;
	int len = 0;
	char line[MAXLINE];
	char longestLine[MAXLINE];

	for (int i = 0; i < MAXLINE; i++) {
		line[i] = 0;
		longestLine[i] = 0;
	}
	while ((len = getLine(line, MAXLINE)) > 0) {//直到读取EOF,getLine()返回长度为0时,停止读取
		printf("%d, %s", len, line);
		if (len > max) {
			max = len;
			copy(longestLine, line);
		}
		if (max > 0) {
			printf("the longestLine = %s", longestLine);
		}
	}

	return 0;
}
int getLine(char line[], int maxline) {
	int c, i, j;
	c = j = 0;
	for (i = 0; (c = getchar()) != EOF&& c != "
"; i++) {
		if (i < maxline - 2) {
			line[j] = c;
			j++;
		}
	}

	if (c == "
") {
		line[j] = "
";
		j++;
		i++;
	}
	line[j] = "";
	return i;
}

void copy(char to[], char from[]) {
	int i = 0;
	while ((to[i] = from[i]) != "") {
		i++;
	}
}


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。