【C/C++】 switch

您所在的位置:网站首页 c语言中cout用法 【C/C++】 switch

【C/C++】 switch

2024-07-06 18:14| 来源: 网络整理| 查看: 265

【C/C++】 switch-case 详解/全面总结

文章目录 【C/C++】 switch-case 详解/全面总结I - 基础概述1.1 - 基础结构1.2 - 使用举例 II - 注意事项2.1 - switch 语句中的表达式必须为整型2.2 - 满足条件的 case 标签后的语句都会执行,直到 break 语句2.3 - default 标签可以置于任何位置2.4 - 标签使用的整型表达式必须为常量2.5 - case 之前的语句永远不会执行2.6 - case 标签不可以使用重复的值 III - 特殊用法3.1 - case 设置范围3.2 - switch 初始化语句3.3 - switch-case 符合语法的简易结构 IV - 与 if else if 的比较V - 参考链接

I - 基础概述

类似 if-else 语句,switch-case 语句用于处理复杂的条件判断和分支操作,但相较前者有更好的可读性,在代码中出现冗长的 if-else 阶梯代码时,switch-case 语句可作为一个不错的替代方案。

1.1 - 基础结构

一个 switch 语句可以包含任意数量的 case 标签,每个 case 标签中可执行若干条语句,通常以 break 语句结束。default 标签为可选项,至多包含一个,用于处理 case 标签未列举的值。

switch (expression) { case constant_expression_1 : // statement_1 break; case constant_expression_2 : // statement_2 break; /* ... */ default: // statement_default break; }

switch 语句根据 expression (表达式) 的值,跳转到值对应的 case 标签,执行标签中包含的语句或语句块。

1.2 - 使用举例 #include int main(int argc, char* argv[]) { const int x = 2; switch (x) { case 1: std::cout case 1: std::cout default : std::cout 1, 2, 3}; switch (x) { case arr[0]: printf("Choice 1\n"); case arr[1]: printf("Choice 2\n"); case arr[2]: printf("Choice 3\n"); } return 0; }

编译报错为:

error C2131: expression did not evaluate to a constant note: failure was caused by a read of a variable outside its lifetime note: see usage of 'arr' error C2051: case expression not constant

case 表达式不为常量

2.5 - case 之前的语句永远不会执行

在 switch 语句后,控制语句跳转到匹配的 case 标签,写在 case 标签前的语句不会被执行。

示例:

// statement before all cases are never executed int x = 2; switch (x) { x = x + 1; // 此条语句不会执行, this statement is not executed case 1: std::cout int data[10] = { 5, 4, 10, 25, 60, 47, 23, 80, 14, 11}; int i; for (i = 0; i case 1 ... 10: printf("%d 在范围 1 - 10 之间\n", data[i]); break; case 11 ... 20: printf("%d 在范围 11 - 20 之间\n", data[i]); break; case 21 ... 30: printf("%d 在范围 21 - 30 之间\n", data[i]); break; case 31 ... 40: printf("%d 在范围 31 - 40 之间\n", data[i]); break; default: printf("%d 超出范围\n", data[i]); break; } } }

输出

5 在范围 1 - 10 之间 4 在范围 1 - 10 之间 10 在范围 1 - 10 之间 25 在范围 21 - 30 之间 60 超出范围 47 超出范围 23 在范围 21 - 30 之间 80 超出范围 14 在范围 11 - 20 之间 11 在范围 11 - 20 之间

查看 gcc 官网的描述 : https://gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_4.html#SEC82

注:

仅 GCC 支持, Visual Studio 的 MSVC 编译器当前不支持。 3.2 - switch 初始化语句

C++17 标准引入新特性,switch 语句中允许初始化语句。

switch (init-statement; expression) { case constant_expression: statement; break; /* ... */ } // 等价于 { init-statement; switch (expression) { case constant_expression: statement; break; /* ... */ } }

使用示例:

struct RemoteDevice { enum State { SLEEP, READY, ERROR }; auto state() const { return m_state; } /*...*/ private: State m_state{}; }; switch (auto rmt = RemoteDevice{}; rmt.state()) { case RemoteDevice::SLEEP: /*...*/ break; case RemoteDevice::READY: /*...*/ break; case RemoteDevice::ERROR: /*...*/ break; } 3.3 - switch-case 符合语法的简易结构

switch 语句可以不为完整的复合结构,示例:

// 此条不做任何事 switch (0) std::cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3