【发布时间】:2013-11-24 20:34:45
【问题描述】:
我只是对 C 中的基本流处理感到困惑。即使经过一个小时的谷歌搜索和阅读该问题,我也并不聪明(这不是我第一次尝试深入研究这个问题)。
我正在尝试从输入中读取数字,直到达到 EOF 或非数字,并且能够区分这两个。据我所知,这应该有效,但 feof 和 ferror 条件永远不会成立。这是为什么 ?有人可以为我提供一个工作代码 sn-p 以及一个虚拟的友好深入解释吗?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int number;
printf("number or EOF:\n");
while(scanf("%d",&number) == 1)
{
printf("read number %d\n",number);
}
if(ferror(stdin))printf("error reading\n");
else if (feof(stdin))printf("eof reached\n");
return 0;
}
【问题讨论】:
-
stdin 永远不会结束 - 它有点暂停。用文件试试。 (您可能想在谷歌上搜索 stdin/stdout/stderr - 它们是特殊的流)。
-
@JeffRSon:当您将 EOF 发送到 tty 时,来自 tty 的标准输入结束。在许多终端上 Ctrl+D 会这样做。