在我的代碼中,我從控制檯輸入並將其寫入文件「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。 –