【发布时间】:2017-09-13 21:28:06
【问题描述】:
在我的代码中,我从控制台获取输入并将其写入文件“测试”,我从控制台获取输入,直到遇到 EOF ((fscanf(stdin,"%c %s %d % f",&a,b,&c,&d))!=EOF) 因为如果我们在扫描时输入 EOF(ctrl+Z),fscanf 返回 EOF。但是我的代码在获取一个 EOF 后并没有停止,它需要两个或三个 EOF 来扫描终止。我手动检查第一个 EOF 没有返回任何内容,第二个 EOF 返回一个,第三个 EOF 返回-1。扫描终止后它也会打印荒谬的东西。 我的代码如下所示
#include<stdio.h>
int main()
{
FILE *f;
char a,b[100];
int c;
float d;
f=fopen("test","w");
if(f==NULL)
printf("error");
while((fscanf(stdin,"%c %s %d %f",&a,b,&c,&d))!=EOF)
fprintf(f,"%c%s%d%f",a,b,c,d);
fclose(f);
f=fopen("test","r");
while((fscanf(f,"%c%s%d%f",&a,b,&c,&d))!=EOF)
printf("%c %s %d %f\n",a,b,c,d);
return 0;
}
【问题讨论】:
-
请提供您的准确测试输入
-
如果您不在空行上,可能与按两次 ^Z 模拟 EOF 有关。当 ^Z 作为第一个输入时,您的程序会按预期运行。
-
至于为什么要按两次以上,是因为 fscanf 只有在第一次匹配转换或失败发生之前到达文件末尾时才返回 EOF。所以你已经给出了一些输入,然后按 ^Z(2 次),然后 fscanf 不会返回 EOF。