choice
- это char
, а верный спецификатор преобразования, который будет использоваться в scanf
, - это c
, а не s
.
. Следует также соблюдать осторожность при использовании scanf
с вкраплениямис printf
операторами, которые печатают новые строки (\n
).
Когда scanf
имеет спецификатор преобразования c
, он будет интерпретировать любые пробелы как символ и не будет ждать фактического ввода,Таким образом, scanf
здесь должен учитывать пробельные символы, включая пробел в начале.
Так что выражение scanf
должно быть:
scanf(" %c", &choice);
Это также хорошая практикапроверить возвращаемое значение scanf
, прежде чем продолжить в программе.Согласно стандарту scanf
возвращает количество назначенных элементов ввода, которое может быть меньше предусмотренного или даже равно нулю в случае неудачного раннего сопоставления.