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;
}
答案 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 */
}