目錄
前文列表
《程序編譯流程與 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;
}