编译以下代码时,它会进入无限循环:
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那样-1,stdio.h为什么该代码对于 unsigned char 失败但对于 unsigned int 运行良好。