【问题标题】:fgets() while loop won't breakfgets() while 循环不会中断
【发布时间】:2015-09-15 01:57:54
【问题描述】:

我在 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;
    }

}

【问题讨论】:

    标签: fgets


    【解决方案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;
    }
    

    【讨论】:

    • 我把is_break = true;断线上方的线;它正确地跳出循环
    【解决方案2】:

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

    【讨论】:

    • 感谢您的回答!
    猜你喜欢
    • 2021-01-30
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    相关资源
    最近更新 更多