如何通过键盘输入整型数给枚举变量赋值

        在程序设计中,有时会用到由若干个有限数据元素组成的集合,如一周内的星期一到星期日七个数据元素组成的集合,由三种颜色红、黄、绿组成的集合,一个工作班组内十个职工组成的集合等等,程序中某个变量取值仅限于集合中的元素。此时,可将这些数据集合定义为枚举类型。因此,枚举类型是某类数据可能取值的集合,如人的性别的集合{man,woman}。可如下定义:

         enum TSex{ man,woman};

         而且,枚举类型与整型常量值有一定的联系.。上面定义了一个名为TSex的枚举类型,它有2个元素值:man,woman。在编译器编译程序时,给枚举类型中的每一个元素指定一个整型常量值(也称为序号值)。若枚举类型定义中没有指定元素的整型常量值,则整型常量值从0开始依次递增。因此TSex的2个元素man,woman依次对应整型常量值0,1。但是,枚举类型有以下两个特点:

  1. 不能用键盘通过"cin>>"向枚举变量输入元素值,只能通过初始化或赋值运算符输入。例如:
    enum TSex {man,woman} sex1=man;//定义枚举变量时进行初始化
    TSex sex2; //定义了一个TSex类型的枚举变量sex2
    sex2=man;//通过赋值运算将元素值man赋给sex2
    TSex sex3;
    cin>>sex3;//这是错误的,无论输入元素值man,woman还是序号值0,1
  2. 可用"cout<<"输出枚举变量,但输出的是元素对应的序号值,而不是元素值。例如
    cout<<sex1<<endl;//输出的是sex1元素man对应的序号值0,而不是元素man。

        虽然不能通过键盘直接给枚举变量输入元素值,但是可以将输入的整型常量值强制转换后赋给枚举变量。例如,定义一个性别的枚举类型,通过键盘设定性别,并输出。

方法1:通过符号(int &)

        #include <iostream>
        using namespace std;
        int main()
        {  
        enum TSex {man,woman};//定义枚举类型TSex
        TSex sex; //定义枚举变量sex
         cout<<"输入0或1:0代表man,1代表woman"<<endl;
         cin>>(int &)sex; //通过整型引用给sex赋值
         switch(sex)  //通过switch循环输出性别
        {
         case man:cout<<"man"<<endl;break; //不能写成cout<<sex,因为它只会输出序号值0或1
         case woman:cout<<"woman"<<endl;break;
         default:cout<<"性别输入错误"<<endl;break;
        }
        return 0;
        }

方法2:通过枚举类型(enum TSex)

        #include <iostream>
        using namespace std;
        int main()
        {  
        enum TSex {man,woman};//定义枚举类型TSex
        TSex sex; //定义枚举变量sex
        int gender;//定义临时变量gender,用于保存输入的序号值

         cout<<"输入0或1:0代表man,1代表woman"<<endl;
        sex=(enum TSex)gender ; //强制转换
         switch(sex)  //通过switch循环输出性别
        {
         case man:cout<<"man"<<endl;break;
         case woman:cout<<"woman"<<endl;break;
         default:cout<<"性别输入错误"<<endl;break;
        }
        return 0;
        }

参考资料:

C语言枚举类型enum

枚举类型的定义



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值