что происходит, когда вы вводите такие вещи, как 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; т. Так что будьте осторожны.

Ответы на вопрос(5)

Ваш ответ на вопрос