fgets()while循环不会中断

时间:2015-09-15 01:57:54

标签: fgets

我在while循环中取出了部分代码,但是我想在循环中跳出fgets()直到它读入一个字符'q'。但该程序仍然需要一些输入,它不会结束该程序。为什么这种方法不起作用?

char buffer[300];

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

}

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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);
    }
}