<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jasmine214--love

    只有當你的內心總是充滿快樂、美好的愿望和寧靜時,你才能擁有強壯的體魄和明朗、快樂或者寧靜的面容。
    posts - 731, comments - 60, trackbacks - 0, articles - 0

    C-枚舉

    Posted on 2010-11-29 15:10 幻海藍夢 閱讀(921) 評論(0)  編輯  收藏 所屬分類: C語言學習
    在實際應用中,有的變量只有幾種可能取值。如人的性別只有兩種可能取值,星期只
    有七種可能取值。在 C 語言中對這樣取值比較特殊的變量可以定義為枚舉類型。所謂枚舉
    是指將變量的值一一列舉出來,變量只限于列舉出來的值的范圍內取值。
    定義 一個變量是枚舉類型,可以先定義一個枚舉類型名,然后再說明這個變量是該枚
    舉類型。例如:
    enum weekday{sun,mon,tue,wed,thu,fri,sat};
    定義了一個枚舉類型名 enum weekday,然后定義變量為該枚舉類型。例如:
    enum weekday day;
    當然,也可以直接定義枚舉類型變量。例如:
    enum weekday{sun,mon,tue,wed,thu,fri,sat} day;
    其中,sum,mon,…,sat 等稱為枚舉元素或枚舉常量,它們是用戶定義的標識符。
    需要說明的有以下幾點。
    ① 枚舉元素不是變量,而是常數,因此枚舉元素又稱為枚舉常量。因為是常量,所
    以不能對枚舉元素進行賦值。
    ② 枚舉元素作為常量,它們是有值的,C 語言在編譯時按定義的順序使它們的值為
    0,1,2,…。
    在上面的說明中,sun 的值為 0,mon 的值為 1,…sat 的值為 6,如果有賦值語句
    day=mon;
    則 day 變量的值為 1。當然,這個變量值是可以輸出的。例如:
    printf ("%d",day);
    將輸出整數 1。
    如果在定義枚舉類型時指 定元素的值,也可以改變枚舉元素的值。例如:
    enum weekday{sun=7,mon=1,tue,wed,thu,fri,sat}day;
    這時,sun 為 7,mon 為 1,以后元素順次加 1,所以 sat 就是 6 了。
    ③ 枚舉值可以用來作判斷。例如:
    if (day==mon) {…}
    if (day>mon) {…}
    枚舉值的比較規則是:按其在說明時的順序號比較,如果說明時沒有人為指定,則第
    一個枚舉元素的值認 作 0。例如,mon>sun,sat>fri。
    C 語言教程 •216•
    ④ 一個整數不能直接賦給一個枚舉變量,必須強制進行類型轉換才能賦值。例如:
    day=(enum weekday)2;
    這個賦值的意思 是,將順序號為 2 的枚舉元素賦給 day,相當于
    workday=tue;
    【例 11.6】從鍵盤輸入一個整數,顯示與該整數對應的枚舉常量的英文名稱。
    # include
    void main( )
    {
    enum weekday {sun,mon,tue,wed,thu,fri,sat} day;
    int k;
    printf("input a number(0--6)");
    scanf("%d",&k);
    day=(enum weekday)k;
    switch(day)
    {
    case sun: printf("sunday\n");break;
    case mon: printf("monday\n");break;
    case tue: printf("tuesday\n");break;
    case wed: printf("wednesday\n");break;
    case thu: printf("thursday\n");break;
    case fri: printf("friday\n");break;
    case sat: printf("satday\n");break;
    default: printf("input error\n");break;
    }
    }
    程序運行結果為:
    input a number(0--6)1
    monday
    在該程序中,枚舉常量與枚舉變量可以進行比較,但要輸出枚舉常量對應的英文單詞,
    不能使用以下語句:
    printf(" %s",mon);
    因為枚舉常量 mon 為整數值,而非字符串。
    在使用枚舉變量時,主要關心的不是它的值的大小,而是其表示的狀 態。
    原文; http://www.zs5u.com/Software/C/200901/Software_24620.html
    ------------------------------------------------------------------

    注:以下全部代碼的執行環境為VC++ 6.0

    在程序中,可能需要為某些整數定義一個別名,我們可以利用預處理指令#define來完成這項工作,您的代碼可能是:

    #define MON  1
    #define TUE   2
    #define WED  3
    #define THU   4
    #define FRI    5
    #define SAT   6
    #define SUN   7

     

    在此,我們定義一種新的數據類型,希望它能完成同樣的工作。這種新的數據類型叫枚舉型。

     

    1. 定義一種新的數據類型 - 枚舉型

     以下代碼定義了這種新的數據類型 - 枚舉型

    enum DAY
    {
          MON
    =1, TUE, WED, THU, FRI, SAT, SUN
    };

     

    (1) 枚舉型是一個集合,集合中的元素(枚舉成員)是一些命名的整型常量,元素之間用逗號,隔開。

    (2) DAY是一個標識符,可以看成這個集合的名字,是一個可選項,即是 可有可無的項。

    (3) 第一個枚舉成員的默認值為整型的0,后續枚舉成員的值在前一個成員上加1。

    (4) 可以人為設定枚舉成員的值,從而自定義某個范圍內的整數。

    (5) 枚舉型是預處理指令#define的替代。

    (6) 類型定義以分號;結束。

     

    2. 使用枚舉類型對變量進行聲明

    新的數據類型定義完成后,它就可以使用了。我們已經見過最基本的數據類型,如:整型int, 單精度浮點型float, 雙精度浮點型double, 字符型char, 短整型short等等。用這些基本數據類型聲明變量通常是這樣:

    char     a; //變量a的類型均為字符型char
    char     letter;
    int        x,
               y,
               z; 
    //變量x,y和z的類型均為整型int
    int       number;
    double  m, n;
    double  result; //變量result的類型為雙精度 浮點型double

     

    既然枚舉也是一種數據類型,那么它和基本數據類型一樣也可以對變量進行聲明。

    方法一:枚舉類型的定義和變量的聲明分開

    enum DAY
    {
          MON
    =1, TUE, WED, THU, FRI, SAT, SUN
    };

     

    enum DAY yesterday;
    enum DAY today;
    enum DAY tomorrow; //變量 tomorrow的類型為枚舉型enum DAY
    enum DAY good_day, bad_day; //變量good_day和bad_day的類型均為枚舉型enum DAY

     

    方法二:類型定義與變量聲明同時進行:

    enum //跟第一個定義不同的是,此處的標號DAY省略,這是允許的。
    {
        saturday,
        sunday 
    = 0,
        monday,
        tuesday,
        wednesday,
        thursday,
        friday
    } workday; 
    //變量workday的類型為枚舉型enum DAY

     

    enum week { Mon=1, Tue, Wed, Thu, Fri Sat, Sun} days; //變量days的類型 為枚舉型enum week

     

    enum BOOLEAN { falsetrue } end_flag, match_flag; //定義枚舉類型并聲明了兩個枚舉型變量

     

    方法三:用typedef關鍵字將枚舉類型定義成別名,并利用該別名進行變量聲明:

    typedef enum workday
    {
        saturday,
        sunday 
    = 0,
        monday,
        tuesday,
        wednesday,
        thursday,
        friday
    } workday; 
    //此處的workday為枚舉型enum workday的別名

     

    workday today, tomorrow; //變量today和tomorrow的類型為枚舉型workday,也即enum workday

     

    enum workday中的workday可以省略:

    typedef enum
    {
        saturday,
        sunday 
    = 0,
        monday,
        tuesday,
        wednesday,
        thursday,
        friday
    } workday; 
    //此處的workday為枚舉型enum workday的別名

    workday today, tomorrow; 
    //變量today和tomorrow的類型為枚舉型workday,也即 enum workday

     

    也可以用這種方式:

    typedef enum workday
    {
        saturday,
        sunday 
    = 0,
        monday,
        tuesday,
        wednesday,
        thursday,
        friday
    };

    workday today, tomorrow; 
    //變量today和tomorrow的類型為枚舉型workday,也即 enum workday

     

    注意:同一個程序中不能定義同名的枚舉類型,不同的枚舉類型中也不能 存在同名的命名常量。錯誤示例如下所示:

    錯誤聲明一:存在同名的枚舉類型

    typedef enum
    {
        wednesday,
        thursday,
        friday
    workday;

    typedef 
    enum WEEK
    {
        saturday,
        sunday 
    = 0,
        monday,
    workday;

     

    錯誤聲明二:存在同名的枚舉成員

    typedef enum
    {
        wednesday,
        thursday,
        friday
    } workday_1;

    typedef 
    enum WEEK
    {
        wednesday,
        sunday 
    = 0,
        monday,
    } workday_2;

     

    3. 使用枚舉類型的變量

    3.1 對枚舉型的變量賦值。

    實例將枚舉類型的賦值與基本數據類型的賦值進行了對比:

    方法一:先聲明變量,再對變量賦值

    #include<stdio.h>

    /* 定義枚舉類型 */
    enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };

    void main()
    {
        
    /* 使用基本數據類型聲明變量,然后對變量賦值 */
        
    int x, y, z;
        
        x 
    = 10;
        y 
    = 20;
        z 
    = 30;
        
        
    /* 使用枚舉類型聲明變量,再對枚舉型變量賦值 */
        
    enum DAY yesterday, today, tomorrow;
        
        yesterday 
    = MON;
        today     
    = TUE;
        tomorrow  
    = WED;

        printf(
    "%d %d %d \n", yesterday, today, tomorrow);
    }

     

    方法二:聲明變量的同時賦初值

    #include <stdio.h>

    /* 定義枚舉類型 */
    enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };

    void main()
    {
        
    /* 使用基本數據類型聲明變量同時對變量賦初值 */
        
    int x=10, y=20, z=30;

        
    /* 使用枚舉類型聲明變量同時對枚舉型變量賦初值 */
        
    enum DAY yesterday = MON, 
                            today 
    = TUE,
                       tomorrow 
    = WED;

        printf(
    "%d %d %d \n", yesterday, today, tomorrow);
    }

     

    方法三:定義類型的同時聲明變量,然后對變量賦值。

    #include <stdio.h>

    /* 定義枚舉類型,同時聲明該類型的三個變量,它們都為全局變量 */
    enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } yesterday, today, tomorrow;

    /* 定義三個具有基本數據類型的變量,它們都為全局變量 */
    int x, y, z;

    void main()
    {
        
    /* 對基本數據類型的變量賦值 */
        x 
    = 10;  y = 20;  z = 30;
        
        
    /* 對枚舉型的變量賦值 */
        yesterday 
    = MON;
        today     
    = TUE;
        tomorrow  
    = WED;

        printf(
    "%d %d %d \n", x, y, z); //輸出:10 20 30
        printf("%d %d %d \n", yesterday, today, tomorrow); //輸出:1 2 3
    }

     

    方法四:類型定義,變量聲明,賦初值同時進行。

    #include <stdio.h>

    /* 定義枚舉類型,同時聲明該類型的三個變量,并賦初值。它們都為全局變量 */
    enum DAY
    {
        MON
    =1
        TUE,
        WED,
        THU,
        FRI,
        SAT,
        SUN 
    }
    yesterday 
    = MON, today = TUE, tomorrow = WED;

    /* 定義三個具有基本數據類型的變量,并賦初值。它們都為全局變量 */
    int x = 10, y = 20, z = 30;

    void main()
    {
        printf(
    "%d %d %d \n", x, y, z); //輸出:10 20 30
        printf("%d %d %d \n", yesterday, today, tomorrow); //輸出:1 2 3
    }

     

    3.2 對枚舉型的變量賦整數值時,需要進行類型轉換

    #include <stdio.h>

    enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };

    void main()
    {
        
    enum DAY yesterday, today, tomorrow;

        yesterday 
    = TUE;
        today 
    = (enum DAY) (yesterday + 1); //類型轉換
        tomorrow = (enum DAY) 30//類型轉換
        
    //tomorrow = 3; //錯誤

        printf(
    "%d %d %d \n", yesterday, today, tomorrow); //輸出:2 3 30
    }

     

    3.3 使用枚舉型變量

    #include<stdio.h>

    enum

        BELL          
    = '\a',
        BACKSPACE 
    = '\b',
        HTAB        
    = '\t',
        RETURN      
    = '\r',
        NEWLINE   
    = '\n'
        VTAB        
    = '\v',
        SPACE      
    = ' '
    };

    enum BOOLEAN { FALSE = 0, TRUE } match_flag;

    void main()
    {
        
    int index = 0;
        
    int count_of_letter = 0;
        
    int count_of_space = 0;

        
    char str[] = "I'm Ely efod";

        match_flag 
    = FALSE;

        
    for(; str[index] != '\0'; index++)
            
    if( SPACE != str[index] )
                count_of_letter
    ++;
            
    else
            {
                match_flag 
    = (enum BOOLEAN) 1;
                count_of_space
    ++;
            }
        
        printf(
    "%s %d times %c", match_flag ? "match" : "not match", count_of_space, NEWLINE);
        printf(
    "count of letters: %d %c%c", count_of_letter, NEWLINE, RETURN);
    }

     

    輸出:
    match 2 times
    count of letters: 10
    Press any key to continue

     

    4. 枚舉類型與sizeof運算符

    #include <stdio.h>

    enum escapes

        BELL      
    = '\a',
        BACKSPACE 
    = '\b',
        HTAB      
    = '\t',
        RETURN    
    = '\r',
        NEWLINE   
    = '\n'
        VTAB      
    = '\v',
        SPACE     
    = ' '
    };

    enum BOOLEAN { FALSE = 0, TRUE } match_flag;

    void main()
    {
        printf(
    "%d bytes \n"sizeof(enum escapes)); //4 bytes
        printf("%d bytes \n"sizeof(escapes)); //4 bytes

        printf(
    "%d bytes \n"sizeof(enum BOOLEAN)); //4 bytes
        printf("%d bytes \n"sizeof(BOOLEAN)); //4 bytes
        printf("%d bytes \n"sizeof(match_flag)); //4 bytes

        printf(
    "%d bytes \n"sizeof(SPACE)); //4 bytes
        printf("%d bytes \n"sizeof(NEWLINE)); //4 bytes
        printf("%d bytes \n"sizeof(FALSE)); //4 bytes
        printf("%d bytes \n"sizeof(0)); //4 bytes
    }

     

    5. 綜合舉例

    #include<stdio.h>

    enum Season
    {
        spring, summer
    =100, fall=96, winter
    };

    typedef 
    enum
    {
        Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
    }
    Weekday;

    void main()
    {
        
    /* Season */
        printf(
    "%d \n", spring); // 0
        printf("%d, %c \n", summer, summer); // 100, d
        printf("%d \n", fall+winter); // 193

        Season mySeason
    =winter;
        
    if(winter==mySeason)
            printf(
    "mySeason is winter \n"); // mySeason is winter
        
        
    int x=100;
        
    if(x==summer)
            printf(
    "x is equal to summer\n"); // x is equal to summer

        printf(
    "%d bytes\n"sizeof(spring)); // 4 bytes

        
    /* Weekday */
        printf(
    "sizeof Weekday is: %d \n"sizeof(Weekday)); //sizeof Weekday is: 4

        Weekday today 
    = Saturday;
        Weekday tomorrow;
        
    if(today == Monday)
            tomorrow 
    = Tuesday;
        
    else
            tomorrow 
    = (Weekday) (today + 1); //remember to convert from int to Weekday
    }
    原文; http://www.cnblogs.com/JCSU/articles/1299051.html

    主站蜘蛛池模板: 亚洲AV无码专区在线电影成人| 亚洲啪啪免费视频| 国产男女爽爽爽免费视频 | 国产免费观看视频| 黄网站色在线视频免费观看| 国产乱子伦精品免费女| 亚洲av永久无码| 免费黄色小视频网站| 亚洲妇女无套内射精| 免费萌白酱国产一区二区| 特级做a爰片毛片免费看| 亚洲国产精品国产自在在线| 亚洲综合视频在线观看| 30岁的女人韩剧免费观看| 亚洲av专区无码观看精品天堂| 午夜免费国产体验区免费的| 国产成人精品曰本亚洲79ren| 免费看搞黄视频网站| 免费在线观看理论片| 亚洲熟妇无码爱v在线观看| 国产情侣激情在线视频免费看| 亚洲乱码在线观看| 无码国产精品一区二区免费模式| 亚洲视频免费观看| 国产拍拍拍无码视频免费| 久久精品亚洲中文字幕无码麻豆 | 亚洲av色香蕉一区二区三区蜜桃| 四虎永久免费影院| 免费成人在线电影| 亚洲综合av一区二区三区不卡| 亚洲福利在线播放| 色猫咪免费人成网站在线观看| 亚洲精品乱码久久久久久蜜桃图片| 亚洲高清无码综合性爱视频| 国产精品免费AV片在线观看| 亚洲国产香蕉人人爽成AV片久久| 免费看男人j放进女人j免费看| 亚洲色偷偷偷综合网| 亚洲成av人在线视| 亚美影视免费在线观看| 免费国产精品视频|