C++之enum与switch
发布日期:2022-02-06 00:27:06 浏览次数:17 分类:技术文章

本文共 3621 字,大约阅读时间需要 12 分钟。

Explanation of switch_case

1. switch_case示例

#include "iostream"using namespace std;int main(){

   int mark;
cout<<"请输入成绩(0~100):";
cin>>mark;
switch (mark/20)
{
   case 5:  //当输入mark/20等于5时
{
   if(mark>100)//100~119都是mark/20==5,所以要用if语句再次进行过滤
{
   cout<<"ERROR"<
break;
}
cout<<"perfect"< break;
  }
case 4:  //当mark输入80~99时
{
   cout<<"Good!"<
break;
}
case 3: //当mark输入60~79时
{
   cout<<"Soso"<
break;
}
case 2://当mark输入小于60时,由于case 2语句块中没有break,所以会继续跳转到下面其他语句块
case 1:
case 0://当mark小于60时,最终会进入case 0语句块
{
   if (mark >=0)
{
   cout<<"Please work harder!"< break;
}
cout<<"ERROR!"< }
}
return 0;}

2. 运行结果

在这里插入图片描述

Explanation of enum

1. 枚举量的声明和定义

enum enumType{
   Monday, TuesDay, Wednesday, Thursday, Friday, Saturday, Sunday}//这句话有两个作用://1. 声明enumType为新的数据类型,称为枚举;//2. 声明Monday,Tuesday等为符号常量,通常称之为枚举量,其默认值分别为0-6 。enumType Weekday //声明enumType型的变量//然而与基本变量类型不同的是,在不进行强制转换的前提下,只能将定义的枚举量赋值给该enumType型变量,如下:Weekday = Monday;Weekday = Sounday;  //不能将其他值赋给枚举变量,如:Weekday = 10; 这是不被允许的,因为10不是枚举量//当然我们也可以利用强制类型转换,将其他类型值赋给枚举变量,我们下面会讲//上面讲到不能将非枚举量赋给枚举变量,那么我们能不能将枚举量赋给非枚举变量呢?int a = Sunday;   //这是允许的,因为枚举量是符号常量,这里的赋值编译器会自动把枚举量转换成int类型//前面讲可以对枚举变量进行赋值运算,那枚举变量能不能进行算术运算呢?Weekday++ ;
 //非法Weekday = Monday + Tuesday;
//这是非法的,因为这些操作可能导致违反类型限制//比如:Weekday = Sunday; Weekday++; 首先枚举变量被赋值了枚举量中最后一个值Sunday(值为6),再进行递增的话,Weekday增加到了7,而对于enumType类型来说,7是无效的。//总结来说:对于枚举,只定义了赋值运算,没有定义算术运算//不能对枚举量进行算术运算,那么枚举量能不能参与其他类型变量的运算呢?int a;int a = 1 + Monday;  //这是允许的,因为编译器会自动将枚举量转换为int型//我们如何通过强制转换将 非枚举量 赋值给 枚举变量 呢?Weekday = enumType(2);//等同于Weekday=Wednesday;
 //但是,如果试图将一个超出枚举取值范围的值通过强制转换赋给枚举变量,会出现什么后果呢?Weekday = enumType(20); //结果将是不确定的,这么做不会出错,但是得不到想要的结果

2. 自定义枚举量的值

//前面讲通过定义 enum enumType {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday}//枚举量Monday,Tuesday等的值默认分别为0-6,我们可以显式的设置枚举量的值enum enumType {
   Monday=1, Tuesday=2, wednesday=3, Thursday=4, Friday=5, Saturday=6, Sunday=7}//注意指定的值必须是整数//当然也可以显式的定义一部分枚举量的值enum enumType {
   Monday=1, Tuesday, Wednesday=1,Thursday,Friday,Saturday,Sunday};//这样Monday、Wednesday均被定义为1,则Tuesday=2,Thursday,Wednesday,Friday,Saturday,Sunday的值分别默认为2、3、4、5//总结:未被初始化的枚举值的默认值将比其他前面的枚举值大1//同时,我们也可以看出枚举量的值可以是相同的

3. 枚举的取值范围

前面讲到可以通过强制转换将其他类型值赋给枚举变量:Weekday=enumType(2); 这是合法的;但是Weekday=enumType(20);这是非法的。

这里涉及枚举取值范围的概念:枚举的上限是 大于最大枚举量的 最小的2的幂 减去1(例如最大枚举量的值为5,大于最大枚举量且为2的幂:8,减去1,为7,所以枚举取值的上限为7);

枚举的下限有两种情况:一、枚举量的最小值不小于0,则下限取值为0;二、枚举量的最小值取值小于0,则枚举的下限是 小于最小枚举量的 最大的2的幂 加上1

举例来讲:

enum enumType1{
   First=-5, Second=14, Third=10};//则枚举的上限是16-1=15,枚举的下限是-8+1=-7

4. 枚举的应用:enum与switch结合使用

个人觉得枚举switch是最好的搭档,如下所示:

//枚举和switch是最好的搭档:#include 
   
    using namespace std;enum enumType{
   Step0, Step1, Step2, Step3, Done};int main(){

    
   enumType Step;
Step = Step0;
do
{
   switch (Step)
{
   case Step0:
 {
   //语句块;
Step = Step1;
 cout<<"Step0"<
break;
}
case Step1:
{
   //语句块;
Step = Step2;
cout<<"Step1"<
break;
}
case Step2:
{
   //语句块;
Step = Step3;
cout<<"Step2"<
break;
}
case Step3:
{
   //语句块
Step = Done;
cout<<"Step3"<
break;
}
default:{    }
}
} while (Step != Done);
return 0;}

5. 运行结果

依次打印出Step0,Step1,Step2,Step3:
在这里插入图片描述

6. 参考博客

https://blog.csdn.net/bruce_0712/article/details/54984371

转载地址:https://blog.csdn.net/weixin_46181372/article/details/111773503 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Gmapping学习记录
下一篇:GMapping学习记录

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.191.171.16]2022年09月30日 20时52分05秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

最新文章