枚舉:
一、枚舉
枚舉的語法定義格式為:
enum 枚舉名 {枚舉元素1,枚舉元素2,....}
舉例
1 # define MON 1 2 # define TUE 2 3 # define WED 3 4 # define THU 4 5 # define FRI 5 6 # define SAT 6 7 # define SUN 7
1 enum DAY 2 { 3 MON=1,TUE,WED,THU,FRI,SAT,SUN 4 };
第一個枚舉成員的默認值為整形的0,后續枚舉成員的值在前一個成員加上1。我們在這個實例中把第一個枚舉成員的值定義為1,第二個就為2,以此類推。
1 enum season {spring,sunmmer=3,autumn,winter};
沒有指定值的枚舉元素,其值為前一元素加1.所以spring的值為0,summer的值為3,autumn的值為4,winter的值為5
剛才只是聲明了枚舉類型,並不是定義了枚舉變量
二、枚舉變量的定義
2.1先定義枚舉類型,再定義枚舉變量
1 enum DAY 2 { 3 MON=1,THE,WED,THU,FRI,SAT,SUN 4 }; 5 enum DAY day;
2.2定義枚舉類型的同時定義枚舉變量
1 enum DAY 2 { 3 MON=1,TUE,WED,THU,FRI,SAT,SUN 4 }day;
2.3省略枚舉名稱,直接定義枚舉變量
1 enum 2 { 3 MON=1,TUE,WED,THU,FRI,SAT,SUN 4 }day;
舉例:
1 # include <stdio.h> 2 3 enum DAY 4 { 5 MON=1,TUE,WED,THU,FRI,SAT,SUN 6 }; 7 8 int main() 9 { 10 enum DAY day; 11 day=WED; 12 printf("%d",day); 13 return 0; 14 }
在C語言中,枚舉類型是被當做int或者unsigned int來處理的,所以按照C語言的規范是沒有辦法遍歷枚舉類型的。
不過在一些特殊的情況下,枚舉類型必須連續是可以實現有條件的遍歷。
下面實例用for來遍歷枚舉的元素。
1 #include<stdio.h> 2 3 enum DAY 4 { 5 MON=1, TUE, WED, THU, FRI, SAT, SUN 6 } day; 7 int main() 8 { 9 // 遍歷枚舉元素 10 for (day = MON; day <= SUN; day++) { 11 printf("枚舉元素:%d \n", day); 12 } 13 }
以下枚舉類型不連續,這種枚舉無法遍歷
1 enum 2 { 3 ENUM_0, 4 ENUM_10 = 10, 5 ENUM_11 6 };
將整數轉換為枚舉:
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main() 5 { 6 7 enum day 8 { 9 saturday, 10 sunday, 11 monday, 12 tuesday, 13 wednesday, 14 thursday, 15 friday 16 } workday; 17 18 int a = 1; 19 enum day weekend; 20 weekend = ( enum day ) a; //類型轉換 21 //weekend = a; //錯誤 22 printf("weekend:%d",weekend); 23 return 0; 24 }
整理自菜鳥教程 https://www.runoob.com