Por que o scanf () está causando loop infinito nesse código?
Eu tenho um pequeno programa C que apenas lê números de stdin, um em cada ciclo de loop. Se o usuário inserir algum NaN, um erro deve ser impresso no console e o prompt de entrada deve retornar novamente. Na entrada de "0", o loop deve terminar e o número de valores positivos / negativos deve ser impresso no console. Aqui está o 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;
}
Meu problema é que, ao entrar em algum não-número (como "a"), isso resulta em um loop infinito escrevendo "-> Err ..." repetidamente. Eu acho que é um problema scanf () e eu sei que essa função pode ser substituída por uma mais segura, mas este exemplo é para iniciantes, sabendo apenas sobre printf / scanf, if-else e loops.
Eu já li as respostas paraessa questão e folheou outras perguntas, mas nada realmente responde a esse problema específico.