Почему scanf () вызывает бесконечный цикл в этом коде?

У меня есть небольшая C-программа, которая просто читает числа из стандартного ввода, по одному в каждом цикле цикла. Если пользователь вводит некоторое значение NaN, на консоль должна быть выведена ошибка, и запрос ввода должен вернуться снова. При вводе «0» цикл должен завершиться, и количество заданных положительных / отрицательных значений должно быть выведено на консоль. Вот программа:

#include <stdio.h>

int main()
{
    int number, p = 0, n = 0;

    while (1) {
        printf("-> ");
        if (scanf("%d", &number) == 0) {
            printf("Err...\n");
            continue;
        }

        if (number > 0) p++;
        else if (number < 0) n++;
        else break; /* 0 given */
    }

    printf("Read %d positive and %d negative numbers\n", p, n);
    return 0;
}

Моя проблема заключается в том, что при вводе некоторого числа (например, «а») это приводит к бесконечной циклической записи «-> Err ...» снова и снова. Я предполагаю, что это проблема scanf (), и я знаю, что эту функцию можно заменить на более безопасную, но этот пример предназначен для начинающих, знающих только о printf / scanf, if-else и loop.

Я уже прочитал ответы наэтот вопрос и пролистал другие вопросы, но на самом деле ничего не ответило на эту конкретную проблему.

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

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