При использовании scanf
, если вы пытаетесь выполнить операцию чтения, и найденные данные не соответствуют ожидаемому формату, scanf
оставляет неизвестные данные для последующего чтения в следующей операции чтения.В этом случае происходит то, что вы пытаетесь прочитать отформатированные данные от пользователя, данные пользователя не соответствуют ожидаемому формату, и поэтому они ничего не могут прочитать.Затем он циклически повторяется, чтобы попытаться прочитать снова, и находит те же самые вводные данные, которые у него были раньше, затем повторяется снова и т. Д.
Чтобы это исправить, вам просто нужно использовать символы, которые склеивали ввод.Один из способов сделать это - вызвать fgetc
для чтения символов, пока не будет обнаружена новая строка, которая сбросит все оскорбительные символы:
while (1) {
int i = 0;
int r = scanf("%d", &i);
if (r == EOF) {
printf("Error using scanf()\n");
} else if (r == 0) {
printf("No number found\n");
/* Consume bad input. */
while (fgetc(stdin) != '\n')
;
} else {
printf("The number you typed in was %d\n", i);
}
}
Надеюсь, это поможет!