C++ break 语句

默认情况下,循环语句会一直运行到判断条件变为 false 才停下来。如果我们在循环过程中已经拿到了想要的结果,希望立刻终止并跳出循环,就可以使用 break 语句。

break 在英文中是 “断开、中断” 的意思。在 C++ 中,break 语句专门用于提前退出 “本层” 循环,或者跳出 switch 语句的分支。

C++ break 基本使用

在 C++ 中,当程序在循环体或 switch 分支中执行到 break; 时,会立即终止当前所在的这一个结构,直接跳到花括号 {} 外面继续往下执行。

语法:

break;

说明:

break 语句只能用于以下 2 个地方,不能单独用于其他地方:

  • 循环语句:包括 for 循环、while 循环和 do...while 循环,通常配合 if 条件判断一起使用。
  • switch 语句:用于在执行完匹配的 case 分支后,跳出整个 switch 结构。

示例 1:在 for 循环中提前退出

#include <iostream>

int main() {
    for (int i = 1; i <= 10; i++) {
        if (i == 5) {
            break;
        }
        std::cout << i << '\n';
    }
    return 0;
}

运行结果如下。

1
2
3
4

分析:

在这个例子中,for 循环的条件是 i <= 10,原本会从 1 输出到 10。但当 i 的值变为 5 时,判断条件 i == 5 返回 true,程序执行 break; 直接退出整个循环,当轮后面的输出以及后续 6 ~ 10 的循环都不会再执行。

可能有些小伙伴会问:“示例 1 里的 break; 明明写在 if 的花括号里面,怎么说它不能用于 if 语句呢?”

其实,break 服务的对象始终是包裹它的循环语句或 switch 语句,而不是普通的 if 代码块。上面之所以合法,是因为这个 if 位于 for 循环内部,break 真正退出的是外面的 for 循环。

如果脱离了循环或 switch,单独在普通的 if 语句里写 break;,编译时就会直接报错:

int score = 85;
if (score >= 60) {
    std::cout << "考试通过\n";
    break;    // 编译报错
}

除了在固定次数的循环中提前退出,在实际开发中我们还经常先写一个 while (true) 循环,然后在循环内部通过 if 判断配合 break 来决定什么时候停下来。

示例 2:配合 while (true) 按条件退出

#include <iostream>

int main() {
    int sum = 0;
    int n = 1;

    while (true) {
        sum += n;
        if (sum >= 20) {
            break;
        }
        n++;
    }

    std::cout << "累加到 " << n << " 时,总和达到 " << sum << '\n';
    return 0;
}

运行结果如下。

累加到 6 时,总和达到 21

分析:

在开始累加前,我们并不知道从 1 加到哪个数时总和会达到 20,因此在 while 小括号里直接写上 true,让累加一直进行下去。

每一轮循环先把当前的 n 加进 sum,紧接着判断 sum >= 20 是否成立。当 n 为 6 时,sum 累加到 21,程序遇到 break; 立即跳出循环。由于 break 写在 n++ 之前,跳出循环时 n 刚好停留在 6,不会多加 1。

除了用于循环语句之外,break 在 switch 多分支结构中也经常使用。下面我们再通过一个例子回顾一下它在 switch 中的作用。

示例 3:在 switch 语句中跳出分支

#include <iostream>

int main() {
    int season = 2;

    switch (season) {
        case 1:
            std::cout << "春\n";
            break;
        case 2:
            std::cout << "夏\n";
            break;
        case 3:
            std::cout << "秋\n";
            break;
        case 4:
            std::cout << "冬\n";
            break;
        default:
            std::cout << "季节不正确\n";
            break;
    }

    return 0;
}

运行结果如下。

夏

分析:

程序从第一个 case 开始依次匹配,命中 case 2 并输出 “夏” 之后,遇到 break; 就会直接退出整个 switch 结构,后面的 case 3、case 4 和 default 分支都不会再执行。

多层循环中的 break

当循环内部还嵌套了另一层循环时,有一个初学者很容易误解的细节:break 语句只会退出包裹它的 “本层” 循环,而不会一次性退出所有层的循环。下面我们来看一个例子。

示例 4:在双层循环中使用 break

#include <iostream>

int main() {
    for (int i = 1; i <= 2; i++) {
        std::cout << "第 " << i << " 轮外层循环:";
        for (int j = 1; j <= 5; j++) {
            if (j == 3) {
                break;
            }
            std::cout << j << ' ';
        }
        std::cout << '\n';
    }
    return 0;
}

运行结果如下。

第 1 轮外层循环:1 2
第 2 轮外层循环:1 2

分析:

从运行结果可以看出,外层循环一共正常执行了两轮,每一轮的内层循环都只输出了 “1 2”。具体执行过程如下:

  • 第 1 轮外层循环:i 为 1,进入内层 j 循环依次输出 1 和 2。当 j 变为 3 时遇到 break;,直接退出内层循环,后面的 3、4、5 不再输出,随后执行外层循环末尾的换行。
  • 第 2 轮外层循环:刚才的 break; 只结束了内层循环,外层 i 循环并没有受影响,因此 i 变为 2 继续执行下一轮。内层循环同样在输出 1 和 2 后遇到 j == 3 提前退出。

简单来说,break 写在哪一层循环的花括号 {} 里面,它就只负责跳出哪一层循环。同理,如果一个 switch 语句嵌套在循环内部,switch 分支里的 break; 也只会结束这个 switch 本身,而不会把外面的循环停掉。

如果在双层循环中需要同时退出内外两层循环,我们可以在外层循环前先定义一个布尔标志变量,比如 bool stop = false;。当内层准备跳出时,先把 stop 改为 true 再执行 break;,回到外层后判断 if (stop) 再执行一次 break; 就能全部退出了。

提示 在 C++ 中,break 语句和 continue 语句都用于控制循环流程:break 会直接结束整个本层循环,而 continue 只跳过当前这一轮循环。

上一篇:

下一篇:

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号