亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

掌握 C++ switch-case 语句:语法、流程与计算器实战案例

C++ switch-case 语句完全指南

全面解析 C++ switch-case 语句:语法结构、执行流程、break 防穿透、default 兜底,附简易计算器实战案例。

switch 语句是一种简洁的控制流工具:根据表达式值从多个分支中选择唯一执行块。

语法:

switch (expression) {
    case constant1:
        // expression == constant1 时执行
        break;
    case constant2:
        // expression == constant2 时执行
        break;
    ...
    default:
        // 无匹配时执行
}

工作原理:

注意:if...else if 链可达成相同效果,但 switch 语法更清晰、易读,且编译器常优化为跳转表(O(1) 分支)。

switch 流程图

掌握 C++ switch-case 语句:语法、流程与计算器实战案例

实战案例:简易计算器

#include <iostream>
using namespace std;

int main() {
    char oper;
    float num1, num2;

    cout << "Enter an operator (+, -, *, /): ";
    cin >> oper;
    cout << "Enter two numbers: " << endl;
    cin >> num1 >> num2;

    switch (oper) {
        case '+':
            cout << num1 << " + " << num2 << " = " << num1 + num2;
            break;
        case '-':
            cout << num1 << " - " << num2 << " = " << num1 - num2;
            break;
        case '*':
            cout << num1 << " * " << num2 << " = " << num1 * num2;
            break;
        case '/':
            cout << num1 << " / " << num2 << " = " << num1 / num2;
            break;
        default:
            cout << "Error! The operator is not correct";
            break;
    }
    return 0;
}

输出示例

Enter an operator (+, -, *, /): +
Enter two numbers:
2.3 4.5
2.3 + 4.5 = 6.8
Enter an operator (+, -, *, /): ?
Enter two numbers:
2.3 4.5
Error! The operator is not correct

程序工作流程解析

  1. 提示输入运算符,存入 char oper
  2. 提示输入两个数值,存入 float num1、num2
  3. switch 评估 oper:
    • + → 加法
    • - → 减法
    • * → 乘法
    • / → 除法
    • 其他 → default 报错

break 终止 switch 块。省略 break 会导致“穿透”,意外执行后续 case。


switch 进阶特性与最佳实践

1. case 标签要求

2. 多标签共享代码块

switch (ch) {
    case 'a':
    case 'e':
    case 'i':
    case 'o':
    case 'u':
        cout << "Vowel";
        break;
    default:
        cout << "Consonant";
}

3. C++17 init-statement 语法

switch (auto status = GetStatus(); status) {
    case Status::Ok:    /* ... */ break;
    case Status::Error: /* ... */ break;
}

变量 status 仅在 switch 作用域内可见,避免污染外部作用域。

4. [[fallthrough]] 属性(C++17)

故意穿透时显式标注,消除编译器警告:

switch (level) {
    case 3:  // Critical
        LogCritical();
        [[fallthrough]];
    case 2:  // Error
        LogError();
        [[fallthrough]];
    case 1:  // Warning
        LogWarning();
        break;
    case 0:  // Info
        LogInfo();
        break;
}

5. 枚举类 switch 的完整性检查

对 enum class 使用 switch 时,若漏写 case,启用 -Wswitch-enum(GCC/Clang)或 /W4(MSVC)可获警告。配合无 default 可强制处理所有枚举值。


switch vs if-else 链:性能与可读性权衡

维度switchif-else 链
可读性离散常量分支极高区间/复合条件更灵活
性能常优化为跳转表 O(1)顺序求值 O(n)
条件类型仅整型常量任意布尔表达式
范围判断不支持原生支持
字符串匹配不支持支持

经验法则:整型/枚举离散值分支 ≥ 3 个用 switch;区间、复合条件、字符串用 if-else。

C语言

  1. 掌握 C# switch 语句:语法、示例与最佳实践
  2. C# break 语句:用法、时机与实战示例
  3. 掌握 C# continue 语句:高效跳过循环迭代的实战指南
  4. 深入理解 C++ 类型转换:隐式、显式转型与现代 Cast 算符
  5. 掌握 C++ 运算符:六大类型全解析与实战示例
  6. C++ 注释最佳实践:编写可读、可维护代码的注释艺术
  7. 掌握 C++ 条件语句:if、if-else、嵌套 if 与多重分支全解析
  8. 掌握 C++ break 语句:跳出循环与 switch 的核心控制流
  9. 掌握 C++ continue 语句:跳过当前迭代的循环控制艺术
  10. 掌握 C++ 函数:从基础到进阶的完整实战指南
  11. 掌握 C++ 数组:声明、初始化、访问与实战操作全指南
  12. 掌握 C++ switch-case:语法、用法与实战示例