¿Por qué scanf () causa un bucle infinito en este código?
Tengo un pequeño programa C que solo lee los números de la entrada estándar, uno en cada ciclo de bucle. Si el usuario ingresa algo de NaN, se debe imprimir un error en la consola y la solicitud de entrada debe regresar nuevamente. En la entrada de "0", el bucle debe finalizar y el número de valores positivos / negativos dados debe imprimirse en la consola. Aquí está el programa:
#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;
}
Mi problema es que al ingresar un número no numérico (como "a"), esto se traduce en una escritura de bucle infinito "-> Err ..." una y otra vez. Supongo que es un problema de scanf () y sé que esta función podría ser reemplazada por una más segura, pero este ejemplo es para principiantes, que solo conocen printf / scanf, if-else y loops.
Ya he leído las respuestas aesta pregunta y repasó otras preguntas, pero nada realmente responde a este problema específico.