常量符号化

用符号而不是具体的数字来表示程序中的数字

一、 枚举

用枚举而不是定义独立的const int变量

  1. 枚举是一种用户定义的数据类型,它用关键字enum如以下语句来声明
enum 枚举类型名字 {名字0 ,、、、 , 名字n};
  1. 枚举类型名字通常并不真的使用,要用的是在大括号里的名字,因为它们就是常量符号,他们的类型是int,值则依次从0到,如:
enum colors {red , yellow , green};
  1. 就创建了三个常量,red的值0,yellow是1,green是2
  2. 当需要一些可以排列起来的常量值时,定义枚举的意义就是给了这些常量值名字
#include <stdio.h>

enum color {red , yellow , green};

void f(enum color c);

int main(void)
{
enum color t = yellow; // scanf("%d" , &t);
f(t); return 0;
} void f(enum color c)
{
printf("%d\n", c);
} // 1
// 因为yellow的下标是1

注意:

  1. 枚举量可以作为值
  2. 枚举类型可以跟上enum作为类型
  3. 但是实际上是以整数来做内部计算和外部输入输出的

二、自动计数的枚举

这样需要遍历所有的枚举量或者需要建立一个用枚举量做下标的数组的时候很方便

enum COLOR {RED , YELLOW , GREEN , NumCOLLORS};

int main(int argc, char const *argv[])
{
int color = -1; char *ColorNames[NumCOLLORS] = {
"red" , "yellow" , "green"
};
char *colorName = NULL; printf("请输入你喜欢的颜色代码:\n");
scanf("%d" , &color); if(color >= 0 && color <NumCOLLORS){
colorName = ColorNames[color];
}else{
colorName = "nuknow";
} printf("你喜欢的颜色是%s\n", colorName); return 0;
} //请输入你喜欢的颜色代码:
//2
//你喜欢的颜色是green

三、枚举量

  1. 声明枚举量的时候可以指定值
  2. enum COLOR {RED=1 , YELLOW , GREEN = 5 , NumCOLLORS};
enum COLOR {RED=1 , YELLOW , GREEN = 5 , NumCOLLORS};

int main(int argc, char const *argv[])
{
printf("code for GREEN is %d\n" , GREEN);
return 0;
}
// code for GREEN is 5

四、枚举只是int

即使给枚举类型的变量赋不存在的整数值也没有任何error

enum COLOR {RED=1 , YELLOW , GREEN = 5 , NumCOLLORS};

int main(int argc, char const *argv[])
{
enum COLOR color = 0;
printf("code for GREEN is %d\n" , GREEN);
printf("and color is %d\n", color);
return 0;
}
// code for GREEN is 5
// and color is 0

枚举

  1. 虽然枚举类型可以当作类型使用,但是实际上很少使用
  2. 如果有意义上排比的名字,用枚举比const int 方便
  3. 枚举比宏好,因为枚举有int类型

C语言入门-枚举的更多相关文章

  1. Swift语言入门之旅

    Swift语言入门之旅  学习一门新的计算机语言,传统来说都是从编写一个在屏幕上打印"Hello world"的程序開始的.那在 Swift,我们使用一句话来实现它: printl ...

  2. c语言入门经典(第5版)

    文章转载:http://mrcaoyc.blog.163.com/blog/static/23939201520159135915734 文件大小:126MB 文件格式:PDF    [点击下载] C ...

  3. C语言学习书籍推荐《C语言入门经典(第5版)》下载

    霍尔顿 (Ivor Horton) (作者), 杨浩 (译者) 下载地址:点我 C语言是每一位程序员都应该掌握的基础语言.C语言是微软.NET编程中使用的C#语言的基础:C语言是iPhone.iPad ...

  4. Go 语言入门(一)基础语法

    写在前面 在学习 Go 语言之前,我自己是有一定的 Java 和 C++ 基础的,这篇文章主要是基于A tour of Go编写的,主要是希望记录一下自己的学习历程,加深自己的理解 Go 语言入门(一 ...

  5. 《JavaScript语言入门教程》记录整理:运算符、语法和标准库

    目录 运算符 算数运算符 比较运算符 布尔运算符 二进制位运算符 void和逗号运算符 运算顺序 语法 数据类型的转换 错误处理机制 编程风格 console对象和控制台 标准库 Object对象 属 ...

  6. 《JavaScript语言入门教程》记录整理:面向对象

    目录 面向对象编程 实例对象与 new 命令 this关键字 对象的继承 Object对象的方法 严格模式(strict mode) 本系列基于阮一峰老师的<JavaScrip语言入门教程> ...

  7. GO 语言入门(一)

    GO 语言入门(一) 本文写于 2020 年 1 月 18 日 Go 由 Google 工程师 Robert Griesemer,Rob Pike 和 Ken Thompson 设计的一门编程语言,第 ...

  8. 踢爆IT劣书出版黑幕——由清华大学出版社之《C语言入门很简单》想到的(1)

    1.前言与作者 首先声明,我是由于非常偶然的机会获得<C语言入门很简单>这本书的,绝对不是买的.买这种书实在丢不起那人. 去年这书刚出版时,在CU论坛举行试读推广,我当时随口说了几句(没说 ...

  9. 我为什么反对推荐新人编程C/C++语言入门?

    虽然我接触编程以及计算机时间比较早,但是正式打算转入程序员这个行当差不多是大学第四年的事情 从03年接触计算机,07年开始接触计算机编程, 期间接触过的技术包括 缓冲区溢出(看高手写的shellcod ...

随机推荐

  1. 你真的了解JSON吗?

    一.JSON——JavaScript Object Notation JSON 是一种语法用来序列化对象.数组.数值.字符串.布尔值和null .它基于 JavaScript 语法,但与之不同:一些J ...

  2. POJ1704 Georgia and Bob(Nim博弈变形)

    Georgia and Bob Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 14312   Accepted: 4840 ...

  3. 正则去掉html标签之间的空格、换行符、tab符,但是保留html标签内部的属性空格

    今天遇到一个比较少见的去空格: 正则去掉html标签之间的空格.换行符.tab符,但是保留html标签内部的属性空格 JS 举例: "<a href='baidu.com' name= ...

  4. 轻轻松松学会 DRF Django REST framework

    据我了解,目前的IT行业的大部分后端开发,都是需要进行前后端分离的,而前后端分类必不可少的是rest 规范,以下是django rest framework的学习路径: DRF Django REST ...

  5. 想要金九银十面试通关,不懂 Java多线程肯定是不行的!

    作者 | 纳达丶无忌 如果对什么是线程.什么是进程仍存有疑惑,请先 Google 之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用 CPU 的资源,因为所有的多线程代码都 ...

  6. .NET Core环境变量和用户秘钥实现开发中的数据安全

    目录 一.注入 IConfiguration 二.从配置文件 appsettings.json 中获取环境变量 三.从项目中获取环境变量 四.用户秘钥设置环境变量 前言:有很多人将秘钥,数据库连接字符 ...

  7. IUSEP研修报告

    目录 Introduction Alberta - Edmonton University of Alberta IUSEP Schoolwork and Project Principle of F ...

  8. GitHub 上的 12306 抢票神器,助力回家过年

    又到周末了,不过本周末有些略微的特殊. 距离每年一次的全球最大规模的人类大迁徙活动已经只剩下一个多月了,各位在外工作一年的小伙伴大多数人又要和小编一样摩拳擦掌的对待史上最难抢的抢票活动. 然鹅,身为一 ...

  9. c++之程序流程控制

    三种程序运行结构:顺序结构.选择结构.循环结构. 顺序结构:程序按顺序执行,不发生跳转. 选择结构:依据条件执行不同的语句. 循环结构:判断条件是否满足,循环多次执行某段代码. 一.选择结构 //单行 ...

  10. Openresty快速安装

    1. 场景描述 软件老王帮同事初始化服务器,需要安装下Openresty,安装过好多次,但是命令还是记不住,这次又安装记录了下,直接按下面的命令next-next就行了,2-3分钟左右就ok了. 2. ...