1. 程式人生 > >c/c++ enum 變數

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……。

當然,宣告時候可以修改其儲存值,即修改列舉值,但不可以為負數,如-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;
}