fgets() while 循环不会中断

fgets() while loop won't break

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

char buffer[300];

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

}

您已跳出 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);
    }
}

@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;
}