
Originariamente inviata da
MItaly
In primis, fflush(stdin) non è standard; lo standard C dice che fflush si può usare solo su stream di output, motivo per cui su diversi compilatori (ad esempio gcc) fflush(stdin) non ha alcun effetto. Questo credo che derivi anche dal fatto che lo standard non definisce come avviene il buffering in input, motivo per cui una chiamata del genere non avrebbe un effetto ben definito.
Quanto al buffering in input, normalmente avviene a due livelli; in primis, il sistema operativo fa buffering dei tasti inseriti nella console - ovvero, quando viene premuto un tasto questo deve essere messo in un buffer per essere processato poi, quando il programma effettivamente lo richiede. In secondo luogo, anche la libreria C fa buffering in input, chiamando le funzioni del sistema operativo per la lettura di stream solo di tanto in tanto - tipicamente per lo standard input cercherà di leggere tutto il contenuto del buffer del sistema, per poi dispensarlo man mano tramite le funzioni di input del C (scanf, getchar, fgets, ...).
Se svuoti il buffer di input, l'effetto netto è di buttare via tutti i caratteri che sono già stati inseriti da tastiera, ma ancora non sono stati processati. Tipicamente questo può servire se il programma si è accorto che è stato inserito un input errato e si vuole scartare tutto quello che è stato inserito da tastiera finora per evitare che, alla successiva fgets o scanf, si continuino a leggere il resto dei dati errati già inseriti.