当输入的文本行超过MAXLINE时,len的最大值就是MAXLINE,此时,我们需要调整getline函数,让前MAXLINE-2个字符全部存入,最后两个放\n和\0,同时继续计算文本行长度,从而解决len最大值时MAXLINE的问题。
引入变量 j 来进行文本行储存,用变量 i 来记录文本行最大长度
#include <stdio.h>
#include <stdlib.h>
#define MAXLINE 1000 /*最大输入行的大小*/
int getline ( char line [] , int maxline );
void copy ( char to [] , char from [] );
/* 打印最长输入行*/
int main()
{
int len = 0;/* 当前行长度*/
int max;/* 到目前为止所发现的最长行的长度*/
char line[MAXLINE]; /* 当前输入的行*/
char longest[MAXLINE]; /*用于保存最长的行*/
max = 0;
while( (len = getline(line, MAXLINE)) > 0)
{
if (len > max)
{
max = len;
copy( longest , line);
}
}
if (max > 0)
printf ("%s" , longest);
return 0;
}
int getline( char s[],int lim)
{
int c, i, j;
for( i = 0, j = 0; ( c = getchar() ) != EOF && c!= '\n'; ++i)
{
if(j < lim - 2){ //最后要预留两个位置给\n和\0
s[j++] = c;
}
}
if( c == '\n')
{
s[j++] = c;
++i;
}
s[j] = '\0';
return i;
}
/*copy :从from拷贝到to; 假定to足够大 */
void copy( char to[], char from[])
{
int i;
i = 0;
while ( ( to[i] = from [i]) != '\0')
++i;
}