Warum verursacht scanf () in diesem Code eine Endlosschleife?

Ich habe ein kleines C-Programm, das gerade Zahlen von stdin liest, eine bei jedem Schleifenzyklus. Wenn der Benutzer NaN eingibt, sollte ein Fehler auf der Konsole ausgegeben werden und die Eingabeaufforderung erneut angezeigt werden. Bei Eingabe von "0" sollte die Schleife enden und die Anzahl der angegebenen positiven / negativen Werte auf der Konsole ausgegeben werden. Hier ist das Programm:

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

Mein Problem ist, dass bei Eingabe einer Nicht-Zahl (wie "a") immer wieder eine Endlosschleife "-> Err ..." geschrieben wird. Ich denke, es ist ein scanf () - Problem und ich weiß, dass diese Funktion durch eine sicherere ersetzt werden könnte, aber dieses Beispiel ist für Anfänger gedacht, die nur über printf / scanf, if-else und Schleifen Bescheid wissen.

Ich habe die Antworten schon gelesendiese Frage und überflog andere Fragen, aber nichts wirklich dieses spezifische Problem zu beantworten.

Antworten auf die Frage(13)

Ihre Antwort auf die Frage