что происходит, когда вы вводите такие вещи, как 12ab, в scanf («% d» и аргумент)?
Я столкнулся с этой проблемой, когда я хочу проверить, что я ввожу число. Функция scanf вернет 1, если я успешно введу число. Итак, вот что я написал:
int argu;
while(scanf("%d",&argu)!=1){
printf("Please input a number!\n");
}
Но когда я ввожу в него такие вещи, как abcd, цикл будет длиться вечно и не останавливаться для запроса.
Я просмотрел его в Интернете и обнаружил, что он как-то связан с кешем, и мне нужно его почистить, чтобы scanf мог получать новые данные. Поэтому я попробовал fflush, но это не сработало.
Тогда я увидел это:
int argu,j;
while(scanf("%d",&argu)!=1){
printf("Please input a number!\n");
while((j=getchar())!='\n' && j != '\n');
}
Затем, когда я ввожу такие вещи, как «abcd» это работало хорошо, и это вызвало мой вклад. Но когда я ввожу такие вещи, как «12ab», это не сработает снова.
Так есть ли способ, которым я могу проверить, что вход для scanf («% d», «аргумент») на самом деле является числом и запрашивает другой ввод, если это не так?
EDIT:
Я видел ответы и решил свою проблему с помощьюwhile(*eptr != '\n')
.
Обратите внимание, чтоfgets
функция на самом деле читает "\ n" к массиву иfget
Безразлично & APOS; т. Так что будьте осторожны.