# 判斷式(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` 都不匹配時執行的代碼。 - 方塊 ![image](https://hackmd.io/_uploads/SypAtm9wJg.png) #### 方塊 - 位置 : 條件迴圈 ### 二、`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**