为什么我没有得到EOF?

时间:2016-12-08 20:05:02

标签: c eof

这是我的代码示例。我在评论中写了这个问题:

main(){
    long cnt; // chars count
    int c;

    /* Why the 'for' cicle doesn't finish when I input the
     * "a^Z" string and press ENTER? At this case '^Z' is
     * CTRL + Z (i.e this is EOF). I expected the second loop
     * will get the EOF (i.e. -1), but it has 26 instead of. Why?
     */
    for(cnt = 0; (c = getchar()) != EOF; ++cnt)
        ;

    printf("Chars count: %ld", cnt);
}

如果我提出aENTERCTRL + ZENTER,那么我会得到预期结果:CTRL + { {1}}打破了循环。

UPD

当我阅读有关Z函数的信息时,我发现它使用行缓冲输入。它期望getchar用于推送数据。我没有看到在获取ENTER时可以推送数据的信息。因此我预计在我的情况下第二个值将是Ctrl - Z(并且循环将被破坏),即我预计我的字符串行将被解析为EOFaEOF序列。

1 个答案:

答案 0 :(得分:1)

当您按 a + CTRL + Z 然后按 ENTER 时, CTRL < / kbd> + Z 刷新输入(stdin),下一个输入为\n,不是EOF。您需要按两次 CTRL + Z 来模拟第二个EOF