Il comportamento di fflush(stdin) non è definito dallo standard. Praticamente nessuna combinazione di compilatore e SO la supporta, se si parla di mainstream.
L'idioma più standard e portabile è il seguente, fornito in via del tutto eccezionale, poiché trattasi davvero di una FAQ che ricorre centinaia di volte su ogni forum, incluso il presente:

codice:
void kbd_clean(void)
{
    register char ch;
    do 
    {
        ch = getchar();
    } while (('\n' != ch) && (EOF != ch));
    /* 
    ** Alternativamente, piu' in sintesi: 
    ** while ((ch = getchar() != '\n') && (ch != EOF));
    */
}