枚舉(或 enum)在 C 語言中

你好,有抱負的程序员們!今天,我們將要一起探索 C 語言中枚舉的奇妙世界。作為你們友好的鄰居計算機科學老師,我非常興奮能夠引導你們進行這次旅行。所以,拿起你們最喜歡的飲料,放鬆身心,讓我們一起踏上這次冒險之旅吧!

C - Enumeration (or enum)

C 語言中的枚舉(或 enum)是什麼?

想像一下你正在整理你的衣櫥。你可能會將你的衣服分類為不同的類型:襯衫、褲子、裙子等等。在 C 程序設計中,枚舉(或簡稱 enum)就像為你的代碼創建一個自定義的分類。它是一種定義一组命名常量的方式,使你的代碼更加易讀和有組織。

讓我們從一個簡單的例子開始:

enum Days {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
};

在這個例子中,我們創建了一個名為 Days 的 enum。枚舉中的每一項(MONDAY、TUESDAY 等)都被稱為枚舉器。默認情況下,C 將從 0 開始為這些枚舉器分配整數值。因此,MONDAY 是 0,TUESDAY 是 1,依此类推。

定義和聲明 enum 類型

既然我們已經了解了 enum 是什麼,讓我們來看看如何定義和聲明一個:

enum Fruits {
APPLE,
BANANA,
ORANGE,
MANGO
};

int main() {
enum Fruits favorite = MANGO;
printf("我最喜歡的水果是編號 %d\n", favorite);
return 0;
}

在這個例子中,我們定義了一個名為 Fruits 的 enum。然後,在我們的 main 函數中,我們聲明了一個類型為 enum Fruits 的變量 favorite 並將其值設為 MANGO。當我們打印 favorite 時,它將輸出 3,因為 MANGO 是我們 enum 中的第四項(記住,我們從 0 開始計數)。

enum 變量聲明

有幾種方法可以聲明 enum 變量。讓我們來看看它們:

enum Colors {RED, GREEN, BLUE};

// 方法 1:分開聲明變量
enum Colors paint;
paint = GREEN;

// 方法 2:在一行中聲明並初始化
enum Colors sky = BLUE;

// 方法 3:使用 typedef 為方便起見
typedef enum {CIRCLE, SQUARE, TRIANGLE} Shape;
Shape myShape = TRIANGLE;

這些方法中的每一種都達到了同一個目標:創建一個 enum 类型的變量。選擇對你來說最自然的那一種!

改變 enum 常量的值

默認情況下,enum 常量被分配從 0 開始的遞增整數值。但如果我們想改變這些值呢?好消息!我們可以這樣做:

enum Months {
JAN = 1,
FEB,
MAR,
APR = 100,
MAY,
JUN
};

在這個例子中,JAN 被顯式地設置為 1,所以 FEB 將是 2,MAR 將是 3。然後 APR 被設置為 100,所以 MAY 將是 101,JUN 將是 102。

enum 在 switch 語句中的使用

Enum 在 switch 語句中特別有用。它們使你的代碼更易於閱讀且不易出錯。讓我們看一個例子:

enum Weekday {MON, TUE, WED, THU, FRI};

enum Weekday today = WED;

switch(today) {
case MON:
printf("今天是星期一。該開始這一周的工作了!\n");
break;
case TUE:
printf("今天是星期二。保持動力!\n");
break;
case WED:
printf("今天是星期三。已經過了一半!\n");
break;
case THU:
printf("今天是星期四。週末即將來臨!\n");
break;
case FRI:
printf("今天是星期五。該慶祝一下了!\n");
break;
default:
printf("今天是週末!享受生活!\n");
}

這個 switch 語句比使用整數值時更清晰。每個 case 的含義一目了然。

枚舉(enum)類型的例子

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

示例 1:交通信號燈

enum TrafficLight {
RED,
YELLOW,
GREEN
};

enum TrafficLight light = YELLOW;

if (light == RED) {
printf("停止!\n");
} else if (light == YELLOW) {
printf("準備停止。\n");
} else if (light == GREEN) {
printf("前行!\n");
}

示例 2:撲克牌

enum Suit {HEARTS, DIAMONDS, CLUBS, SPADES};
enum Rank {ACE = 1, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING};

struct Card {
enum Suit suit;
enum Rank rank;
};

struct Card myCard = {HEARTS, QUEEN};

printf("我的牌是 %d 的 %d\n", myCard.rank, myCard.suit);

Enums 的應用

Enums 在編程中有許多實際應用。以下是一些:

  1. 狀態機:Enums 可以表示系統中的不同狀態。
  2. 菜單選項:Enums 可以用於表示菜單中的選擇。
  3. 錯誤代碼:不同的錯誤可以表示為 enum 值。
  4. 配置選項:Enums 可以表示不同的配置設置。

以下是一個總結一些常見 enum 方法的表格:

方法 描述 示例
聲明 聲明一個 enum 类型 enum Colors {RED, GREEN, BLUE};
變量創建 創建一個 enum 类型的變量 enum Colors paint = GREEN;
值分配 為 enum 常量分配特定值 enum Months {JAN = 1, FEB, MAR};
Typedef 為 enum 創建一個類型定義 typedef enum {CIRCLE, SQUARE} Shape;
switch 使用 在 switch 語句中使用 enum switch(shape) { case CIRCLE: ... }

以上就是 C 語言中枚舉的介紹。記住,enums 是你的朋友。它們幫助你的代碼更易於閱讀、有組織,且不易出錯。在你繼續編程之旅時,你會發現許多情況下 enums 會讓你的生活更輕鬆。快樂編程,願你的 enums 永遠井然有序!

Credits: Image by storyset