1.列舉型別
1.列舉資料型別是C語言中一種構造資料型別,可以讓資料更加簡潔,更易讀,對於只有幾個特定的資料,可以使用列舉型別
2.列舉對應英文enumeration,簡寫為enum
3.列舉是一組常量的集合,包含一組有限的特定的資料
4.列舉語法的定義格式為
enum 列舉名 {列舉元素}
1.1 例項1
使用列舉表示一個星期
// 傳統方法
#define MON 1;
#define TUE 2;
#define WeD 3;
#define THU 4;
#define FRI 5;
#define SAT 6;
#define SUN 7;
#include <stdio.h>
void main() {
enum DAY
{
// 這裡DAY 就是列舉型別, 包含了7個列舉元素
// 沒有賦值,就按照順序給值 0 1 2 3 4 ...
// 列舉型別預設是從0開始的
// 給初始值之後會從初始值遞增
MON=1, TUE=2, WED=3, THU=4, FRI=5, SAT=6, SUN=7
};
enum DAY day; // enum DAY 是列舉型別, day 就是列舉變數
day = WED; //給列舉變數 day 賦值,值就是某個列舉元素
printf("%d",day);// 3 , 每個列舉元素對應一個值
getchar();
}
1.2 列舉型別宣告
如同結構體(struct)和共用體(union)一樣,列舉變數也可用不同的方式說明,即先定義後說明,同時定義說明或直接說明。設有變數a,b,c被說明為上述的weekday,可採用下述任一種方式:
enum weekday{sun,mon,tue,wed,thu,fri,sat}; //定義列舉型別
enum weekday a,b,c; //定義3個列舉型別的變數
enum weekday{sun,mon,tue,wed,thu,fri,sat}a,b,c; //定義列舉型別的同時,定義3個變數
enum{sun,mon,tue,wed,thu,fri,sat}a,b,c; //列舉名可省略,但後面不能再定義新的列舉變數
1.3 列舉型別取別名
// typeof可以把列舉型別定義一個別名
typedef enum weekday //此處的weekday為列舉名
{
Mon = 0,
Tues,
Wed,
Thurs,
Fri,
Sat,
Sun
} weekday; //此處的weekday為enum weekday的別名
weekday today, tomorrow; //列舉型別的變數,即enum weekday型別
// 列舉名可以省略
typedef enum //省略列舉名
{
Mon = 0,
Tues,
Wed,
Thurs,
Fri,
Sat,
Sun
}weekday; //此處的weekday為列舉型別的別名
weekday today, tomorrow; //列舉型別的變數,即enum weekday型別
// typeof使用的時候不可以省略別名
typedef enum //省略列舉名
{
Mon = 0,
Tues,
Wed,
Thurs,
Fri,
Sat,
Sun
}weekday; //此處的weekday為列舉型別的別名
weekday today, tomorrow; //列舉型別的變數,即enum weekday型別
- 不能定義同名的列舉型別
- 不能包含同名的列舉成員
1.3 列舉型別的遍歷
C 語言中,列舉型別是被當做 int 或者 unsigned int 型別來處理的, 枚 舉型別必須連續是可以實現有條件的遍歷。以下例項使用 for 來遍歷列舉的元素。
#include <stdio.h>
enum DAY {
MON=1, TUE, WED, THU, FRI, SAT, SUN //如果沒有給賦值,就會按照順序賦值
} day; // 表示 定義了一個列舉型別 enum Day ,同時定義了一個變數 day(型別是 enum DAY)
int main() {
// 遍歷列舉元素, 列舉的每個元素都對應數值
//day++ 會給出警告,但是可以執行
for (day = MON; day <= SUN; day++) { //SUN = 7
printf("列舉元素:%d \n", day); // 1, 2, 3, 4,5,6,7
}
//day = FRI;
//printf("%d", day); // 10
getchar();
return 0;
}
1.4 列舉型別在switch中的應用
#include <stdio.h>
void main() {
enum SEASONS {SPRING=1, SUMMER, AUTUMN, WINTER}; //定義列舉型別 enum SEASONS
enum SEASONS season;//定義了一個列舉型別變數 season(型別 enum SEASONS )
printf("請輸入你喜歡的季節: (1. spring, 2. summer, 3. autumn 4 winter): ");
scanf("%d", &season);
switch (season) {
case SPRING:
printf("你喜歡的季節是春天");
break;
case SUMMER:
printf("你喜歡的季節是夏天");
break;
case AUTUMN:
printf("你喜歡的季節是秋天");
break;
case WINTER:
printf("你喜歡的季節是冬天");
break;
default:
printf("你沒有選擇你喜歡的季節");
}
getchar();
getchar();
}