Ho letto nel libro The C Programming Language di Dennis Ritchie che int
deve essere usato per una variabile per contenere EOF - per renderlo sufficientemente grande da poter contenere il valore EOF - no char
. Ma il seguente codice funziona bene:
#include<stdio.h>
main() {
char c;
c=getchar();
while(c!=EOF) {
putchar(c);
c=getchar();
}
}
Quando non c'è più input, getchar
restituisce EOF. E nel programma sopra, la variabile c
, con tipo di carattere, è in grado di trattenerla correttamente.
Perché funziona? Secondo la spiegazione nel libro sopra menzionato, il codice non dovrebbe funzionare.
0xff
. La memorizzazione del risultato di getchar()
in int
risolve il problema. La tua domanda è essenzialmente la stessa della domanda 12.1 nelle FAQ di comp.lang.c , che è una risorsa eccellente. (Inoltre, main()
dovrebbe essere int main(void)
, e non farebbe male aggiungere un return 0;
prima della chiusura }
.)