switch
当对同一个整数/字符做多种固定分支时,switch 往往比一长串 if 清晰。
1. 完整例子
| 1 | #include <stdio.h> |
| 2 | |
| 3 | int main(void) { |
| 4 | char op = '+'; |
| 5 | int a = 8, b = 2, r = 0; |
| 6 | switch (op) { |
| 7 | case '+': |
| 8 | r = a + b; |
| 9 | break; |
| 10 | case '-': |
| 11 | r = a - b; |
| 12 | break; |
| 13 | case '*': |
| 14 | r = a * b; |
| 15 | break; |
| 16 | default: |
| 17 | printf("未知运算符\n"); |
| 18 | break; |
| 19 | } |
| 20 | printf("r=%d\n", r); |
| 21 | return 0; |
| 22 | } |
2. 概念:case 贯穿
若忘记 break,会继续执行下一个 case 的代码(贯穿)。有时故意利用贯穿,但初学先每支都 break。
| 1 | /* 故意贯穿示例 */ |
| 2 | switch (grade) { |
| 3 | case 'A': |
| 4 | case 'B': |
| 5 | printf("pass\n"); |
| 6 | break; |
| 7 | case 'C': |
| 8 | printf("ok\n"); |
| 9 | break; |
| 10 | } |
3. 限制
- switch 后必须是整型/字符等兼容整型的表达式
- case 后通常是常量表达式
- 不能直接用浮点做 case