Dlaczego scanf () powoduje nieskończoną pętlę w tym kodzie?

Mam mały program C, który po prostu odczytuje liczby ze standardowego wejścia, po jednym w każdym cyklu pętli. Jeśli użytkownik wprowadzi trochę NaN, na konsoli powinien zostać wydrukowany błąd, a znak zachęty powinien powrócić. Na wejściu „0” pętla powinna się zakończyć, a liczba podanych wartości dodatnich / ujemnych powinna zostać wydrukowana na konsoli. Oto program:

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

Mój problem polega na tym, że po wprowadzeniu jakiegoś numeru (np. „A”) powoduje to nieskończoną pętlę zapisu „-> Err ...” w kółko. Sądzę, że jest to problem ze skanowaniem () i wiem, że ta funkcja może zostać zastąpiona przez bezpieczniejszą, ale ten przykład jest przeznaczony dla początkujących, znających tylko printf / scanf, if-else i pętle.

Przeczytałem już odpowiedzito pytanie i przejrzał inne pytania, ale tak naprawdę nic nie odpowiada na ten konkretny problem.

questionAnswers(13)

yourAnswerToTheQuestion