c/c++ enum 變數
1. 說明:
列舉enum的出現,主要是為了解決一些特定屬性的賦值,變數取值僅在一定有限範圍內的問題。例如一年只有十二個月取值,一個星期只有七天情況,人的性別只有男女兩種等。這些屬性如果簡簡單單用int型別變數定義就有失妥當,能取的值遠遠超出可取值範圍。所以我們希望給這些屬性變數,定義一個有限取值範圍。 列舉即將變數的值一一列舉出來,變數只限於列舉出來的值的範圍內取值。
2. 定義
語法結構: enum [列舉名] {e1[=Value1], e2[=Value2] ,… …};
e1、e2… …:稱為列舉常量,列舉成員,也稱為列舉子。 Value1,Value2… …:稱為列舉子值,即列舉值,可忽略不寫,預設從0依次賦值。
enum color {red,green,blue}; //列舉值分別為0,1,2.
定義列舉型別變數: [enum] 列舉名 列舉變數名 [=初始化值]; 例如:
color paint = red;
或
enum color paint = red;
當然,也可以麼直接定義列舉變數,像結構體struct一樣:
enum color {red=1 , green =5, blue=10} paint;
3. 列舉語法
①.列舉成員不是變數,而是常數,和const定義常變數一樣,所以不能對列舉元素進行賦值。 ②.列舉成員作為常量,定義的時候儲存的值按列舉順序依次預設為0,1,2……。
enum color {red, green=10,blue}; //依次為0,10,11
這種情況下,red列舉值依舊預設為0,green則為10,而blue沒有賦值,則隨上個列舉值遞增下去,所以為11。 列舉值在未特定賦值外,後續列舉成員預設都是依上個成員的列舉值依次遞增的。 ③. 列舉成員不是簡單字串常量,使用的時候無需新增單、雙引號。 ④.列舉成員不可以重複,但是列舉值可以重複。重複列舉值的列舉成員表明它們具有共同性質,所以放在一起。 例如:
enum weeks {mon=1,tue=1,wed=1,thu=1,fri=1,sat=2,sun=2};
一週週一到週五是工作日,我們希望它們具有共性和相同的列舉值。而週末休息,我們希望它兩有另外一個列舉值。 ⑤.一個整數不能直接賦給一個列舉變數,必須強制進行型別轉換才能賦值。 例如:
enum weeks day;
day =(weeks)2;
⑥.列舉值可以用在if-else或者switch-case判斷中。 例如:
if(day != mon)
{
printf("今天是工作日\n");
}
⑦.編譯平臺輸出列舉型別變數,輸出的不是列舉常量名稱,而是列舉值。就像const int n=1輸出的並不是’n’這個字元,而是1這個值。 例如:
enum weeks day = mon; //定義列舉weeks型別變數並初始化
day = (weeks)2;
cout<<day<<endl; //輸出結果為2,並不是"sat"字串常量
4. 列舉應用程式
當輸入今天星期幾(1-7),我們希望判斷今天是否上班(公司規定週一到週五工作,週末休息)。
#include<stdio.h>
int main( )
{
enum weekday {sun=1,mon,tue,wed,thu,fri,sat} day; //從1開始
int k;
printf("請輸入今天星期幾(1--7):");
scanf("%d",&k);
day=(enum weekday)k;
switch(day)
{
case mon:
case tue:
case wed:
case thu:
case fri: printf("今天上班\n"); break;
case sun:
case sat: printf("今天休息\n"); break;
default: printf("輸入有誤\n"); break;
}
return 0;
}