Уже было рекомендовано, чтобы вы не использовали scanf
. Если вы чувствуете, что должны использовать scanf
, вам действительно следует проверить возвращаемое значение, чтобы определить, произошла ли ошибка ввода до преобразования.
Также было отмечено, что вы не должны сбрасывать stdin
через fflush
, поскольку это вызывает неопределенное поведение. Если вы чувствуете, что должны сбросить stdin
, вы можете обратиться к ответам на на этот вопрос .
Если введено недопустимое значение, например "1,234" , scanf
примет '1' и ", 234 / n" останется во входном потоке. Поскольку fflush(stdin)
не гарантированно работает, последующие вызовы на scanf
будут снова и снова отклонять одни и те же ',' , никогда не делая никакого прогресса. Если возвращаемое значение проверяется на ноль (что указывает на раннее совпадение), этого бесконечного цикла можно избежать. Также необходимо удалить недопустимые символы из входного потока перед другим вызовом scanf
.
См. scanf (), вызывающий бесконечный цикл .