Ho il seguente programma:
int main(int argc, char *argv[])
{
char ch1, ch2;
printf("Input the first character:"); // Line 1
scanf("%c", &ch1);
printf("Input the second character:"); // Line 2
ch2 = getchar();
printf("ch1=%c, ASCII code = %d\n", ch1, ch1);
printf("ch2=%c, ASCII code = %d\n", ch2, ch2);
system("PAUSE");
return 0;
}
Come ha spiegato l'autore del codice sopra: Il programma non funzionerà correttamente perché alla Riga 1, quando l'utente preme Invio, lascerà nel buffer di input 2 caratteri: Enter key (ASCII code 13)
e \n (ASCII code 10)
. Pertanto, alla riga 2, leggerà \n
e non aspetterà che l'utente inserisca un carattere.
OK, ho capito. Ma la mia prima domanda è: perché la seconda getchar()
( ch2 = getchar();
) non legge il carattere Enter key (13)
, invece del \n
carattere?
Successivamente, l'autore ha proposto 2 modi per risolvere tali problemi:
uso
fflush()
scrivi una funzione come questa:
void clear (void) { while ( getchar() != '\n' ); }
Questo codice ha funzionato effettivamente. Ma non riesco a spiegarmi come funziona? Perché nell'istruzione while, che usiamo getchar() != '\n'
, ciò significa leggere un singolo carattere tranne '\n'
? in caso affermativo, nel buffer di input rimane ancora il '\n'
carattere?