2016-09-10 4 views
-7

J'essaye d'obtenir une entrée entière, et j'ai essayé la méthode la plus élémentaire que j'ai pu trouver. Cependant, chaque fois que quelque chose n'est pas un nombre entier, il est bloqué dans une boucle infinie. Je crois que c'est causé par le fion funcion. J'ai essayé quelques solutions trouvées sur ce site, mais aucune n'a fonctionné. Le code est le suivantBloqué dans la boucle infinie de fgets

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("%d\n", number); 

    return number; 
} 
+4

Indentation ne contrôle pas faire de flux. –

+3

Vous devez disposer d'accolades pour les blocs de code multilignes. – Li357

+1

@KerrekSB Python et Lua semblent fuir. – EOF

Répondre

0

S'il y a plus d'une des déclarations que vous souhaitez écrire dans une boucle ou si la déclaration, vous devez utiliser des accolades {} pour définir les déclarations viennent dans la boucle.

Dans votre code, seule l'instruction printf("Insert a non negative number: "); est dans la boucle, et rien ne change la valeur de input dans la boucle, donc si la condition de la boucle est vraie, elle restera toujours vraie.

Modifier à:

while (atoi(input) < 0 || (strcmp(input, "0") != 0 && atoi(input) == 0)) 
{ 
    printf("Insert a non negative number: "); 
    fgets(input, 4, stdin); 
} 
+0

J'ai tellement honte en ce moment, merci pour l'aide. –