女孩和机器人一起思考

一起动脑筋 · 先看一个小故事

机器人逐个检查书包:发现目标就结束检查;遇到空格则跳过,继续看后面。

把过程摊开来看

沿着编号看一遍,再用自己的话讲一遍
  1. 遇空格continue,跳过本轮
  2. 遇普通物品正常检查
  3. 遇目标break,离开循环

continue 跳过本轮剩余动作;break 结束它所在的最近一层循环。

一个是“这次跳过”,一个是“这轮搜索到此结束”。可以把检查卡片摆在桌上模拟。

01为什么需要提前改变循环流程?

有时循环不需要一直按原计划执行到最后。

例如找到目标后可以提前结束,遇到不需要处理的数据可以跳过当前这一轮。

02break:立即结束循环

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

输出:

1 2 3 4

i == 5 时,break 直接结束这个循环。

03continue:跳过当前这一轮

for (int i = 1; i <= 5; i++) {
    if (i == 3) {
        continue;
    }
    std::cout << i << ' ';
}

输出:

1 2 4 5

continue 没有结束整个循环,只是跳过了当前轮剩余代码。

04continue 以后 for 去哪里?

for 循环中,执行 continue 后,会先进入 for 的更新部分,然后再次检查条件。

continue执行 i++再次判断条件

这是很多初学者容易忽略的一点。

05continue 以后 while 去哪里?

while 中,continue 会直接回到条件判断。

06嵌套循环里的 break 会跳出几层?

for (...) {
    for (...) {
        if (found) {
            break;
        }
    }
}

这里的 break 只结束最内层所在的那个循环,不会自动把外层循环一起结束。

07什么时候不该滥用?

适量使用 breakcontinue 可以让代码更清楚,但如果到处跳转,控制流会变得难以追踪。

写完后要问:别人能不能一眼看懂“它跳到哪里”?

你已经知道了什么

  • break 立即结束当前最内层循环。
  • continue 只跳过当前轮剩余代码。
  • for 中 continue 后还会执行更新部分。
  • while 中 continue 会回到条件判断。
  • 嵌套循环中的 break 不会自动跳出所有层。

下一篇:怎样读懂一段程序的执行过程?

轮到你来试一试

只想略过坏苹果,仍检查后面的苹果,应选哪个?

想好了吗?点开看解释

continue。break 会让这层循环直接结束,后面的苹果不再检查。