C++ switch case语句详解
if else 语句虽然可以根据表达式的结果,执行不同的语句,但是如果表达式存在多种可能的结果,多个 if else 语句未免显得过于烦琐。编程过程中,很可能会由于疏忽而漏掉一个或多个 if else 判断。
C++ 还提供了 switch case 分支语句,它比连续使用多个 if else 语句更加紧凑和高效,特别适用于需要处理多个具体值的情况。
switch case 语句常见的使用格式是:
switch 表达式后面是一组由一对花括号“{”和“}”包围的 case 标签,它是由关键字 case 后接一个常量表达式及冒号构成的,这个常量表达式将被用来与 switch 表达式的结果值进行匹配。例如:
执行程序,结果为:
对于每个 case 代码块而言,break 可以加也可以不加。例如:
执行程序,运行结果为:
有的时候,程序员可能就是需要多个 case 对应同一个语句或语句块,则连续的多个 case 可以只加一个 break 语句。例如:
如果 switch 表达式与任意一个 case 标签都不匹配,最终会执行 default 中的语句。
以文章中第一个 C++ 程序为例,当 a 值是 [1, 7] 之外的其它值时,程序输出结果为:
C++ 还提供了 switch case 分支语句,它比连续使用多个 if else 语句更加紧凑和高效,特别适用于需要处理多个具体值的情况。
switch case 语句常见的使用格式是:
switch(expr){ case 整型数值1: 语句 1; break; case 整型数值2: 语句 2; break; ...... case 整型数值n: 语句 n; break; default: 语句 n+1; }首先,expr 是一个表达式,它的结果值是一个整数或者枚举值,或者其他可以转换成整数或枚举值的值。
switch 表达式后面是一组由一对花括号“{”和“}”包围的 case 标签,它是由关键字 case 后接一个常量表达式及冒号构成的,这个常量表达式将被用来与 switch 表达式的结果值进行匹配。例如:
#include <stdio.h> int main() { int a; printf("Input integer number:"); scanf("%d", &a); switch (a) { case 1: printf("Monday\n"); break; case 2: printf("Tuesday\n"); break; case 3: printf("Wednesday\n"); break; case 4: printf("Thursday\n"); break; case 5: printf("Friday\n"); break; case 6: printf("Saturday\n"); break; case 7: printf("Sunday\n"); break; default: printf("error\n"); } return 0; }如果 a 的值是 1,则执行第 3、4 行语句。如果 a 的值是 3,则执行第 9、10 行语句。
执行程序,结果为:
Input integer number:1
Monday
switch case中的break
每个 case 代码块的末尾都有一个 break,表示停止执行 switch case 语句,转而执行 switch case 后面的语句,也就是“}”结束花括号后面的代码(如果有的话)。对于每个 case 代码块而言,break 可以加也可以不加。例如:
#include <stdio.h> int main() { int a; printf("Input integer number:"); scanf("%d", &a); switch (a) { case 1: printf("Monday\n"); case 2: printf("Tuesday\n"); case 3: printf("Wednesday\n"); case 4: printf("Thursday\n"); case 5: printf("Friday\n"); case 6: printf("Saturday\n"); case 7: printf("Sunday\n"); default:printf("error\n"); } return 0; }每个 case 代码块中都没有 break,如果 a 的值为 3,那么会匹配第 3 个 case 语句,由于没有 break 语句,那么不仅第 3 个 case 语句后的代码块会执行,后续所有 case 中的代码块都会执行,最后 default 中的代码块也会执行。
执行程序,运行结果为:
Input integer number:3
Wednesday
Thursday
Friday
Saturday
Sunday
error
有的时候,程序员可能就是需要多个 case 对应同一个语句或语句块,则连续的多个 case 可以只加一个 break 语句。例如:
#include <iostream> int main() { int month; std::cout << "请输入月份(1-12):"; std::cin >> month; switch (month) { case 12: case 1: case 2: std::cout << "冬季,天气寒冷。"; break; case 3: case 4: case 5: std::cout << "春季,天气温暖。"; break; case 6: case 7: case 8: std::cout << "夏季,天气炎热。"; break; case 9: case 10: case 11: std::cout << "秋季,天气凉爽。"; break; default: std::cout << "无效的输入!"; break; } return 0; }在这个程序中,每个季节的三个月份共享同一个 case 块,并使用相同的 break 语句来结束。这种结构使代码更简洁,并允许对具有相同处理逻辑的多个选择进行统一处理。
switch case中的default
switch case 结构通常还会有一个 default 语句,放在所有 case 的后面。default 直接跟一个冒号,中间只允许存在空格或制表符,而不是表达式。default 标签的冒号后面是跟 default 相关联的语句或语句块。如果 switch 表达式与任意一个 case 标签都不匹配,最终会执行 default 中的语句。
以文章中第一个 C++ 程序为例,当 a 值是 [1, 7] 之外的其它值时,程序输出结果为:
Input integer number:8
error