了解EOF和Ctrl + D的工作原理

时间:2016-06-22 05:44:30

标签: c eof

我正在阅读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;
}   

0 个答案:

没有答案
相关问题