4. 流程控制语句:程序的“交通指挥员”
写代码说白了就是让计算机按我们的想法一步步执行。但现实世界哪有那么多“一条路走到黑”的逻辑?你得做判断、得循环、得在特定时刻跳出来。这就是流程控制语句的用武之地。
我个人习惯把流程控制比作十字路口的红绿灯。if-else 是“如果绿灯就走,红灯就停”;循环是“绕着环岛转圈直到出口”;break 和 continue 则是“突然变道”或“提前下高速”。嗯,咱们一个一个来看。
4.1 分支语句:if-else 与 switch-case
程序里最基础的选择结构就是 if-else。你想想看,现实中的决策哪个不是“如果……就……”?
int score = 85;
if (score >= 90) {
cout << "优秀" << endl;
} else if (score >= 60) {
cout << "及格" << endl;
} else {
cout << "不及格" << endl;
}
这里有个细节:else if 并不是 C++ 的关键字,它只是把 else 和 if 拼在一起用。我刚开始学的时候还以为是个独立语法,后来才明白——其实就是嵌套的另一种写法。
小技巧: 如果判断的是单个变量的多个离散值,用 switch-case 更清晰。但要注意,case 后面必须是整型或枚举常量,不能是范围。
char grade = 'B';
switch (grade) {
case 'A': cout << "90-100"; break;
case 'B': cout << "80-89"; break;
case 'C': cout << "70-79"; break;
default: cout << "不及格";
}
警告: 别忘了每个 case 后面加 break!我曾经在项目里漏掉一个 break,结果程序执行了多个 case 分支,查了半天才发现是“穿透”了。switch 的穿透特性有时是故意用的,但大多数时候是 bug。
4.2 循环语句:while、do-while、for
循环就是让一段代码反复执行。三种循环各有各的脾气。
while 循环:先判断,后执行
int i = 0;
while (i < 5) {
cout << i << " ";
i++;
}
// 输出:0 1 2 3 4
如果条件一开始就不成立,循环体一次都不执行。这很符合直觉——你总不会在雨停了还打伞吧?
do-while 循环:先执行,后判断
int j = 0;
do {
cout << j << " ";
j++;
} while (j < 5);
// 输出:0 1 2 3 4
do-while 保证至少执行一次。我记得有一次写用户输入校验,要求至少输入一次,用 do-while 就特别自然。
for 循环:最常用的循环
for (int k = 0; k < 5; k++) {
cout << k << " ";
}
// 输出:0 1 2 3 4
for 循环把初始化、条件、更新都写在一行,结构紧凑。我个人习惯在知道循环次数时用 for,不确定次数时用 while。
| 循环类型 | 执行次数 | 适用场景 |
|---|---|---|
| while | 0 次或多次 | 条件驱动,不确定次数 |
| do-while | 至少 1 次 | 至少执行一次的场景 |
| for | 固定次数 | 遍历数组、计数循环 |
4.3 跳转语句:break、continue、goto
这三个家伙是循环里的“特工”,能在关键时刻改变执行流。
break:跳出当前循环
for (int i = 0; i < 10; i++) {
if (i == 5) break;
cout << i << " ";
}
// 输出:0 1 2 3 4
break 会立即终止整个循环,不再执行后续迭代。在 switch 里也是同样的作用。
continue:跳过本次迭代
for (int i = 0; i < 5; i++) {
if (i == 2) continue;
cout << i << " ";
}
// 输出:0 1 3 4
continue 只是跳过当前这一次,循环还会继续。我曾经在数据处理时用 continue 跳过无效记录,代码干净多了。
goto:能不用就别用
int x = 0;
loop:
x++;
if (x < 5) goto loop;
cout << x; // 输出 5
避坑指南: 我曾经在一个遗留项目里看到满屏的 goto,代码逻辑像一团乱麻。goto 会破坏程序的结构化,让代码难以维护。除非是跳出多层嵌套循环这种极端情况,否则我建议你忘掉这个关键字。
核心总结:
- if-else 做条件分支,switch-case 做多值匹配
- while 先判断后执行,do-while 至少执行一次
- for 循环适合固定次数的遍历
- break 跳出整个循环,continue 跳过当前迭代
- goto 是最后的手段,能不用就不用
流程控制是编程的基本功。你想想看,没有这些语句,程序就只能从头到尾直线执行,那跟计算器有什么区别?把这些控制语句练熟了,你就能写出真正“有脑子”的程序。