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)
上一篇 2021年12月24日 上午7:00
下一篇 2021年12月24日 上午8:00


相关推荐

  • 中国传统颜色16进制颜色码

    中国传统颜色16进制颜色码uad 很明显 自然界中的颜色几乎有无数种 但是在计算机中我们需要用固定的内存去存储 根据三原色理论 我们就有了颜色在计算机中的各种数值命名表示 如 RGB 值 16 进制颜色码 常见颜色可以用对应名称如 red green RGB 值 uad 计算机中颜色一般用 RGB 值表示颜色 RGB 也就是光学三原色 Red Green Blue 红绿蓝 因为三原色可以混合成所有颜色 所以计算机只需要存储这三种基色的数值即可 对于 RGB 三种基色 计算机用 1 字节 Byte 来存储相应强度值 总共 3Byte RGB 值即三原色

    2026年3月17日
    2
  • 自己动手写操作系统在线阅读_如何理解写作是一个整体系统

    自己动手写操作系统在线阅读_如何理解写作是一个整体系统最近开始看《自己动手写操作系统》,虽然很早以前就读过一点点,但一直没有机会动手实践。本着光说不练假把式的原则,今天动手实践了开头的一部分。(说得这么正经其实你就是看了一点点吧!囧)废话不多说,在这里做一个小小的总结。实验环境:操作系统:win7旗舰版64位 汇编编译器:NASM 2.12.02虚拟机:VirtualPC_2007软盘/虚拟软盘写引导扇区工具:Flopp

    2022年8月30日
    5
  • 史上最全ThreadLocal 详解(一)

    史上最全ThreadLocal 详解(一)史上最全 ThreadLocal 详解目录史上最全 ThreadLocal 详解一 ThreadLocal 简介二 ThreadLocal 的作用三 ThreadLocal 与 Synchronized 的区别四 ThreadLocal 的简单使用五 ThreadLocal 的原理 5 1 ThreadLocal 与 Thread ThreadLocalM 之间的关系六 ThreadLocal 常见使用场景一 ThreadLocal 简介 ThreadLocal 叫做线程变量

    2026年3月19日
    2
  • 自学 6 个月 Java 找到了一份 15K 的工作,师弟的方式值得推荐给大家

    自学 6 个月 Java 找到了一份 15K 的工作,师弟的方式值得推荐给大家我有一个大学校友,他是去年8月份才开始正式学习Java的,之前在一家私企工作了5年,工资一个月只有不到6000块,日子过得很苦逼,毕竟郑州的房贷压力也不小,公司就那么大,除非领导离职,否则根本看不到晋升的希望。他刚26岁,正值青春年华,我就劝他不如改学Java,他之前学PHP的,虽然做起来项目很快,但发展前景确实不怎么乐观。我身边的很多朋友在北京做Java开发,差不多能拿到2到3万的月薪,师弟听了非常羡慕,感觉超出了他的认知范围,就下定决心开始学习Java,一共学了大

    2022年6月22日
    48
  • 偷窃转基因玉米种子引发中美打农业官司

    偷窃转基因玉米种子引发中美打农业官司

    2021年11月28日
    54
  • 手把手教你用idea搭建ssm项目并实现简单demo(超详细)

    手把手教你用idea搭建ssm项目并实现简单demo(超详细)闲暇之余,想搭建一个ssm项目玩玩,结果发现,不百度根本打不出来,搭建出来也有一堆问题,所以在此一步一步记录一下。使用idea搭建ssm项目,首先就是将整个框架整起来如果已经在项目中了,点击左上角file->new->project(刚打开idea是新建->project)[image1]左侧栏目选择maven并勾选createfromarchetype,然后在下面找到org.apache.maven.archetype:maven-archetype-weba

    2022年6月16日
    44

发表回复

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

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