测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看
B49

switch 语句与 break

引入

章前总览 switch 用表达式的值去匹配各个 case,写多分支往往更整齐。关键:匹配后会继续往下跑,通常每个分支末尾要 break

本节要点:

  • switch / case / default 骨架
  • 必须 break,否则“穿透”
  • 多个 case 可共用同一段代码

1 C1. 一般形式

括号里的表达式、以及每个 case 后的常量,都必须是整型或字符型

</> 骨架

switch (表达式) {
    case 常量1: 语句1; break;
    case 常量2: 语句2; break;
    ...
    default: 语句;   // 可省略
}
  • 找到匹配的 case 后,从那里开始顺序执行,不再重新判断。
  • 没有匹配且没有 default 时,什么也不做。

2 C2. 为什么要 break

不加 break 会“穿透”到后面的 case。

补充说明

不推荐

switch (r) {
    case 1: d = 0.98;
    case 2: d = 0.88;
    case 3: d = 0.78;
    case 4: d = 0.68;
}

问题:从匹配处一直执行到末尾,后面的赋值覆盖前面的。

推荐写法

switch (r) {
    case 1: d = 0.98; break;
    case 2: d = 0.88; break;
    case 3: d = 0.78; break;
    case 4: d = 0.68; break;
}

等价于 if / else if 链。最后一个 break 可省略,但写上也无妨。

多个 case 共用代码

  • 可以写成若干空 case 落在同一段语句上,只在最后加 break。
  • 例:等级 1、2、3 都打 0.78:case 1: case 2: case 3: d=0.78; break;

3 案例:VIP 顾客等级(2)

用 switch 重写案例1。

</> 参考代码

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    int r, m;
    double d, m1;
    cin >> r >> m;
    switch (r) {
        case 1: d = 0.98; break;
        case 2: d = 0.88; break;
        case 3: d = 0.78; break;
        case 4: d = 0.68; break;
    }
    m1 = m * d;
    cout << fixed << setprecision(1) << m1 << endl;
    return 0;
}
小结

switch 三记:

匹配整型/字符 → 进对应 case
默认往下穿透 → 记得 break
若干 case 可共用一段语句
里程碑达成:

下一节练习:多分支闰年、判断位数、简易计算器。