scanf
работает от буфера строки.Если буфер исчерпан, он занимает новую строку;но если в буфере еще есть что-то, он фактически не принимает новый ввод.
Кроме того, scanf
потребляет именно то, что вы говорите.Если вам нужен номер, он будет использовать номер или потерпит неудачу.Возвращаемое значение scanf
- это количество вещей, которые он успешно потребил.
Таким образом, что происходит, ваш первый scanf
читает новую строку (так как в буфере ничего нет);если первый символ окажется не числом, он не будет ничего потреблять, оставит буфер как есть и вернет 0
как «ноль успешно использованных вещей».В следующий раз, когда вы попросите номер, он увидит тот же символ и снова потерпит неудачу, и снова ничего не потребит.Как будто у этого персонажа застряло в горле.
Вы можете обойти его, прочитав остаток буфера при сбое, fflush
- запустив буфер, прочитав строку и проанализировав ее самостоятельно ...или, поскольку вам нужен только один символ, оставьте scanf
и просто используйте getchar
.
tl; dr: Не игнорируйте scanf
возвращаемое значение:)