2016-09-10 3 views
-7

Я пытаюсь получить целочисленный ввод, и я попробовал самый элементарный метод, который мог найти. Однако, когда что-то не является целым числом, оно застревает в бесконечном цикле. Я считаю, что это вызвано эффектом 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

отступов не контролирует поток делает. –

+3

У вас должны быть скобки для многострочных кодовых блоков. – Li357

+1

@KerrekSB Python и Lua кажутся утечкой. – EOF

ответ

0

Если есть более одного заявления, которые вы хотите записать в цикле или если заявление, то вы должны использовать фигурные скобки {}, чтобы определить, какие операторы приходят в петле.

В вашем коде только оператор printf("Insert a non negative number: "); находится в цикле, и ничто не меняет значение input в цикле, поэтому, если условие цикла истинно, оно всегда останется верным.

Изменить его:

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

Мне так стыдно прямо сейчас, спасибо за помощь. –

Смежные вопросы