C enum(列舉)
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;
/* 使用者輸入數字來選擇顏色 */
printf("請輸入你喜歡的顏色: (1. red, 2. green, 3. blue): ");
scanf("%u", &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