C 語言中的 Switch 語句:初學者指南

你好,未來的編程者們!今天,我們將深入探討 C 語言中最有用的控制結構之一:switch 語句。如果你是新手,別擔心;我會一步一步地引導你,就像我這些年來對無數學生所做的一樣。所以,拿起你喜歡的飲料,讓我們一起踏上這次編程冒險吧!

C - switch statement

什麼是 Switch-Case 語句?

想像你在一個冰淇淋店,需要選擇一種口味。你有香草、巧克力、草莓和薄荷。每個選擇都會導致你的蛋筒裡有不同的冰淇淋。這正是編程中的 switch 語句的工作原理!

Switch 語句是一種控制流程語句,它允許您基於變量或表達式的值來執行不同的代碼塊。它就像多個 if-else 語句的更優雅、更高效的版本。

Switch-Case 語句的語法

讓我們看看 switch 語句的基本結構:

switch (expression) {
case constant1:
// 當 expression 等於 constant1 時要執行的代碼
break;
case constant2:
// 當 expression 等於 constant2 時要執行的代碼
break;
...
default:
// 當 expression 不匹配任何常量時要執行的代碼
}

別擔心這個看起來有點令人生畏。我們會一點一滴地解析它。

關鍵組成部分:

  1. switch:這個關鍵字啟動 switch 語句。
  2. expression:這是正在被評估的值。
  3. case:每個 case 代表表達式可能的值。
  4. break:這個關鍵字結束每個 case 塊。
  5. default:這是一個可選的塊,當沒有 case 匹配時會執行。

Switch-Case 語句如何工作

現在,讓我們看看它在實際中是如何工作的。想像我們正在創建一個簡單的程序,根據學生的成績給出不同的信息:

#include <stdio.h>

int main() {
char grade = 'B';

switch(grade) {
case 'A':
printf("Excellent!\n");
break;
case 'B':
printf("Well done!\n");
break;
case 'C':
printf("Good job!\n");
break;
case 'D':
printf("You passed.\n");
break;
case 'F':
printf("Better luck next time.\n");
break;
default:
printf("Invalid grade\n");
}

return 0;
}

在這個例子中:

  1. 我們有一個變量 grade 被設置為 'B'。
  2. switch 語句評估 grade
  3. 它會檢查每個 case 直到找到匹配(在這個例子中是 'B')。
  4. 當找到匹配時,它會執行該 case 中的代碼("Well done!")。
  5. 然後 break 語句會退出 switch 塊。

如果 grade 沒有匹配任何 case,則 default 塊會運行。

Switch-Case 語句的流程圖

為了直觀地了解 switch 語句是如何工作的,我們來看看一個流程圖:

+-------------+
|   開始     |
+-------------+
|
v
+-------------------+
|  評估表達式      |
+-------------------+
|
v
+----------------------+
|  與 case 1 比較    |
+----------------------+
|
v
+-------------+
|    匹配?   |
+-------------+
是 |     | 否
|     |
v     v
+-----------------+    +----------------------+
|  執行 case 1    |    |  與 case 2 比較    |
+-----------------+    +----------------------+
|                     |
v                     v
+-----------+         +-------------+
|    Break   |         |    匹配?   |
+-----------+         +-------------+
|               是 |     | 否
|                   |     |
|                   v     v
|         +-----------------+    +------------+
|         |  執行 case 2    |    |   ...      |
|         +-----------------+    +------------+
|                   |
|                   v
|            +-----------+
|            |    Break   |
|            +-----------+
|                   |
v                   v
+-----------+        +-----------+
|    結束    | <------|   Default  |
+-----------+        +-----------+

這個流程圖展示了 switch 語句如何評估每個 case 並執行匹配的代碼塊。

使用 Switch-Case 語句的規則

為了有效地使用 switch 語句,請記住以下規則:

規則 描述
表達式類型 Switch 表達式必須是整數類型(int、char 等)或列舉類型。
Case 常量 Case 標籤必須是常量或字面值,而不是變量。
單一 Case 每個 case 值必須在 switch 語句中是唯一的。
Break 語句 使用 break 在執行完一個 case 後退出 switch 塊。
Default Case default case 是可選的,並可以在 switch 塊中的任何位置出現。

更多 Switch-Case 語句示例

讓我們再看一些例子來加強我們的理解。

示例 1:星期天

#include <stdio.h>

int main() {
int day = 4;

switch(day) {
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("Invalid day number\n");
}

return 0;
}

這個程序會輸出 "Thursday",因為 day 被設置為 4。

示例 2:計算器

#include <stdio.h>

int main() {
char operator;
double n1, n2;

printf("Enter an operator (+, -, *, /): ");
scanf("%c", &operator);
printf("Enter two operands: ");
scanf("%lf %lf",&n1, &n2);

switch(operator)
{
case '+':
printf("%.1lf + %.1lf = %.1lf\n", n1, n2, n1+n2);
break;
case '-':
printf("%.1lf - %.1lf = %.1lf\n", n1, n2, n1-n2);
break;
case '*':
printf("%.1lf * %.1lf = %.1lf\n", n1, n2, n1*n2);
break;
case '/':
printf("%.1lf / %.1lf = %.1lf\n", n1, n2, n1/n2);
break;
default:
printf("Error! operator is not correct\n");
}

return 0;
}

這個程序使用 switch 語句創建了一個簡單的計算器。

結合多個 Case

有時候,您可能希望多個 case 執行相同的代碼。您可以通過將 case 列在一起來實現這點:

#include <stdio.h>

int main() {
char grade = 'B';

switch(grade) {
case 'A':
case 'B':
case 'C':
printf("You passed!\n");
break;
case 'D':
case 'F':
printf("You need to improve.\n");
break;
default:
printf("Invalid grade\n");
}

return 0;
}

在這個例子中,成績 A、B 和 C 將導致輸出 "You passed!",而 D 和 F 將導致輸出 "You need to improve."。

就这样!您剛剛學會了 C 語言中的 switch 語句。記住,熟能生巧。嘗試自己寫一些 switch 語句,並嘗試不同的情景。不久之後,您將能夠像專家一樣使用 switch!

祝您編程愉快,願您的 switch 永遠能找到正確的 case!

Credits: Image by storyset