C enum(列舉)

C enum(列舉)

列舉是 C 語言中的一種基本資料型別,它可以讓資料更簡潔,更易讀。

列舉語法定義格式為:

enum 列舉名 {列舉元素1,列舉元素2,……};

接下來我們舉個例子,比如:一星期有 7 天,如果不用列舉,我們需要使用 #define 來為每個整數定義一個別名:

#define MON 1 #define TUE 2 #define WED 3 #define THU 4 #define FRI 5 #define SAT 6 #define SUN 7

這個看起來程式碼量就比較多,接下來我們看看使用列舉的方式:

enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};

這樣看起來是不是更簡潔了。

注意:第一個列舉成員的預設值為整型的 0,後續列舉成員的值在前一個成員上加 1。我們在這個例項中把第一個列舉成員的值定義為 1,第二個就為 2,以此類推。

可以在定義列舉型別時改變列舉元素的值:

enum season {spring, summer=3, autumn, winter};

沒有指定值的列舉元素,其值為前一元素加 1。也就說 spring 的值為 0,summer 的值為 3,autumn 的值為 4,winter 的值為 5

列舉變數的定義

前面我們只是聲明瞭列舉型別,接下來我們看看如何定義列舉變數。

我們可以通過以下三種方式來定義列舉變數

1、先定義列舉型別,再定義列舉變數

enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};
enum DAY day;

2、定義列舉型別的同時定義列舉變數

enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;

3、省略列舉名稱,直接定義列舉變數

enum
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;

例項

#include <stdio.h> enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN }; int main() { enum DAY day; day = WED; printf("%d",day); return 0; }

以上例項輸出結果為:

3

在C 語言中,列舉型別是被當做 int 或者 unsigned int 型別來處理的,所以按照 C 語言規範是沒有辦法遍歷列舉型別的。

不過在一些特殊的情況下,列舉型別必須連續是可以實現有條件的遍歷。

以下例項使用 for 來遍歷列舉的元素:

例項

#include <stdio.h> enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } day; int main() { // 遍歷列舉元素 for (day = MON; day <= SUN; day++) { printf("列舉元素:%d \n", day); } }

以上例項輸出結果為:

列舉元素:1 
列舉元素:2 
列舉元素:3 
列舉元素:4 
列舉元素:5 
列舉元素:6 
列舉元素:7

以下列舉型別不連續,這種列舉無法遍歷。

enum
{
    ENUM_0,
    ENUM_10 = 10,
    ENUM_11
};

列舉在 switch 中的使用:

例項

#include <stdio.h> #include <stdlib.h> int main() { enum color { red=1, green, blue }; enum color favorite_color; /* 使用者輸入數字來選擇顏色 */ printf("請輸入你喜歡的顏色: (1. red, 2. green, 3. blue): "); scanf("%u", &favorite_color); /* 輸出結果 */ switch (favorite_color) { case red: printf("你喜歡的顏色是紅色"); break; case green: printf("你喜歡的顏色是綠色"); break; case blue: printf("你喜歡的顏色是藍色"); break; default: printf("你沒有選擇你喜歡的顏色"); } return 0; }

以上例項輸出結果為:

請輸入你喜歡的顏色: (1. red, 2. green, 3. blue): 1
你喜歡的顏色是紅色

將整數轉換為列舉

以下例項將整數轉換為列舉:

例項

#include <stdio.h> #include <stdlib.h> int main() { enum day { saturday, sunday, monday, tuesday, wednesday, thursday, friday } workday; int a = 1; enum day weekend; weekend = ( enum day ) a; //型別轉換 //weekend = a; //錯誤 printf("weekend:%d",weekend); return 0; }

以上例項輸出結果為:

weekend:1