无法使用fscanf循环到达EOF

时间:2013-12-21 19:19:09

标签: c file eof do-while

Helo,当我继续我的HW项目时,我被困在阅读EOF,在这个循环中,它被永久地停留,显然,输入永远不会得到EOF的价值,我做错了什么?

int main ()
{
FILE *ffil;
char input;
ffil=fopen("a.csv","r");
printf("error0");
do
{
    fscanf("%c",&input);
}while(input!=EOF);
fclose(ffil);
return 0;
}

1 个答案:

答案 0 :(得分:3)

scanf不起作用。此外,EOF不适合char。如果你想在EOF之前逐个字符地阅读,那就用惯用的方式来做:

int input;  /* int, not char! */

while ( (input = getchar()) != EOF )
{
    /* do stuff with 'input' here. */
}

如果你真的想使用scanf,你可以。它返回成功转换的值的数量,因此您可以使用它而不是测试EOF

char input;  /* char, not int! */

while ( scanf("%c", &input) == 1 )  /* loop while scanf succeeds */
{
    /* do stuff with 'input' here */
}

这两个都来自stdin,但看起来您的测试确实想要从ffil读取。如果是这种情况(从你的问题中不清楚),修改上面的例子如下:

int input;  /* int, not char! */

while ( (input = fgetc(ffil)) != EOF )
{
    /* do stuff with 'input' here. */
}

char input;  /* char, not int! */

while ( fscanf(ffil, "%c", &input) == 1 )  /* loop while scanf succeeds */
{
    /* do stuff with 'input' here */
}