getc(fp)造成麻烦

时间:2012-02-21 13:01:40

标签: c eof getc

这是我的代码。

#include<stdlib.h>
#include<stdio.h>
int main(int argc,char** argv)
{
    char a;
    a=9;
    FILE * fp;
    fp=fopen(argv[1],"r");
    while(a!= EOF)
    {
        a=fgetc(fp);
        printf("\n%d",a);
    }
}

输出到此是好的,但最后我得到一个奇怪的字符-1(因为我打印整数值。

如何仅在EOF停止? 这个角色又是什么?

4 个答案:

答案 0 :(得分:2)

您正在打印EOF字符(-1),因为您不会在EOF之后立即检查是否遇到fgetc()。将循环的结构更改为:

int a; /* not char, as pointed out by R... */

for (;;)
{
    a = fgetc(fp);
    if (EOF == a) break;
    printf("\n%d", a):
}

答案 1 :(得分:2)

除了其他答案中的方法,你也可以这样做:

while ((a = fgetc(fp)) != EOF)
{
    printf("%d\n", a);
}

现在您有一些替代解决方案。 :)

编辑:由于R ..如此善意地提醒我们,您还必须将a的类型更改为int

答案 2 :(得分:1)

您需要让a具有int类型,因为该类型是fgetc()的返回类型,并且需要正确表示EOF。

答案 3 :(得分:0)

为什么不在这种情况下停止while

do {...}while(a != EOF)

我认为有一个EOF值 AFTER 读取它。 所以,你需要额外的时间