Я столкнулся с этой проблемой, когда хотел проверить, что я ввожу, является числом. Функция 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", &argu)
на самом деле число и запросить другой ввод, если это не так?
EDIT:
Я увидел ответы и решил свою проблему, используя while(*eptr != '\n')
.
Обратите внимание, что функция fgets
фактически считывает '\n' в массив, а функция gets
— нет. Так что будьте осторожны.