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

Мы имеем небольшую C-программу, которая просто читает числа из стандартного ввода, по одному в каждом цикле цикла. Если пользователь вводит некоторое значение NaN, на консоль должна быть выведена ошибка, и запрос ввода должен вернуться снова. На входе "0"цикл должен закончиться, а количество заданных положительных / отрицательных значений должно быть выведено на консоль. Вот'С программой:

#include 

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;
}

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

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

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

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