Что происходит, когда вы вводите такие вещи, как 12ab в scanf ("%d",&argu)?

Я столкнулся с этой проблемой, когда хотел проверить, что я ввожу, является числом. Функция 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— нет. Так что будьте осторожны.

5
задан Jonathan Leffler 16 September 2019 в 02:30
поделиться