<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 幻海藍夢 閱讀(922) 評論(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

    主站蜘蛛池模板: 亚洲人成中文字幕在线观看| 亚洲最大免费视频网| 国内永久免费crm系统z在线| 亚洲黄色在线视频| 在线免费观看国产视频| 中文字幕一区二区免费| 亚洲91精品麻豆国产系列在线| 国产在线观看免费不卡| 一区二区三区福利视频免费观看| 学生妹亚洲一区二区| 综合亚洲伊人午夜网 | 亚洲制服在线观看| 亚洲成a人片在线观看老师| 久久国产免费观看精品3| 老司机午夜在线视频免费观| 中文字幕亚洲精品| 亚洲成a人一区二区三区| 思思re热免费精品视频66| 久久最新免费视频| 亚洲性色AV日韩在线观看| 亚洲成AV人片天堂网无码| 国产免费拔擦拔擦8x| 色播精品免费小视频| 国产又黄又爽胸又大免费视频 | 久久亚洲精品无码gv| 91亚洲国产成人久久精品网站| 免费国产a国产片高清| 在线观看AV片永久免费| 老汉精品免费AV在线播放| 人妖系列免费网站观看| 亚洲乱色伦图片区小说| 亚洲欧洲视频在线观看| 国产亚洲综合久久系列| 亚洲精品无码永久在线观看| 大学生一级特黄的免费大片视频| 亚洲成人免费网站| 性无码免费一区二区三区在线| 一个人晚上在线观看的免费视频 | 99热在线免费播放| 中文字幕免费在线看线人动作大片| 99亚洲乱人伦aⅴ精品|