при компиляции следующего кода он переходит в бесконечный цикл:
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 .