if-else 處理多分支時代碼冗長、易配對出錯。switch 專為整型常量值匹配設計,結構清晰、效率高(編譯器可優化為跳轉表)。
switch (表達式) {
case 整型常量1: 語句1; break;
case 整型常量2: 語句2; break;
...
default: 語句n+1; break;
}
a)case 開始比較break → 跳出整個 switchdefaultswitch(a) {
case 1: printf("Monday\n");
case 2: printf("Tuesday\n");
// 輸入 1 → 輸出 Monday、Tuesday、Wednesday...error(貫穿)
}
加上 break 後每分支獨立執行。
#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"); break;
}
return 0;
}
Input integer number: 4 Thursday
| 寫法 | 合法性 | 說明 |
|---|---|---|
| case 10: | ✓ | 整數常量 |
| case 8+9: | ✓ | 常量表達式(編譯期計算) |
| case 'A': | ✓ | 字符常量(本質是整數) |
| case 'A'+19: | ✓ | 字符常量表達式 |
| case 9.5: | ✗ | 浮點數不可 |
| case a: | ✗ | 變量不可(需編譯期常量) |
| case a+10: | ✗ | 含變量不可 |
| 場景 | 推薦 |
|---|---|
| 整型/字符常量精確匹配、分支多 | switch |
| 範圍判斷、浮點數、複雜邏輯表達式 | if-else |
| 字符串比較 | if-else + strcmp |
| 編譯器優化(跳轉表) | switch(案例密集時 O(1)) |