1、定义:
枚举就是一一例举,比如性别有:男,女,保密,三原色有:红,绿,蓝三种,将这些可能取值放入枚举类型中
enum Sex//枚举类型
{
male,
female, // 枚举的可能取值
secret
};
enum Color//枚举类型
{
red,
green, // 枚举的可能取值
blue
};
2、枚举的理解:
int main()
{
enum Sex s1= male;
s1 = female;//也可以改变变量的值
return 0;
}
【1】枚举常量默认值是从0开始的:
【2】然而也可以改变其中的值,虽然是枚举常量,但也是有一个初始值的
1、若改变的是第一个数据,则从第一个数据开始依次+1
2、若改变的不是第一个数据,则第一个数据从0开始往后+1,后面的数据从改变数据开始向后依次+1
情形1:
情形2:
3、枚举的优点
【1】增加了代码的可读性和可维护性
在三字棋的实现程序中,我们可以通过枚举常量替换要选择的数字,增加可读性
//test.c
#include"Contact.h"
void menu()
{
printf("-----------------------------\n");
printf("-----1.Delect 2.Search -----\n");
printf("-----3.Modify 4.Show -----\n");
printf("-----5.Add 0.exit -----\n");
printf("-----------------------------\n");
}
enum Con
{
Exit,
delect,
search,
modify,
show,
add
};
int main()
{
int input = 0;
Node pc;
Init(&pc);
//加载通讯录信息
loadContact(&pc);
do
{
menu();
printf("请输入选项->");
scanf("%d", &input);
switch (input)
{
case delect:
Delect(&pc);
break;
case search:
Search(&pc);
break;
case modify:
Modify(&pc);
break;
case show:
Show(&pc);
break;
case add:
Add(&pc);
break;
case Exit:
saveContact(&pc);
printf("退出程序\n");
break;
default:
printf("选择错误,请重新选择\n");
}
} while (input);
return 0;
}
【2】和#define定义的标识符相比,有类型检查,更为严谨
这两种写法都是可行的,但用枚举来写都有类型(枚举类型),会有类型检查;而用#define定义的没有类型,直接进行替换,因此没有类型检查
【3】可防止命名污染
枚举常量可以整体定义
【4】便于调试
枚举可通过调试观察
【5】方便使用,一次可以定义多个常量
4、枚举的使用
enum Sex
{
male=3,
female=5,
secret=9
};
int main()
{
enum Sex s = female;
//用枚举常量给枚举变量赋值才不会出现类型差异
s = male;
return 0;
}