在 C/C++ 中,switch-case 语句用于根据一个表达式的值执行不同的代码块。它的基本结构如下
switch (expression) {
case constant1:
// 执行代码块1
break;
case constant2:
// 执行代码块2
break;
...
default:
// 执行默认代码块
break;
}
使用注意事项
- 表达式类型限制:switch 中的 expression 必须是整数类型或可以转换为整数的类型(如 int, char, enum 等)。不能使用浮点数、字符串、布尔类型等。
- case 值必须是常量:每个 case 后的值必须是编译时已知的常量表达式,不能是变量或运行时确定的表达式。
- 使用 break 语句:每个 case 语句块通常以 break 结束,防止代码执行“贯穿”到下一个 case 块。如果漏写 break,会导致程序执行完当前 case 后继续执行后面的 case 代码(称为“fall-through”),可能会引发意外的错误。
- default 块的使用:default 是可选的,但建议在可能的情况下使用,以处理未匹配任何 case 的情况。default 块通常放在 switch 结构的最后。
- 避免重复的 case 值:在 switch 语句中,case 后的值必须唯一,否则会导致编译错误。
- 可省略 break 实现贯穿行为:在某些情况下,可以故意省略 break 实现贯穿行为。例如多个 case 需要执行相同的代码时,可以这样写:
switch (expression) {
case 1:
case 2:
// 处理代码块,适用于 case 1 和 case 2
break;
default:
// 处理其他情况
break;
}
- 代码可读性:switch-case 适用于较少分支的选择,如果分支过多(如 10 个以上),代码的可读性会降低,考虑使用其他结构(如 if-else 链或查找表)。
示例代码
以下是一个简单的示例,判断输入的整数对应的星期几:
#include <iostream>
using namespace std;
int main() {
int day;
cout << "请输入一个整数 (1-7): ";
cin >> day;
switch (day) {
case 1:
cout << "星期一" << endl;
break;
case 2:
cout << "星期二" << endl;
break;
case 3:
cout << "星期三" << endl;
break;
case 4:
cout << "星期四" << endl;
break;
case 5:
cout << "星期五" << endl;
break;
case 6:
cout << "星期六" << endl;
break;
case 7:
cout << "星期天" << endl;
break;
default:
cout << "输入无效,请输入 1-7 之间的整数" << endl;
break;
}
return 0;
}