2013-08-02 9 views
16

Sono principiante in linguaggio di programmazione C, di recente ho studiato su getchar funzione, che accettare un personaggio dalla console o da un file, visualizzare immediatamente durante la digitazione e abbiamo bisogno di premere Enter chiave per procedere.Perché la variabile utilizzata per contenere il valore restituito da getchar deve essere dichiarata come int?

Restituisce il unsigned char da leggere. Se si incontra la fine del file o si verifica un errore, le funzioni getchar() restituiscono EOF.

La mia domanda è che, quando restituisce unsigned char, quindi perché il suo valore restituito è memorizzato nella variabile int?

Per favore aiutatemi.

+5

Un buon collegamento: [Definizione di EOF e come utilizzarlo efficacemente] (http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?id=1043284351&answer=1048865140) –

+0

Vedere anche ['while ((c = getc (file))! = EOF) 'loop non si fermerà nell'esecuzione] (https://stackoverflow.com/questions/13694394/while-c-getcfile-eof-loop-wont-stop-executing/) . –

+2

Possibile duplicato di [Differenza tra int e char in getchar/fgetc e putchar/fputc?] (Http://stackoverflow.com/questions/35356322/difference-between-int-and-char-in-getchar-fgetc-and -putchar-fputc) –

risposta

17

Precisamente a causa di tale valore EOF. Poiché un char in un file può essere un qualsiasi valore di char possibile, incluso il carattere null utilizzato da C-string per la terminazione, getchar() deve utilizzare un tipo di intero più grande per aggiungere un valore EOF.

Accade semplicemente di utilizzare int a tale scopo, ma potrebbe utilizzare qualsiasi tipo con almeno 9 bit.

+0

Dettaglio: "un char in un file può essere un qualsiasi valore di char possibile" -> un carattere può avere molti possibili valori, ma il valore restituito da 'getchar()' è il carattere 'unsigned char' di un carattere valore, non il suo valore 'char'. – chux

2

Leggi questo link: link

Qui è scritto che:

Non convertire il valore restituito da una funzione di I/O personaggio a char se tale valore verrà confrontato con EOF. Una volta che il valore di ritorno di queste funzioni è stato convertito in un tipo di carattere, i valori dei caratteri potrebbero essere indistinguibili da EOF. Inoltre, se sizeof (int) == sizeof (char), l'int utilizzato per acquisire il valore restituito potrebbe essere indistinguibile da EOF. Vedi FIO35-C. Utilizzare feof() e ferror() per rilevare errori di fine file e file quando sizeof (int) == sizeof (char) per maggiori dettagli su sizeof (int) == sizeof (char). Vedi STR00-C. Rappresenta i caratteri usando un tipo appropriato per ulteriori informazioni sull'uso corretto dei tipi di carattere.

Questa regola si applica all'uso di tutte le funzioni di I/O dei caratteri.

4

Il tipo di reso è int per contenere il valore speciale EOF.

EOF è una macro che si espande a un'espressione costante intera con tipo int e un valore negativo dipendente dall'implementazione ma è molto comunemente -1.

Problemi correlati