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……。當然,聲明時候可以修改其存儲值,即修改枚舉值,但不可以為負數,如-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<

4. 枚舉應用程序

當輸入今天星期幾(1-7),我們希望判斷今天是否上班(公司規定週一到週五工作,週末休息)。

#include 
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;
}

轉載:
https://blog.csdn.net/FX677588/article/details/52679803


分享到:


相關文章: