程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++宏和枚舉,枚舉

C++宏和枚舉,枚舉

編輯:C++入門知識

C++宏和枚舉,枚舉


我們的計算器程序,用1234對應加減乘除,對於人閱讀很產生一點障礙。隔一個月後再看此代碼可能想不起是0123還是1234了,還得去代碼中查找,如果能為代表四則運算的四個數取個有意義的別名就好了,一看是知道對應什麼。沒問題,用宏啊。以下是我們的計算器程序第五版:

http://hovertree.com/menu/cpp/

//定義四則運算的宏
#define JIA     1
#define JIAN    2
#define CHENG   3
#define CHU     4

int main(void)
{
    //保存用戶輸入的數
    int number1;
    int number2;
    int opt;//運算符

    //提示用戶輸入第一個數:
    printf("請輸入第一個數:\n");
    int r =scanf("%d",&number1);
    //查看Scanf是否收到了正確的數
    if(r==0){
        printf("別調皮,這樣不好玩,我走了\n");
        //程序退出
        return 0;
    }
// 何問起 hovertree.com
    //提示用戶輸入第二個數
    printf("請輸入第二個數:\n");
    r = scanf("%d",&number2);
    if(r==0){
        printf("別調皮,這樣不好玩,我走了\n");
        //程序退出
        return 0;
    }

    //提示用戶輸入運算符
    printf("請輸入運算符(%d%d%d%d分別對應加減乘除):\n",JIA,JIAN,CHENG,CHU);
    r = scanf("%d",&opt);
    if(r==0){
        printf("運算符也是數字,別搞錯好嗎?你這樣讓我怎麼混? 我走了\n");
        //程序退出
        return 0;
    }

    //程序運行到這裡說明兩次輸入都正確
    int result;//存放計算結果

    //跟據運算符進行不同的運算
    switch(opt){
    case JIA:
        //加
        result = number1+number2;
        break;
    case JIAN:
        //減
        result = number1-number2;
        break;
    case CHENG:
        //乘
        result = number1*number2;
        break;
    case CHU:
        //除,現在只能整除
        result = number1/number2;
        break;
    default:
        printf("運算符必須是1,2,3,4之一才行!走了\n");
        return; //退出
    }
    //輸出結果
    printf("%d+%d = %d\n",number1,number2,result);

    return 0;
}

宏名習慣性全部大寫,定義宏不需要分號結束。宏的實質就是替換。在編譯時,第一步就是把代碼中的宏用實際的值代替。用宏還一個好處,當你把宏對值改動的話,程序其余地方不用動。比如你可以把1234,改成0123,程序照樣運行不出錯。

枚舉

但是,除了宏之外,還可以使用枚舉。如是:

enum OPT{
    jia = 1,
    jian,
    cheng,
    chu
};

int main(void)
{
    //保存用戶輸入的數
    int number1;
    int number2;
    int opt;//運算符

    //提示用戶輸入第一個數:
    printf("請輸入第一個數:\n");
    int r =scanf("%d",&number1);
    //查看Scanf是否收到了正確的數
    if(r==0){
        printf("別調皮,這樣不好玩,我走了\n");
        //程序退出
        return 0;
    }

    //提示用戶輸入第二個數
    printf("請輸入第二個數:\n");
    r = scanf("%d",&number2);
    if(r==0){
        printf("別調皮,這樣不好玩,我走了\n");
        //程序退出
        return 0;
    }

    //提示用戶輸入運算符
    printf("請輸入運算符(%d%d%d%d分別對應加減乘除):\n",jia,jian,cheng,chu);
    r = scanf("%d",&opt);
    if(r==0){
        printf("運算符也是數字,別搞錯好嗎?你這樣讓我怎麼混? 我走了\n");
        //程序退出
        return 0;
    }
// 何問起 hovertree.com
    //程序運行到這裡說明兩次輸入都正確

    int result;//存放計算結果
    //跟據運算符進行不同的運算
    switch(opt){
    case jia:
        //加
        result = number1+number2;
        break;
    case jian:
        //減
        result = number1-number2;
        break;
    case cheng:
        //乘
        result = number1*number2;
        break;
    case chu:
        //除,現在只能整除
        result = number1/number2;
        break;
    default:
        printf("運算符必須是1,2,3,4之一才行!走了\n");
        return; //退出
    }
    //輸出結果
    printf("%d+%d = %d\n",number1,number2,result);
    return 0;
}

枚舉有名字,我們這個枚舉叫OPT。枚舉雖然看起來像結構,但是枚舉與結構完全不是一回事。枚舉的每一項就是為一個整數取了個名字,每一項都是一個常量,而不是的成員變量。枚舉的用處更像是把表示某種東西的相關值組織到一起,而宏就做不到了。比如四則運算的宏,每一項都可以隨意找位置放,它們不緊鄰也沒有語法錯誤。而枚舉是強制把相關的項放在一起。

枚舉的項的名字一般不大寫,當然你可以像宏一樣大寫。只要你整個工程中都能堅持統一的風格就行了。

http://www.cnblogs.com/roucheng/p/cpp11.html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved