По какой-то причине, если пользователь вводит неверный тип данных, например «j» или «%», цикл перестает запрашивать ввод и будет продолжать отображение "Enter an integer >"
снова и снова. Как я могу заставить программу обрабатывать плохие входы? И почему ввод нечислового значения вызывает такое странное поведение?Нечетный ввод вызывает бесконечный цикл
#define SENTINEL 0;
int main(void) {
int sum = 0; /* The sum of numbers already read */
int current; /* The number just read */
do {
printf("\nEnter an integer > ");
scanf("%d", ¤t);
if (current > SENTINEL)
sum = sum + current;
} while (current > SENTINEL);
printf("\nThe sum is %d\n", sum);
}
'зсапЕ()' останавливается первый несимметричный символ. Он хранит этот символ в буфере. В следующий раз через цикл символ все еще присутствует, и 'scanf' останавливается. В следующий раз через цикл символ все еще присутствует, и 'scanf' останавливается. В следующий раз через цикл ... ... – pmg
Этот код даже не компилируется из-за значения макроса 'SENTINEL'. Вероятно, вы хотите иметь '#define SENTINEL 0'. –
Это была только опечатка. Это было так, как вы написали его в оригинальной программе, и я исправил ее выше. –