In pratica, lo stdin è un file. Perciò quando ci digiti sopra con la tastiera, tutti i caratteri che digiti finiscono in questo file. Perciò se scrivi:

codice:
 |c|\n|...
e poi esegui una scanf chiedendo un solo carattere, verrà estratto un solo carattere.

codice:
 |\n|...
Al prossimo ciclo, richiedi un nuovo carattere, e verrà quindi estratto il newline.

La fflush (che funziona solo su windows, ricorda) svuota il buffer di input, cancellando quindi il newline (e se non vado errato, tutto ciò che è stato scritto sullo stdin dopo il newline).