目錄
文章目錄
- 前文清單
- 聲明枚舉類型
- 定義枚舉類型的變量
- 枚舉類型變量的枚舉值
- 枚舉在 switch 語句中的使用
- 将整型轉換為枚舉類型
《程式編譯流程與 GCC 編譯器》
《C 語言程式設計 — 基本文法》
《C 語言程式設計 — 基本資料類型》
《C 語言程式設計 — 變量與常量》
《C 語言程式設計 — 運算符》
《C 語言程式設計 — 邏輯控制語句》
《C 語言程式設計 — 函數》
《C 語言程式設計 — 進階資料類型 — 指針》
《C 語言程式設計 — 進階資料類型 — 數組》
《C 語言程式設計 — 進階資料類型 — 字元串》
枚舉類型的本質是一個整型常量的集合,列舉出可被通路的值的範圍,所謂 “枚舉” 就是把可能出現的值一一列舉出來。需要先聲明一個枚舉類型,告訴編譯器它具有哪些元素,然後才能夠被定義一個枚舉類型的變量。
- 枚舉類型定義中的每個枚舉元素代表一個整型數值。若自定義枚舉類型的同時無指派行為,則由編譯系統會按照定義的順序為其配置設定 0, 1, 2, … 的資料值;反之,則以賦予的數值為準。
- 枚舉元素必須為常量,在枚舉定義之外,均不能對枚舉元素進行指派操作。
- 各枚舉元素不能重名,枚舉元素名也不能為程式中其他關鍵字或變量名。
// enum 關鍵字用于定義枚舉類型
enum 枚舉類型名
{
枚舉元素1[=整型常量1],
枚舉元素2[=整型常量2],
...
枚舉元素n[=整型常量n]
};
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。
#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
};
#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;
}