题目:
修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多地打印文本。
自我解答:
#include <stdio.h>
#define MAXLINE 1000
#define WANTLEN 20
int getline(char s[])
{
int c;
int len = 0;
while((c = getchar()) != EOF && len < MAXLINE && c != '\n')
{
s[len] = c;
len++;
}
if(c == '\n')
{
s[len] = c;
len++;
}
s[len] = '\0';
return len;
}
void copy(char to[], char from[])
{
int i = 0;
while((to[i] = from[i]) != '\0')
i++;
}
int main()
{
char line[MAXLINE] = {'\0'};
char longest[MAXLINE] = {'\0'};
int len;
while((len = getline(line)) > 0)
{
if(len == WANTLEN)
{
copy(longest, line);
printf("%s", longest);
}
}
return 0;
}
当以本程序作为输入时(打印长度为20的行),输出为
s[len] = c;
s[len] = c;
注:上述程序是在参考书中实例中的代码进行编写。之所以说参考仅指在实现思路上,实际操作是自己按照这个思想进行的编写。在做1-18中的题目时,回头再看这段代码,首先发现一个bug,当输入行长度大于1000时,当程序迭代到len = 999之后会出现数组溢出的现象。所以判断条件需要修改为:"while((c = getcha