成为C++高手之宏与枚举
2016-05-12 05:37
246 查看
宏
我们的计算器程序,用1234对应加减乘除,对于人阅读很产生一点障碍。隔一个月后再看此代码可能想不起是0123还是1234了,还得去代码中查找,如果能为代表四则运算的四个数取个有意义的别名就好了,一看是知道对应什么。没问题,用宏啊。以下是我们的计算器程序第五版://定义四则运算的宏 #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; } //提示用户输入第二个数 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; } //程序运行到这里说明两次输入都正确 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://edu.csdn.net/course/detail/2057 才能取得快速入门的效果。欢迎加入群535807023讨论。
上一篇: 成为C++高手之if与switch
下一篇:成为C++高手之while循环
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C语言自动生成enum值和名字映射代码
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中进制知识汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- C语言实现选择排序、冒泡排序和快速排序的代码示例
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法