quando il seguente codice viene compilato va in un ciclo infinito:Confrontando unsigned char e EOF
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;
}
Il compilatore GCC dà anche avvertimento sulla compilation
abc.c:13:warning: comparison is always true due to limited range of data type
il codice viene eseguito bene quando unsigned char
è sostituito da char
o int
come previsto, cioè termina.
Ma anche il codice funziona correttamente per unsigned int
. come ho ho letto in EOF
si definisce come -1
in stdio.h
quindi perché questo codice non riesce per il char unsigned ma funziona bene per int unsigned.
essenzialmente la stessa [fgetc non identifica EOF] (http://stackoverflow.com/questions/3977223/fgetc-does-not-identify-eof). Penso che abbiamo questo tipo di domanda almeno una volta alla settimana. –
Vedere anche http://c-faq.com/stdio/getcharc.html –
Possibile duplicato di [Perché la variabile utilizzata per contenere il valore restituito da getchar deve essere dichiarata come int?] (http://stackoverflow.com/questions/18013167/why-must-the-variable-used-to-hold-getchars-return-value-be-declared-as-int) –