【问题标题】:Can't read anything after sending EOF?发送 EOF 后无法读取任何内容?
【发布时间】:2022-01-19 06:59:57
【问题描述】:
#include <stdio.h>
int main()
{
    char c = getchar(); //EOF (ctrl + d )
    while( ( c = getchar() ) != '?' )
    {
        printf( "%d\n", c == EOF );//infinite loop printing 1
    }
}

这里发生了什么?

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

【问题讨论】:

  • 这就是 EOF 的全部目的,通知流停止读取。例如。当文件中的所有内容都被读取(因此 EOF = 文件结尾)时,流应该停止读取。
  • EOF 是“文件结尾”的缩写。你知道吗?我想你会的。因此,请说明您在到达文件末尾后希望从文件中读取的内容或其他哪些特殊方面使您的情况与众不同。
  • 关于:char c = getchar(); 函数:getchar() 实际上返回一个int。并且,根据您对char(有符号或无符号)的实现,它可能无法识别 EOF. So, start by int c = getchar();`

标签: c infinite-loop eof getchar


【解决方案1】:

您需要在stdin 上调用clearerr 以清除EOF。另外,请注意 getchar 返回 int 而不是 char,因为 EOF 不适合字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 2022-01-10
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多