【发布时间】:2012-01-25 01:58:10
【问题描述】:
以下代码编译后进入无限循环:
int main()
{
unsigned char ch;
FILE *fp;
fp = fopen("abc","r");
if(fp==NULL)
{
printf("Unable to Open");
exit(1);
}
while((ch = fgetc(fp))!=EOF)
printf("%c",ch);
fclose(fp);
printf("\n",ch);
return 0;
}
gcc 编译器也会在编译时发出警告
abc.c:13:warning: comparison is always true due to limited range of data type
当unsigned char 按预期被char 或int 替换时,代码运行良好,即终止。
但是代码对于unsigned int 也运行良好。
正如我在EOF 中所读到的那样,在stdio.h 中定义为-1 那么为什么此代码对于unsigned char 失败但对于unsigned int 运行良好。
【问题讨论】:
-
与fgetc does not identify EOF基本相同。我认为我们每周至少会遇到一次此类问题。
标签: c comparison eof unsigned-char fgetc