导致故障的getc(fp)
这是我的密码导致故障的getc(fp),c,eof,getc,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); } } #包括 #包括 int main(
#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);
}
}
#包括
#包括
int main(int argc,字符**argv)
{
字符a;
a=9;
文件*fp;
fp=fopen(argv[1],“r”);
while(a!=EOF)
{
a=fgetc(fp);
printf(“\n%d”,a);
}
}
输出到这是正常的,但在最后我得到了一个奇怪的字符-1(因为我打印的是整数值)
如何仅在EOF
处停止?
还有,这个字符是什么?您正在打印
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):
}
您正在打印
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):
}
在出现以下情况时,为什么不停止
:
do {...}while(a != EOF)
我假设在读取它之后,a得到了EOF值。
因此,您可以额外执行一次循环为什么不在
出现此情况时停止:
do {...}while(a != EOF)
我假设在读取它之后,a得到了EOF值。
因此,除了其他答案中的方法外,您还可以多做一次循环,您也可以这样做:
while ((a = fgetc(fp)) != EOF)
{
printf("%d\n", a);
}
现在您有了一些替代解决方案。:)
编辑:作为R。。因此,请提醒我们,您还必须将a
的类型更改为int
除了其他答案中的方法外,您还可以这样做:
while ((a = fgetc(fp)) != EOF)
{
printf("%d\n", a);
}
现在您有了一些替代解决方案。:)
编辑:作为R。。因此,请提醒我们,您还必须将a
的类型更改为int您需要使a
具有类型int
,因为该类型是fgetc()
的返回类型,并且需要正确表示EOF。您需要使a
具有类型int
,由于该类型是fgetc()
的返回类型,需要正确表示EOF。不要忘记检查fopen()返回值,不要忘记fclose()不要忘记检查fopen()返回值,不要忘记fclose(),这将至少在循环中运行一次,如果fgetc
立即返回EOF
,则仍然打印-1
。这将至少在循环中运行一次,如果fgetc
立即返回EOF
,则仍然打印-1
。这是CTS中最常见的解决方案这是CTS中最常见的解决方案这并不能解决a
类型错误(char
而不是int
)的问题……是,但只是希望让OP在盲目接受某些东西之前注意到下面的正确答案。现在将其删除。这并不能解决a
的类型错误(char
而不是int
)的问题……是的,但只是希望OP在盲目接受某些内容之前注意到下面的正确答案。现在删除它。