getchar
читает один символ из стандартного ввода.Если вы поместите его в цикл while
, он будет продолжать читать по одному символу за раз, пока условие не станет ложным.
Функция Flush
выполняет чтение до тех пор, пока не встретит символ новой строки (\n
).Это символ, который появляется, когда пользователь нажимает клавишу ввода.
Итак, код, который вы дали, будет читать один символ (мне неясно, почему он использует для этого scanf
вместо простого getchar
,что будет быстрее), а затем отбрасывает оставшуюся часть ввода до тех пор, пока пользователь не нажмет клавишу ввода.
Если бы вы кормили эту программу foobar
, она бы взяла f
и отбросила oobar
в функции Flush
.Без вызова flush
, f
может перейти к одному scanf
, а второй scanf
получит первый o
.