枚举类型通常用来存放整形常量。可以使用enum关键字来创建一个"新的类型",用来表示一组关系比较密切的整形常量。

  可以这样声明:

enum spectrum { red,orange,yellow,green,blue,violet  };
enum spectrum color;

  第一条语句声明创建了spectrum 作为标记名,允许把enum spectrum作为一个类型名使用。第二条语句声明了将 color作为该类型的变量。在第一条语句中依次列举了spectrum 变量可能有的值,因此color的值可能是red,orange,yellow,green,blue,violet这些等。比如要给color赋值时,可以这样操作:

color = green;

下面使用整形来打印这些枚举类型的值。

 printf("%d %d %d %d %d %d\r\n",red,orange,yellow,green,blue,violet);

打印结果如下:

  通过打印的结果可以发现,枚举类型的默认值都是从0开始的,如果不想使用默认的值,也可以直接给枚举类型赋值。

enum spectrum { red = 10,orange,yellow,green,blue,violet };
printf("%d %d %d %d %d %d\r\n",red,orange,yellow,green,blue,violet);

  将第一个枚举常量的值修改为10,打印结果如下:

  这里只对第一个枚举常量赋值,但是后面的枚举常量的值会依次递增。继续修改代码如下:

enum spectrum { red = 1,orange,yellow,green = 10,blue,violet   };
printf("%d %d %d %d %d %d\r\n",red,orange,yellow,green,blue,violet);

  打印结果如下:

  通过打印结果可以发现,只要前面的枚举类型值发生了改变,那么后面紧跟着的枚举类型值就会自动加1。

  通过使用枚举类型,可以提高程序的可读性和维护性。比如下面的代码:

int main()
{enum spectrum { red,orange,yellow,green,blue,violet    };enum spectrum color;color = green;switch(color){case red:puts("color is red!");break;case orange:puts("color is orange!");break;case yellow:puts("color is yellow!");break;case green:puts("color is green!");break;case blue:puts("color is blue!");break;case violet:puts("color is violet!");break;}system("pause");return 0;
}

  通过枚举类型来表示使用的各种颜色,这样在阅读代码的时候,通过名称就可以清晰的看出所使用的颜色,如果将枚举类型改成用整数0、1、2、3来表示的话,代码阅读起来就比较困难,必须借助于注释才能明白代码的具体含义。

  当然也可以将枚举类型改成宏定义来实现,上面的代码可以修改如下:

#define red 0
#define orange 1
#define yellow 2
#define green 3
#define blue 4
#define violet 5int main()
{int color;color = green;switch(color){case red:puts("color is red!");break;case orange:puts("color is orange!");break;case yellow:puts("color is yellow!");break;case green:puts("color is green!");break;case blue:puts("color is blue!");break;case violet:puts("color is violet!");break;}system("pause");return 0;
}

  通过宏定义的方式也可以实现同样的功能,但是宏定义是代码看起来比较松散,而且定义的变量比较多,修改起来也比较麻烦。而且枚举变量还有一个优势就是可以进行自增或者自减运算。

int main()
{enum spectrum { red,orange,yellow,green,blue,violet    };int color;for(color = red; color<=violet; color++)switch(color){case red:puts("color is red!");break;case orange:puts("color is orange!");break;case yellow:puts("color is yellow!");break;case green:puts("color is green!");break;case blue:puts("color is blue!");break;case violet:puts("color is violet!");break;}system("pause");return 0;
}

  在循环中依次给color赋值,然后打印当前的颜色。接着color的值自增1,打印结果如下:

  通过自增或者自减的运算,使枚举类型应用起来更加灵活。

C语言学习笔记---枚举类型enum相关推荐

  1. c语言如何宏定义枚举型结构体,C语言学习笔记--枚举结构体

    枚举 枚举是一种用户定义的数据类型,它用关键字enum以如下语法格式来声明: enum 枚举类型名字 {名字0,名字1,...,名字n}: 枚举类型名字通常并不真的使用,要用的是大括号里面的名字,因为 ...

  2. C语言枚举类型通常用来干嘛,C语言学习:枚举类型是什么?

    前言 枚举(enum)类型是计算机编程语言中的一种数据类型.枚举类型:在实际问题中,有些变量的取值被限定在一个有限的范围内.例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等.如果把 ...

  3. c语言存储类型关键字作用,c语言学习笔记.关键字.存储类型关键字等

    关键字const 1.修饰变量. 修饰的对象为常量,只读. 2.修饰指针. const 也可以和指针变量一起使用,这样可以限制指针变量本身,也可以限制指针指向的数据. const 离变量名近就是用来修 ...

  4. C语言学习笔记06-占位符格式、C基本类型及逃逸字符一些细节(附介绍BCD码)

    主要整理有关占位符格式与逃逸字符的一些细节 朋友们,看栗子--"BCD解码" (文末附BCD码介绍) 一个BCD数的十六进制是0x12(对应二进制表示:0001 0010),它表达 ...

  5. c语言枚举类型enum用法参数,C语言枚举类型(Enum)

    在实际编程中,有些数据的取值往往是有限的,只能是非常少量的整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门课程等. 以每周七天为例, ...

  6. c枚举类型enum例题_C语言--enum,typedef enum 枚举类型详解

    原文:http://z515256164.blog.163.com/blog/static/32443029201192182854300/ 有改动 C语言详解 - 枚举类型 注:以下全部代码的执行环 ...

  7. C语言学习笔记-P1 初识C语言(2)

    C语言学习笔记-P1 初识C语言(2) C语言学习笔记-P1 初识C语言(2) 一.常量 1.字面常量 2.const修饰的常变量 3.#define定义的标识符常量 3.枚举常量 二.字符串+转义字 ...

  8. 史上最全C语言学习笔记

    最全C语言学习笔记 学习目标 学习编程最主要目标 分析问题的能力.构造算法的能力.编程的能力. 调试程序的能力. 学习方法手段 如何操作? 解题思路:重点要放在解题的思路上 一开始就要学会看懂程序,编 ...

  9. 嵌入式C语言——学习笔记

    嵌入式C语言--学习笔记 计算机程序语言的学习思路? GCC的使用及其常用选项介绍 gcc概述 C语言编译过程 C语言常见的错误 预处理的使用 宏展开下的 #.## C语言常用关键字及运算符操作 关键 ...

最新文章

  1. python logging 毫秒级别的时间打印
  2. Winform中DevExpress的TreeList的入门使用教程(附源码下载)
  3. [MS]Microsoft SQL Server 2008 R2 开发版/企业版/标准版
  4. python能和wincc一起用_python通过ado连接wincc数据库
  5. ubuntu检查端口是否开启_Ubuntu默认防火墙安装、启用、配置、端口、查看状态相关信息...
  6. 64位 linux 32位连接器,32位汇编程序在64位Ubuntu上的汇编和连接
  7. Spring IOC核心原理分析
  8. rt-n18u usb3.0 linux ex,2.4G王者 华硕 AUSU RT-N18U 评测
  9. ARMLINUX学习笔记(二)
  10. Eclipse创建一个JAVA WEB项目
  11. 阿里php开发规范,【PHP开发规范】老生常谈的PSR开发规范你懂多少?
  12. spring-session(一)揭秘续篇
  13. 微信小程序毕业设计 基于微信小程序评选投票系统开题报告
  14. CashFiesta 攻略
  15. secureCRT免密码登陆Linux
  16. 飞秋在使用高分辨率的显示器时字体太小,应该这样设置就和以前一样
  17. 最新各大互联网公司薪酬盘点!你想好去哪家了吗?
  18. vs2013右键菜单 0xC0000005: 读取位置 0x00000004 时发生访问冲突
  19. mysql 分段执行_mySql 分段查询
  20. php判断pad访问,JS判断是否手机或pad访问实现方法

热门文章

  1. 关于C#日期格式化问题
  2. oracle命中率sql语句
  3. Windows Server 2008 故障转移群集简介
  4. LINUX文件的压缩与打包
  5. ASP.NET的錯誤類型及錯誤處理方式
  6. BIM工程信息管理系统-详细设计
  7. 用canvas实现手写签名功能
  8. websocket handshake unexpected response code 404问题
  9. vue-cli代理开发
  10. CentOS7.2中使用Kubernetes(k8s)1.4.6源码搭建k8s容器集群环境