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
ICP备案:
公安联网备案: