C 語言編程 — 高級數據類型 — 枚舉

目錄

前文列表

程序編譯流程與 GCC 編譯器
C 語言編程 — 基本語法
C 語言編程 — 基本數據類型
C 語言編程 — 變量與常量
C 語言編程 — 運算符
C 語言編程 — 邏輯控制語句
C 語言編程 — 函數
C 語言編程 — 高級數據類型 — 指針
C 語言編程 — 高級數據類型 — 數組

聲明枚舉類型

枚舉也是算術類型,被用來定義在程序中只能賦予其一定的離散整數值的變量。

與 int、float 等內置的數據類型不同,枚舉類型是一種需要程序員自定義的數據類型。也就是說程序員需要先聲明一個枚舉類型,告訴編譯器它具有哪些元素,然後才能夠被定義一個枚舉類型的變量。

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

e.g.

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

默認情況下,第一個枚舉成員的默認值爲整型的 0,後續枚舉成員的值在前一個成員上加 1,以此類推。如上例,如果我們在這個實例中把第一個枚舉成員的值定義爲 1,第二個就爲 2,以此類推。

定義枚舉類型的變量

  • 先定義枚舉類型,再定義枚舉變量
// 聲明枚舉類型
enum DAY{
    MON=1, TUE, WED, THU, FRI, SAT, SUN
};

// 定義枚舉類型變量
enum DAY day;
  • 定義枚舉類型的同時定義枚舉變量
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("Day num is %d", day);
    return 0;
}

我們也可以在定義枚舉類型時改變枚舉元素的值:

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

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

變量枚舉類型變量的枚舉值

C 語言中,枚舉類型是被當做 int 或者 unsigned int 類型來處理的,所以按照 C 語言規範是沒有辦法遍歷枚舉類型的(因爲不是數組類型)。

不過在一些特殊的情況下,枚舉類型是可以實現有條件的遍歷的:

#include <stdio.h>

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

int main(){
    int i;

    for(i = MON; i < SUN; i++){
        printf("Day is %d\n", i);
    }
    return 0;
}

上述例子可見,枚舉類型中的枚舉值實際上就是一個整型,即便沒有定義枚舉類型的變量,編譯器也會自動的將枚舉元素替換爲枚舉值,並且當枚舉值是順序遞增的時候就可以被循環。相反,則不行:

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("Input your favorite color:");
    /* %u for unsigned integer type*/
    scanf("%u", &favorite_color);

    switch(favorite_color){
        case red:
            printf("red.");
            break;
        case green:
            printf("green.");
            break;
        case blue:
            printf("blue.");
            break;
        default:
            printf("None.");
    }
    return 0;
}

將整型轉換爲枚舉類型

#include <stdio.h>
#include <stdlib.h>

int main(){

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

    int a = 7;
    weekend = (enum DAY) a;
    // weekend = a 錯誤

    printf("weekend: %d", weekend);
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章