Sample, не дай Бог, тебе совсем тупой препод попадется - ничего не объяснишь!
А вообще-то, примерно так. Ввод и вывод буферируются в scanf() и printf(), соответственно. А функции семейства flush не подавляют буферирование, а осуществляют однократную принудительную очистку буфера.
Кстати, если работаешь на Юниксе, можешь продемонстрировать преподавателю интересный эффект. Пишешь что-нибудь вроде:
...
printf("Hello");
fork();
...
Знаешь, что будет? Слово "Hello" выведется 2 раза. И знаешь почему? Потому, что оно оказывается в буфере, и в момент создания дочернего процесса ( fork(); ), когда копируется весь контекст, буфер тоже копируется. Соответственно, оба процесса потом выведут этот текст.
Этого не произойдет, если перед fork() вызвать flush().