我正在阅读C编程语言(K& R)。我试图理解EOF是如何工作的,我相信在一行开头遇到 Ctrl + D 时,会触发EOF。但是,在一行的末尾,它要求用户输入 Ctrl + D 两次。首先冲洗输入,第二次触发EOF。
以下程序从控制台读取输入行并打印最长的输入行。我不明白为什么我必须输入 Ctrl + D 三次来触发EOF。
#include <stdio.h>
#define MAXLINE 1000
int getline(char[]);
void copy(char[], char[]);
int main()
{
int len, max;
char line[MAXLINE];
char longest[MAXLINE];
max = 0;
while( (len = getline(line)) > 0)
if(len > max)
{
max = len;
copy(longest, line);
}
if(max > 0)
printf("%s", longest);
return 0;
}
int getline(char line[])
{
int c, i;
i = 0;
for(i = 0; i < MAXLINE - 1 && (c = getchar())!=EOF && c!='\n'; ++i )
line[i] = c;
if(c == '\n')
{
line[i] = c;
++i;
}
line[i] = '\0';
return i;
}
void copy(char to[], char from[])
{
int i = 0;
while( (to[i] = from[i]) != '\0')
++i;
}