2015-09-15 4 views
1

Я вынул часть кода в цикле while, но я хочу вырваться из цикла fgets() while, пока он не прочитает символ «q». Но программа по-прежнему требует ввода и не заканчивает программу. Почему этот метод не работает?fgets() while цикл не прерывается

char buffer[300]; 

while (fgets(buffer, 300, stdin)) 
{ 
    int i; 
    for (i = 0; i < 300; i++){ 
     if (buffer[i] == 'q') 
      break; 
    } 

} 

ответ

1

Альтернативы хорошей рекомендация дается @ John3136 бы создать флаг, который можно использовать для условно вырваться из внешнего контура, если вы попали в письме 'q' во внутреннем цикле. Следующий код позволяет сохранить прежнюю общую структуру:

while (fgets(buffer, 300, stdin)) { 
    bool is_break = false; 
    int i; 
    for (i = 0; i < 300; i++){ 
     if (buffer[i] == 'q') { 
      is_break = true; 
      break; 
     } 
    } 

    if (is_break) 
     break; 
} 
+0

Я поместил is_break = true; линия поверх перерыва; и он правильно выходит из цикла – dendritic

0

Вы вырвались из for петли, но не петли while. Рефакторинг, чтобы цикл while использовал переменную, а не fgets.

int keep_going = fgets(buffer, 300, stdin); 
while(keep_going) 
{ 
    int i; 
    for (i = 0; i < 300; i++){ 
     if (buffer[i] == 'q') 
     { 
      keep_going = 0; 
      break; 
     } 
     keep_going = fgets(buffer, 300, stdin); 
    } 
} 
+0

Спасибо за ваш ответ! – dendritic

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