发送EOF后无法读取任何内容?

Can't read anything after sending EOF?

提问人:mdjukan 提问时间:12/16/2021 最后编辑:A Mmdjukan 更新时间:12/16/2021 访问量:83

问:

#include <stdio.h>
int main()
{
    char c = getchar(); //EOF (ctrl + d )
    while( ( c = getchar() ) != '?' )
    {
        printf( "%d\n", c == EOF );//infinite loop printing 1
    }
}

这里会发生什么?

就好像EOF完全阻止了之后的任何内容的读取?

c 无限循环 EOF getchar

评论

4赞 Lukas-T 12/16/2021
这就是EOF的全部目的,向流发出停止读取的信号。例如,当一个文件中的所有内容都被读取时(因此 EOF = 文件末尾),流应该停止读取。
2赞 Yunnosch 12/16/2021
EOF是“文件结束”的缩写。你知道吗?我假设你有。因此,请解释您希望在到达文件末尾后从文件中读取的内容,或者您的情况有哪些其他特殊方面。
0赞 user3629249 12/17/2021
关于: 函数: 实际上返回一个 .并且,根据您的实现(有符号或无符号)',它可能无法识别 EOFint c = getchar();'char c = getchar();getchar()intchar. So, start by

答:

7赞 kaylum 12/16/2021 #1

您需要调用 clearerr on 来清除 EOF。另外,请注意,返回 an 而不是 a,因为不适合 char。stdingetcharintcharEOF