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.