C enum(枚舉)
枚舉是 C 語言中的一種基本數據類型,它可以讓數據更簡潔,更易讀。
枚舉語法定義格式為:
enum 枚舉名 {枚舉元素1,枚舉元素2,……};
接下來我們舉個例子,比如:一星期有 7 天,如果不用枚舉,我們需要使用 #define 來為每個整數定義一個別名:
#define MON 1
#define TUE 2
#define WED 3
#define THU 4
#define FRI 5
#define SAT 6
#define SUN 7
這個看起來代碼量就比較多,接下來我們看看使用枚舉的方式:
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };
這樣看起來是不是更簡潔了。
注意:第一個枚舉成員的默認值為整型的 0,後續枚舉成員的值在前一個成員上加 1。我們在這個實例中把第一個枚舉成員的值定義為 1,第二個就為 2,以此類推。
可以在定義枚舉類型時改變枚舉元素的值:
enum season {spring, summer=3, autumn, winter};沒有指定值的枚舉元素,其值為前一元素加 1。也就說 spring 的值為 0,summer 的值為 3,autumn 的值為 4,winter 的值為 5
枚舉變數的定義
前面我們只是聲明了枚舉類型,接下來我們看看如何定義枚舉變數。
我們可以通過以下三種方式來定義枚舉變數
1、先定義枚舉類型,再定義枚舉變數
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN }; enum DAY day;
2、定義枚舉類型的同時定義枚舉變數
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } day;
3、省略枚舉名稱,直接定義枚舉變數
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("%d",day);
return 0;
}
以上實例輸出結果為:
3
在C 語言中,枚舉類型是被當做 int 或者 unsigned int 類型來處理的,所以按照 C 語言規範是沒有辦法遍曆枚舉類型的。
不過在一些特殊的情況下,枚舉類型必須連續是可以實現有條件的遍曆。
以下實例使用 for 來遍曆枚舉的元素:
實例
#include<stdio.h>
enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;
int main()
{
// 遍曆枚舉元素
for (day = MON; day <= SUN; day++) {
printf("枚舉元素:%d \n", day);
}
}
以上實例輸出結果為:
枚舉元素:1 枚舉元素:2 枚舉元素:3 枚舉元素:4 枚舉元素:5 枚舉元素:6 枚舉元素:7
以下枚舉類型不連續,這種枚舉無法遍曆。
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;
/* ask user to choose color */
printf("請輸入你喜歡的顏色: (1. red, 2. green, 3. blue): ");
scanf("%d", &favorite_color);
/* 輸出結果 */
switch (favorite_color)
{
case red:
printf("你喜歡的顏色是紅色");
break;
case green:
printf("你喜歡的顏色是綠色");
break;
case blue:
printf("你喜歡的顏色是藍色");
break;
default:
printf("你沒有選擇你喜歡的顏色");
}
return 0;
}
以上實例輸出結果為:
請輸入你喜歡的顏色: (1. red, 2. green, 3. blue): 1 你喜歡的顏色是紅色
將整數轉換為枚舉
以下實例將整數轉換為枚舉:
實例
#include <stdio.h>
#include <stdlib.h>
int main()
{
enum day
{
saturday,
sunday,
monday,
tuesday,
wednesday,
thursday,
friday
} workday;
int a = 1;
enum day weekend;
weekend = ( enum day ) a; //類型轉換
//weekend = a; //錯誤
printf("weekend:%d",weekend);
return 0;
}
以上實例輸出結果為:
weekend:1