2010-03-24 12 views

risposta

25

Se si desidera semplicemente leggere un singolo carattere da stdin, quindi getchar() è la scelta appropriata. Se hai requisiti più complessi, allora getchar() non sarà sufficiente.

  • getc() consente di leggere da un flusso diverso (ad esempio, uno aperto con fopen());
  • scanf() consente di leggere più di un singolo carattere alla volta.

L'errore più comune quando si utilizza getchar() è quello di cercare di utilizzare una variabile char per memorizzare il risultato. È necessario utilizzare una variabile int, poiché l'intervallo di valori getchar() restituisce è "un valore nell'intervallo di unsigned char, più il singolo valore negativo EOF". Una variabile char non ha un intervallo sufficiente per questo, il che può significare che è possibile confondere un ritorno di carattere completamente valido con EOF. Lo stesso vale per getc().

+1

Grazie per la risposta. In scanf se do solo% c, allora dovrei essere in grado di leggere solo un carattere, giusto? – Jay

+0

Sì, ma è eccessivo per quello scopo. – caf

+2

Seriamente eccessivo. Su molte piattaforme, getchar() è una macro che restituisce rapidamente un carattere (con un flusso bufferizzato) o utilizza fread() per ottenere un carattere. Con scanf(), c'è un sacco di lavoro non necessario. – tomlogic

5

from Beej's Guide to C Programming

Tutte queste funzioni in un modo o nell'altro, leggere un singolo carattere dalla console o da un file. Le differenze sono abbastanza ridotte e sono le descrizioni:

getc() restituisce un carattere dal FILE specificato. Da un punto di vista di utilizzo , è equivalente alla stessa chiamata fgetc() e fgetc() è un un po 'più comune da vedere. Solo l'implementazione delle due funzioni differisce.

fgetc() restituisce un carattere dal FILE specificato. Da un punto di vista di utilizzo , equivale alla stessa chiamata getc(), ad eccezione del fatto che fgetc() è un po 'più comune da vedere. Solo l'implementazione delle due funzioni differisce.

Sì, ho imbrogliato e ho usato cut-n-paste per fare l'ultimo paragrafo.

getchar() restituisce un carattere da stdin. In effetti, è lo stesso di chiamando getc (stdin).

Problemi correlati