您的位置:首页 > 编程语言 > C语言/C++

成为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语言