在我的代码中,我从控制台输入并将其写入文件“test”,我从控制台输入输入信息,直到遇到EOF((fscanf (stdin,“%c%s%d%f”,& a,b,& c,& d))!= EOF),因为如果我们在扫描时输入EOF(ctrl + Z),fscanf会返回EOF。但是我的代码在一次EOF后并没有停止,它需要两到三个EOF来扫描终止。我手动检查第一个EOF什么也没有返回,第二个EOF返回一个和第三个EOF返回-1。扫描终止后它也打印出荒谬的东西。 我的代码如下EOF在C中不能正常工作以及打印也是荒谬的
#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;
}
请给你确切的测试输入 – kaylum
也许它与按^ Z两次模拟EOF如果你不是在一个空行的事。按^ Z作为第一个输入时,程序的行为与预期相同。 –
至于为什么你必须按两次以上,是因为fscanf只有在第一次匹配转换或失败之前到达文件结尾时才返回EOF。所以你给了一些输入,然后按^ Z(2次),然后fscanf不会返回EOF。 –