Проверка ввода с использованием возвращаемого значения scanf не работает - PullRequest
0 голосов
/ 10 мая 2018

Я работаю над финальным проектом Tic-Tac-Toe.Я прошу пользователя напечатать номер поля, которое он хотел бы заполнить, и затем я использую целое число err , чтобы получить возвращаемое значение scanf .Scanf должен вернуть количество целых чисел, которые он прочитал в этом случае, и я прошу прочитать одно целое число, поэтому, пока err! = 1, он должен идти в цикл while.Это, однако, не работает.


        printf("\nBox number: ");
        int boxNumber, err;
        err = scanf("%d", &boxNumber);

        while (err != 1) {
            printf("\nWrong input.");
            printf("\nBox number: ");
            err = scanf("%d", &boxNumber);
        } 

Когда вводится нецелое число, вывод:

Неверный ввод.
Номер ящика:

В безостановочном цикле.Строка, где scanf затем снова вызывается для ввода пользователем значения, как будто никогда не запускается.
Я понятия не имею, в чем проблема.Пожалуйста, помогите.

1 Ответ

0 голосов
/ 10 мая 2018

После сбоя первого scanf() нецелое число остается во входном потоке и предотвращает последующее выполнение, оставаясь навсегда.

Вам нужно избавиться от не сканируемого затяжного ввода.

См. Эти статьи для выбора вашего любимого метода:
http://sekrit.de/webdocs/c/beginners-guide-away-from-scanf.html
Как читать / анализировать ввод в C? FAQ

...