Я бы сказал, что есть только два "исправления".
Сохраните вызовы scanf
, бородавки и все. Тщательно воздержитесь от ввода нецифровых цифр, когда scanf
ожидает цифры.
Откажитесь от scanf
и используйте что-нибудь еще. Мы только что обсуждали эту тактику на этом новом вопросе .
Как только вы используете scanf
, всегда соблазнительно пытаться "исправить"это, так что здесь, вероятно, скрывается третий ответ, объясняющий, как сделать более качественный, более удобный для пользователя, более устойчивый к ошибкам ввод, при этом все еще используя scanf
. Однако, по моему мнению, это глупое поручение, пустая трата времени. Простые, очевидные исправления многих недостатков scanf
сами по себе несовершенны и имеют дополнительные недостатки. Вероятно, вы потратите больше времени на исправление программы, использующей scanf
, чем потратили бы на ее переписывание, чтобы не использовать scanf
- и вы получите в целом лучшие результаты (не говоря уже о более чистой программе) с не- scanf
- используя переписывание в любом случае.