上一课标准答案:
- 输出:
0 1 2 3- 输出:
1 2 3- 一共执行6 次,
i依次是:
0 1 2 3 4 5- 选B.
while。因为我们不知道机械臂具体要循环多少次,只知道“还没到目标就继续”。
第 9 课:break和continue
这两个都是控制循环流程的。
你可以先这样记:
break 直接结束整个循环 continue 只跳过当前这一轮,继续下一轮这两个区别非常重要。
1. 先看break
for (int i = 0; i < 10; i++) { if (i == 3) { break; } std::cout << i << std::endl; }正常情况下,i会从:
0 到 9但是当:
i == 3成立时:
break;直接退出整个for循环。
所以输出:
0 1 2不会输出3。
因为程序执行到:
break;就立刻跳出循环了。
2.break的流程
可以理解成:
i = 0 ↓ 输出 0 ↓ i = 1 ↓ 输出 1 ↓ i = 2 ↓ 输出 2 ↓ i = 3 ↓ 满足 if ↓ break ↓ 整个循环结束3. 机械臂里什么时候会用break
比如你在寻找第一个故障关节:
for (int i = 0; i < 6; i++) { if (i == 3) { std::cout << "Error found" << std::endl; break; } }可以理解成:
一旦发现故障,就不用继续检查后面的关节了。
这时候break很合理。
4. 再看continue
for (int i = 0; i < 5; i++) { if (i == 2) { continue; } std::cout << i << std::endl; }这次不是结束整个循环。
当:
i == 2时:
continue;表示:
当前这一轮剩下的代码不执行,直接进入下一轮。
所以输出:
0 1 3 4注意:
2被跳过了。
5.continue和break的区别
看同一个场景。
break
if (i == 2) { break; }效果:
0 1 结束continue
if (i == 2) { continue; }效果:
0 1 跳过2 3 4 继续所以:
break 结束整个循环 continue 结束当前这一轮6. 机械臂数据筛选例子
假设你有 6 个关节,但其中第 3 个数据无效。
我们可以:
for (int i = 0; i < 6; i++) { if (i == 2) { continue; } std::cout << "Process joint " << i << std::endl; }输出:
Process joint 0 Process joint 1 Process joint 3 Process joint 4 Process joint 5也就是:
第 3 个关节这一轮跳过,但其他关节继续处理。
这就是continue很典型的用途。
7.while里面也能用
例如:
int count = 0; while (true) { count++; if (count == 5) { break; } }当:
count = 5时退出循环。
所以break不只用于for,也能用于:
while8. 一个机器人停止例子
以后你可能写:
while (true) { bool emergency_stop = false; if (emergency_stop == true) { break; } // 控制机械臂 }意思是:
程序持续运行,但如果触发急停,就退出循环。
当然真实机器人安全控制会更复杂,但逻辑思想就是这样。
9. 一个容易犯错的地方
看:
for (int i = 0; i < 5; i++) { if (i == 2) { continue; } std::cout << i << std::endl; }当i == 2时:
continue;会跳过:
std::cout << i << std::endl;所以不会输出2。
你可以理解成:
continue ↓ 这一轮剩余代码全部跳过 ↓ 进入下一轮10.continue在while里要特别小心
例如:
int i = 0; while (i < 5) { if (i == 2) { continue; } i++; }这个程序有问题。
为什么?
当:
i = 2时进入:
continue;然后直接回到:
while (i < 5)但是:
i++;被跳过了。
所以i永远还是:
2于是:
2 < 5永远成立。
形成死循环。
11. 正确写法之一
可以先让i增加:
int i = 0; while (i < 5) { i++; if (i == 2) { continue; } std::cout << i << std::endl; }这样就不会卡死。
这说明一个非常重要的事情:
在
while中使用continue时,要特别注意“负责改变循环条件的变量”有没有被跳过。
12. 今天最重要的判断
以后看到:
break;你问:
是不是要彻底离开整个循环?
看到:
continue;你问:
是不是只想跳过当前这一轮?
小练习
第 1 题
for (int i = 0; i < 5; i++) { if (i == 3) { break; } std::cout << i << std::endl; }输出什么?
第 2 题
for (int i = 0; i < 5; i++) { if (i == 3) { continue; } std::cout << i << std::endl; }输出什么?
第 3 题
break和continue最大区别是什么?
第 4 题
下面代码为什么可能死循环?
int i = 0; while (i < 5) { if (i == 2) { continue; } i++; }