# 判斷式(switch)
C++中的 `switch` 語句是一種多重選擇結構,用於根據變量的值執行不同的代碼區塊。`switch` 語句特別適合處理有限的離散值選擇,通常用於整數、字符等類型的變量。
### 一、`switch` 語句的基本結構
`switch` 語句的基本語法如下:
```cpp=
switch (表達式) {
case 值1:
// 當表達式等於值1時執行的代碼
break; // 可選,表示跳出 switch 語句
case 值2:
// 當表達式等於值2時執行的代碼
break; // 可選,表示跳出 switch 語句
// 可以有任意多個 case
default:
// 當表達式不匹配任何 case 時執行的代碼
}
```
- **表達式**:要進行比較的變量或表達式,通常是整數或字符類型。
- **case**:每個 `case` 代表一個可能的值,當表達式匹配到該值時,會執行相應的代碼。
- **break**:用於跳出 `switch` 語句,如果不使用 `break`,則會繼續執行下個 `case` 的代碼(稱為「fall-through」行為)。
- **default**:可選的,當所有的 `case` 都不匹配時執行的代碼。
- 方塊

#### 方塊
- 位置 : 條件迴圈
### 二、`switch` 語句的用法範例
#### 範例 1:基本 `switch` 語句
```cpp=
#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;
}
return 0;
}
```
#### 範例 2:使用 `switch` 的 fall-through 行為
```cpp=
#include <iostream>
using namespace std;
int main() {
char grade;
cout << "請輸入您的成績 (A, B, C, D, F):";
cin >> grade;
switch (grade) {
case 'A':
cout << "優秀!" << endl;
break;
case 'B':
cout << "良好!" << endl;
break;
case 'C':
cout << "及格!" << endl;
break;
case 'D':
cout << "不及格,但還有希望!" << endl;
break;
case 'F':
cout << "失敗!" << endl;
break;
default:
cout << "無效的成績!" << endl;
}
return 0;
}
```
#### 範例 3:多個 `case` 共享同一代碼
```cpp=
#include <iostream>
using namespace std;
int main() {
int score;
cout << "請輸入您的分數:";
cin >> score;
switch (score) {
case 90:
case 91:
case 92:
case 93:
case 94:
case 95:
case 96:
case 97:
case 98:
case 99:
case 100:
cout << "您獲得了A!" << endl;
break;
case 80:
case 81:
case 82:
case 83:
case 84:
case 85:
case 86:
case 87:
case 88:
case 89:
cout << "您獲得了B!" << endl;
break;
case 70:
case 71:
case 72:
case 73:
case 74:
case 75:
case 76:
case 77:
case 78:
case 79:
cout << "您獲得了C!" << endl;
break;
default:
cout << "無效的分數!" << endl;
}
return 0;
}
```
### 三、注意事項
1. **表達式的類型**:`switch` 表達式必須是整數型(如 `int`、`char`),不支持浮點型。
2. **唯一性**:每個 `case` 必須是唯一的,不能重複。
3. **避免 fall-through**:若不希望發生 fall-through 行為,務必在每個 `case` 之後使用 `break`。
4. **default 的可選性**:`default` 不是必須的,但建議使用,以處理所有未匹配的情況。
### 四、總結
- `switch` 語句是根據變量的值選擇執行不同代碼的有效工具。
- 使用 `case` 來定義可能的值,並根據這些值執行代碼。
- 使用 `break` 來避免 fall-through,並使用 `default` 來處理未匹配的情況。
### 五、`switch` 語句的優點
- **可讀性高**:對於多個條件的選擇,`switch` 語句比一系列 `if-else` 語句更易讀。
- **效率**:在某些情況下,`switch` 語句比連續的 `if-else` 判斷更高效,尤其是當有多個選擇時。
**By Ericbob**