//问题及源码如下, 想了很久也没想明白,希望大家多多指教,万分感谢!
#include<stdio.h>
#include<stdlib.h>
#define MAXLINE 1000//允许输入行的最大长度
int getline(char line[],int maxline);
void copy(char to[],char from[]);
main()
{
int len;//当前行长度
int max;//目前为止发现的最长行长度
char line[MAXLINE];//当前输入行
char longest[MAXLINE];//用于保存最长的行
max = 0;
printf("\t\t\t\t统计最长行\n");
while((len = getline(line,MAXLINE)) > 0)//? 不明白这个是什么意思
if(len > max)
{
max = len;
copy(longest,line);//把longest和line这两个参数传递给copy函数,其中longest和line这两个数组名怎么传递啊。越想越想不明白
}
if(max > 0)
printf("%s",longest);
system("pause");
return 0;
}
//getline函数:读取字符串,获取其长度
int getline(char s[],int lim)
{
int c,i;
for(i = 0;i < lim-1&&((c = getchar())) != EOF&& c != '\n';++i)//这个终止语句条件有点多,也看不太明白
s[i] = c;
if(c == '\n')
{
s[i] = c;//这个的功能是?
++i;
}
s[i] = '\0';
return i;
}
//copy函数:新输入的字符串与之前保存的最长的字符串比较长度,保留最长的那个,最后输出次字符串
void copy(char to[],char from[])//这个函数的功能是保存最大的值,完全像不明白是怎么实现的。
{
int i;
i = 0;
while((to[i] = from[i]) != '\0')
++i;
}
非常感谢您的帮助。还有些疑问想请教一下您:问题有点多
(1)for(i = 0;i < lim -1&&(c = getchar()) != EOF&&c != '\n';++i)//请问这段代码中的i < lim-1的意思是因为字符数组是以'\0'结束,所以要给'\0'保留一个位置,所以才要lim-1吗?
(2)getline函数中出现了两处 s[i] = c;// 能麻烦解释一下每个s[i] = c;的作用吗?s[i] = '\0';这个理解起来也朦朦胧胧的感觉。
(3)copy函数中 while循环后面的 ++i;的意思是?
1、看下面“s[i] = c”,知道最后一个位置预留给使循环结束的字符,而循环结束只有三种可能,一是i=='lim-1',一是读到了'\n',另一个是读取到末尾了。
2、判断是确定读取以'\n'结束,如果是就把'\n'加入字符串尾部,字符串长度加1,否则就不添加。程序中的第一个s[i]=c是没有必要的
3、++i是为了往前比较呀,如果i不自加,不是死循环了嘛,呵呵