2016-09-10 9 views
-7

Ich versuche, eine ganzzahlige Eingabe zu erhalten, und ich versuchte die elementarste Methode, die ich finden konnte. Immer, wenn etwas keine Ganzzahl ist, bleibt es in einer Endlosschleife stecken. Ich glaube, das liegt an der Fgets-Funktion. Ich habe ein paar Lösungen ausprobiert, die ich auf dieser Seite gefunden habe, aber keine funktionierte. Der Code ist alsStuck in unendlich fgets Schleife

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

Einrückungen nicht kontrolliert fließen zu lassen. –

+3

Sie müssen Klammern für mehrzeilige Codeblöcke haben. – Li357

+1

@KerrekSB Python und Lua scheinen undicht zu sein. – EOF

Antwort

0

folgt Wenn es mehr als einen Anweisungen, die Sie in einer Schleife oder if-Anweisung schreiben wollen, dann müssen Sie Klammern {} verwenden, um die Aussagen kommen in der Schleife zu definieren.

In Ihrem Code befindet sich nur die printf("Insert a non negative number: ");-Anweisung in der Schleife und nichts ändert den input-Wert in der Schleife. Wenn also die Bedingung der Schleife wahr ist, bleibt sie immer wahr.

Ändern Sie es an:

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

Ich schäme mich gerade, danke für die Hilfe. –