枚舉(或 enum)在 C 語言中
你好,有抱負的程序员們!今天,我們將要一起探索 C 語言中枚舉的奇妙世界。作為你們友好的鄰居計算機科學老師,我非常興奮能夠引導你們進行這次旅行。所以,拿起你們最喜歡的飲料,放鬆身心,讓我們一起踏上這次冒險之旅吧!
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 在編程中有許多實際應用。以下是一些:
- 狀態機:Enums 可以表示系統中的不同狀態。
- 菜單選項:Enums 可以用於表示菜單中的選擇。
- 錯誤代碼:不同的錯誤可以表示為 enum 值。
- 配置選項: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