C語(yǔ)言 enum(枚舉)

枚舉是 C 語(yǔ)言中的一種基本數(shù)據(jù)類型,它可以讓數(shù)據(jù)更簡(jiǎn)潔,更易讀。
枚舉語(yǔ)法定義格式為:

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

舉個(gè)例子,比如:一星期有 7 天,如果不用枚舉,我們需要使用 #define 來為每個(gè)整數(shù)定義一個(gè)別名:

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

這個(gè)看起來代碼量就比較多,接下來我們看看使用枚舉的方式:

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

這樣看起來是不是更簡(jiǎn)潔了。

注意:第一個(gè)枚舉成員的默認(rèn)值為整型的 0,后續(xù)枚舉成員的值在前一個(gè)成員上加 1。在這個(gè)實(shí)例中把第一個(gè)枚舉成員的值定義為 1,第二個(gè)就為 2,以此類推。
可以在定義枚舉類型時(shí)改變枚舉元素的值:

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

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

枚舉變量的定義

前面只是聲明了枚舉類型,接下來看看如何定義枚舉變量。
可以通過以下三種方式來定義枚舉變量

先定義枚舉類型,再定義枚舉變量
enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};
enum DAY day;
定義枚舉類型的同時(shí)定義枚舉變量
enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;
省略枚舉名稱,直接定義枚舉變量
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;
}

以上實(shí)例輸出結(jié)果為:

3

在C 語(yǔ)言中,枚舉類型是被當(dāng)做 int 或者 unsigned int 類型來處理的,所以按照 C 語(yǔ)言規(guī)范是沒有辦法遍歷枚舉類型的。
不過在一些特殊的情況下,枚舉類型必須連續(xù)是可以實(shí)現(xiàn)有條件的遍歷。
下面實(shí)例使用 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);
    }
}

以上實(shí)例輸出結(jié)果為:

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

以下枚舉類型不連續(xù),這種枚舉無法遍歷。

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;
 
    /* 用戶輸入數(shù)字來選擇顏色 */
    printf("請(qǐng)輸入你喜歡的顏色: (1. red, 2. green, 3. blue): ");
    scanf("%u", &favorite_color);
 
    /* 輸出結(jié)果 */
    switch (favorite_color)
    {
    case red:
        printf("你喜歡的顏色是紅色");
        break;
    case green:
        printf("你喜歡的顏色是綠色");
        break;
    case blue:
        printf("你喜歡的顏色是藍(lán)色");
        break;
    default:
        printf("你沒有選擇你喜歡的顏色");
    }
 
    return 0;
}

以上實(shí)例輸出結(jié)果為:

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

將整數(shù)轉(zhuǎn)換為枚舉
以下實(shí)例將整數(shù)轉(zhuǎn)換為枚舉:

#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;  //類型轉(zhuǎn)換
    //weekend = a; //錯(cuò)誤
    printf("weekend:%d",weekend);
    return 0;
}

以上實(shí)例輸出結(jié)果為:

weekend:1
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容