提问人:Stanislaw T 提问时间:11/25/2013 更新时间:11/28/2013 访问量:110
C 语言中的基本流处理
basic stream handling in c
问:
我只是对 C 中的基本流处理感到困惑。即使经过一个小时的谷歌搜索和阅读这个问题,我也没有更聪明(这不是我第一次尝试深入研究这个问题)。
我正在尝试从输入中读取数字,直到达到 EOF 或非数字,并能够区分这 2 个。据我了解,这应该有效,但条件从来都不是真的。为什么?有人可以为我提供一个工作代码片段以及一个虚拟友好的深入解释吗?feof
ferror
#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;
}
答:
0赞
Stanislaw T
11/28/2013
#1
我理解流行为的问题源于一个小特点。我不知道在 Windows 控制台中有一个 newb 不友好的歧义,Ctrl+Z 可以读取 ASCII 0x1A如果您输入像 12 23 ^Z/enter/ 一样,但当您执行 12 23 /enter/^Z/enter/ 时,会被读取为正确的 EOF。 此代码解决了该问题
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("int or eof\n");
int num;
while( scanf("%d",&num) ==1 )
{
printf("the read number is %d \n",num);
}
if(!feof(stdin) && getchar()!=0x1A)//first check if its read as EOF,
//if it fails, call getchar for help to check for ^Z
{
printf("non-int error\n");
}
else printf("eof ok\n");
system("PAUSE");
return 0;
对于误导性的问题,我深表歉意。
上一个:FEOF 或 FSanFf 错误
评论
而 ferror()
只会在流处于错误状态时报告 true;当您输入无效的数据时,则不会。该错误由scanf()
返回,您正在适当地检查该错误。