2016-05-26 9 views
5

Sto usando getchar() mentre sto scrivendo un programma in C (scanf non è ancora permesso a questo punto del corso.) Mi chiedevo se ogni volta lo chiamo se passa a quello successivo; anche durante le operazioni di assegnazione. Per esempio; Sto cercando di leggere in un doppio dalla console; e decidere se ha un segno negativo sul fronte. Se lo fa; Voglio assegnare una variabile neg ad essere 1 (in modo che io possa dire se il risultato finale debba essere restituito negativo) e poi voglio passare al carattere successivo per fare i miei calcoli reali e cosa no. ex)utilizzando getchar() in C; passa al char successivo ogni volta che lo uso? Compreso tra le operazioni di assegnazione?

int x = getchar(); 
     int neg = 0; 

     if(x == '-') { 
     neg = 1; 
    x = getchar(); // will this make it so the next time I use the x   
     }   // variable it will be past the negative sign and to the 
        //first actual digit? 
+0

Sort of - la lettura avviene non appena 'x = getchar();' viene eseguito, non la prossima volta che viene usato 'x'. –

+0

Quello che si fa con il valore di ritorno di qualsiasi funzione, incluso 'getchar()', non ha alcun impatto su ciò che la funzione stessa fa quando viene chiamata. In particolare, l'assegnazione del valore di ritorno a una variabile non ha un tale impatto. Ci sono altri fattori che modulano il comportamento della funzione, come i valori dei loro argomenti, ma le funzioni non sanno né si preoccupano di ciò che si fa con i loro valori di ritorno. –

risposta

5

Sì, ogni volta che si chiama getchar() si leggerà la prossima carattere (sempre che ci sia prossima carattere da leggere).

Citando C11, capitolo §7.21.7.6

La funzione getchar() restituisce il carattere successivo dal flusso di input puntato da stdin.

Nel caso in cui non c'è niente di valida per essere letto,

Se il flusso è alla fine del file, l'indicatore di fine file per il flusso è impostato e getchar restituisce EOF. Se si verifica un errore di lettura, viene impostato l'indicatore di errore per il flusso e getchar restituisce EOF.

Problemi correlati