惧留孙网

juliusun.com

在线教程 > C语言教程 > 枚举类型

枚举类型

第 39/50 节 冥河C语言教程


枚举类型变量的值是可以一一列举出来的,且值仅限于列举出来的范围内。

枚举类型,定义分成两步:1、定义枚举类型;2、定义枚举变量

枚举类型定义格式如下:

enum 枚举类型名 {常量标识符1,常量标识符2,……,常量标识符N}

注意:枚举类型里面的元素列表,是常量标识符,不需要加类型。C语言中枚举类型内部是当作int类型处理的。系统会自动给第一个常量标识符1赋值为0,第二个常量标识符2赋值为1,以此类推。

例:


  1. enum JiJie { Chun, Xia, Qiu, Dong }; //定义一个关于季节的枚举类型

注意,枚举类型常量标识符列表成员不需要指定类型。

如果不喜欢系统自动赋值,也可以手动给我枚举类型列表成员赋值。手动赋值时,如果常量标识符已赋值,就是赋值结果。如果常量未赋值,就是前一个元素值加1。第一个元素如果未赋值,就是0。如:

例:


  1. enum JiJie { Chun, Xia, Qiu, Dong }; //Chun值为0、Xia:1、Qiu:2、Dong:3

手动赋值例:


  1. enum JiJie { Chun, Xia=10, Qiu, Dong }; //Chun值为0、Xia:10、Qiu:11、Dong:12

手动赋值时部分资料上介绍,是将未赋值的元素从0开始标识。经vs2010测试发现是在前一个值基础加1,无论前一个值是自动赋值还是手动赋值。如果值十分重要,且枚举类型C语言是当作int处理,所以书写代码前可以用%d输出一下,确认编译器赋值方式。如果不想用编译器测试,也可以全部手动赋值。如果全不赋值,第一个元素为0,以后每个递增1,这个标准各个资料上均一致,经vs2010测试同样一致。

枚举类型定义格式如下:

enum 枚举类型名 枚举变量值

例:


  1. enum JiJie j ; //定义枚举类型JiJie变量j

枚举类型变量赋值时,只要将可能的值直接通过等号赋值运算符赋值给变量就行了,例:


  1. j = Chun ; //注意,定义枚举类型时,已经确定了Chu是个常量了,好比1,2,3,'a',2.5等也是常量一样

注意使用列表常量标识时,只需要写常量标识符即可,不需要枚举类型名点.常量标识符。

枚举类型变量也可定义时赋值,例子省略。

枚举类型值必须是定义列表范围内的值,这一条无论是C语言还是编译器,控制的并不严禁,下面的代码在很多编译器上可以编译成功:


  1. j = (enum JiJie)100 ; //将定义列表范围以外的值通过强制转换仍然可以赋值成功

多数编译器只要强制转换,就可以对枚举类型随意赋值了,甚至部分编译器支持枚举类型自增自减,所以使用时,请注意。如果不好控制,可以放弃使用枚举类型。

相比结构体、数组等,枚举类型实际开发中应用非常少。

由于从标准和设计初衷出发,枚举值是可列举的,所以如果让用户输入枚举类型,不合适,因为用户输入的内容不一定在定义范围之内。

由于枚举类型使用较少,大家熟悉一下即可,如果需要使用,可以反回来再查手册或教程。例:


  1. #include<stdio.h>
  2. int main( )
  3. {
  4. enum JiJie { Chun, Xia, Qiu, Dong }; //定义一个关于季节的枚举类型
  5. enum JiJie j = Xia; //定义变量并赋值
  6. switch(j)
  7. {
  8. case Chun: printf("春天");break;
  9. case Xia: printf("夏天");break;
  10. case Qiu: printf("秋天");break;
  11. case Dong: printf("冬天");break;
  12. }
  13. //由于枚举类型成员值是常量,所以可以加在case后面
  14. //从枚举类型设计初衷出发,枚举类型不会是定义范围以外的值,所以省略了default
  15. getchar( ) ; //使程序暂停一下
  16. return 0;
  17. }

效果图类似如下:

Pic

效果图非常简单,仅供参考。

作者:冥河 QQ:3304576112
交流QQ群:554701039 C语言讲课群
本教程内容由本站保留版权,请勿复制传播
抖音
©2015-2024 惧留孙网 juliusun.com

京ICP备15039193号-1

首页 教程 下载 文章 聊天 我的