有关C程序运行过程的问题
这是大名鼎鼎《The C Programming Language》里面的一个例子。问题请见红色注释处(运行环境VC 6.0)/*改程序读入一组文本,并将最长的文本行打印出来*/
# include <stdio.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;
while((len = getline(line, MAXLINE)) > 0)
if(len > max)
{
max = len;
copy(longest, line);
}
if(max > 0)
printf("%s",longest);
return 0;
}
/*getline函数:将一行读入s中并返回其长度值*/
int getline(char s[], int lim)
{
int c, i;
for(i=0; i<lim-1 && (c = getchar()) != EOF && c != '\n'; i++) //运行,输入一行字符再键入回车Enter,按照c != '\n'的条件,它应该退出循环,回到主程序直到执行完毕。但是根据题目,如果回车就执行完毕了,就无所谓两行之间的比较了。实际运行情况是,回车之后还是等待输入,为什么?
s[i] = c;
if(c == '\n')
{
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}
/*copy函数:将from复制到to*/
void copy(char to[], char from[])
{
int i;
i = 0;
while((to[i] = from[i]) != '\0')
++i;
}