Eu estou tentando obter uma entrada inteira, e eu tenteio método mais elementar que pude encontrar. Porém, sempre que algo não é um inteiro, fica preso em um loop infinito. Acredito que seja causado pelo fgets funcion. Eu tentei algumas soluções que encontrei neste site, mas nenhuma funcionou. O código é o seguinte
int getint()
{
int number;
char input[4];
fgets(input, 4, stdin);
while ( atoi(input) < 0 || ( strcmp(input, "0") != 0 && atoi(input) == 0 ) )
printf("Insert a non negative number: ");
fgets(input, 4, stdin);
number = atoi(input);
printf("%dn", number);
return number;
}
Respostas:
0 para resposta № 1Se houver mais de uma instrução que você queira escrever em um loop ou declaração, use chaves {}
para definir quais declarações vêm no loop.
No seu código, apenas o printf("Insert a non negative number: ");
declaração está no loop, e nada está mudando o input
"s valor no loop, portanto, se a condição do loop for verdadeira, ela sempre permanecerá verdadeira.
Altere para:
while ( atoi(input) < 0 || ( strcmp(input, "0") != 0 && atoi(input) == 0 ) )
{
printf("Insert a non negative number: ");
fgets(input, 4, stdin);
}