`switch`语句是一种多路选择结构,它根据一个表达式的值来选择执行不同的代码块。`switch`语句的基本语法如下:
```c
switch (表达式) {
case 常量1:
// 代码块1
break;
case 常量2:
// 代码块2
break;
// 可以有任意数量的case语句
default:
// 默认代码块
}
```
执行流程
计算表达式:
首先,`switch`后面括号中的表达式会被计算。这个表达式的结果将决定哪个`case`标签会被匹配。
与case标签比较:
接下来,计算出的结果会与各个`case`标签的值进行比较。如果找到了与结果相匹配的`case`标签,那么执行流程就会跳转到该`case`标签后的语句,直到遇到`break`语句或者`switch`语句结束。
执行case语句:
在找到匹配的`case`标签后,程序会执行该`case`标签后的语句,直到遇到`break`语句。
执行default语句:
如果所有的`case`标签都没有与表达式的结果相匹配,那么程序会执行`default`标签后的语句。如果没有`default`标签,那么程序将不会执行任何操作。
结束switch语句:
无论是否执行`default`语句,`switch`语句都会在执行完相应的语句后结束。
示例
```c
include
int main() {
int number = 2;
switch (number) {
case 1:
printf("Number is 1\n");
break;
case 2:
printf("Number is 2\n");
break;
case 3:
printf("Number is 3\n");
break;
default:
printf("Number is not 1, 2, or 3\n");
}
return 0;
}
```
在这个示例中,变量`number`的值为2,因此程序会执行`case 2`下的代码块,输出`Number is 2`。
注意事项
`switch`语句中的`case`标签必须是常量表达式,不能是变量或表达式。
每个`case`代码块末尾通常需要加上`break`语句,以确保只执行对应的代码块而不会继续向下执行其他`case`。
如果省略`break`语句,程序将会继续执行下一个`case`代码块,这被称为“fall-through”。
`default`分支是可选的,用于处理所有其他未明确处理的情况。