这是我的代码。
#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
停止?
这个角色又是什么?
答案 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 读取它。 所以,你需要额外的时间