/ / Preso em loop fgets infinito - c, while-loop, fgets

Preso em loop de fgets infinitos - c, while-loop, fgets

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 № 1

Se 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);
}