C++宏和枚举

宏我们的计算器程序,用1234对应加减乘除,对于人阅读很产生一点障碍。隔一个月后再看此代码可能想不起是0123还是1234了,还得去代码中查找,如果能为代表四则运算的四个数取个有意义的别名就好了,一

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

我们的计算器程序,用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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120538.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 添加和共享打印机的方法是_按名称选择共享打印机输入什么

    添加和共享打印机的方法是_按名称选择共享打印机输入什么在Windows10中,可以将打印机共享给网络上的多台电脑。若要从连接到打印机的电脑(主要电脑)共享打印机至未连接到打印机的辅助电脑,你必须设置共享打印机设置、将打印机连接到主要电脑(或者以无线方式或使用USB电缆),然后打开打印机。另外,请确保主电脑已打开、连接到打印机并连接到网络。注意共享打印机时,请确保已在主要和辅助电脑上设置了共享设置。此外,请确保你知道主要电脑的名称。有关详细信…

    2025年5月25日
    3
  • python简单的图片加密「建议收藏」

    python简单的图片加密「建议收藏」欢迎加入我们卧虎藏龙的python讨论qq群:729683466●导语●总有些东西是你不希望别人看到的比如你暗恋的女神的照片要是被别人发现了那可就尴尬了所以来学一学用python加密图…

    2022年6月21日
    86
  • ORA-01810:格式代码出现两次 解决方法

    ORA-01810:格式代码出现两次 解决方法

    2022年2月7日
    64
  • BufferedWriter导出数据excel文件

    BufferedWriter导出数据excel文件BufferedWriter导出数据BufferedWriter将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了js页面//导出数据functionexportData(){vardata={};…

    2022年5月24日
    27
  • Linux lamp_lamp搭建和配置

    Linux lamp_lamp搭建和配置LAMP架构LAMP架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整套系统和相关软件,能够提供动态Web站点服务及其应用开发环境。LAMP是一个缩写词,具体包括Linux操作系统、Apache网站服务器、MySQL数据库服务器、PHP(或Perl、Python)网页编码。在构建LAMP平台时,各组件的安装顺序依次为Linux、Apache、MySQL、PHP。其中…

    2022年10月17日
    3
  • 机械制图圆弧与圆弧连接画法_机械制图中圆角的画法

    机械制图圆弧与圆弧连接画法_机械制图中圆角的画法18圆弧连接的画法绘图时,经常要用已知半径的圆弧,但圆心要在作图中确定,这样的圆弧,称为连接圆弧。连接圆弧需要光滑连接已知直线或圆弧,光滑连接也就是要在连接点处相切。为了保证相切,必须准确地作出连接圆弧的圆心和切点。一、用已知半径为R的圆弧连接两条已知直线用半径为R的连接弧连接两已知直线的作图过程如图所示,其步骤为:1、求连接弧的圆心:作与两已知直线分别相距为R的平行线,交点O即为连接圆弧圆心;…

    2025年11月23日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号