Pelo amor fflush não pqp, até hoje não aprenderam que o fflush pode dar problema com o buffer de entrada, os próprios programadores da função fflush, disseram que não sabem o que pode acontecer quando você usa essa função para o buffer de entrada, a função fflush foi feita para buffer de saída !!!!! :!:
A melhor forma de se limpar o buffer realmente é simplesmente esta:
while (getchar() != '\n');//Pegando todos caracteres do buffer, chegando no '\n'(enter) ele descarta o '\n' e sai do loop
Pronto, se você colocar isso em baixo de cada scanf já vai ser muito mais saudável.
Para ficar mais legal ainda, pode-se usar isto:
#define LimparBuffer while(getchar()!='\n');
scanf("%d", &var);
LimparBuffer;
Mas para não precisar do while você pode fazer também:
scanf("%d%*c", &var);
Isso vai ler o numero inteiro e descartar o '\n'(enter) do buffer de uma vez. Para quem não souber o operador * no scanf faz ignorar o tal tipo de dado, no caso por exemplo se o usuário digita 10 e depois aperta enter ele vai guardar o 10 na var e descartar o '\n' deixando o buffer limpo. (O enter é um caractere).