c语言枚举作为参数
导语:将变量定义为枚举类型,可以先定义一个枚举类型名称,然后说明该变量就是枚举类型。以下是C语言中枚举类型的知识,欢迎阅读:
在实际应用中,有些变量只有很少的可能值。如果一个人的性别只有两个可能值,那么一周就只有七个可能值。在C语言中,具有特殊值的变量可以定义为枚举类型。所谓枚举是指逐个枚举变量的值,变量被限定在枚举值的范围内。
例如:
枚举工作日{周日、周一、周二、周三、周四、周五、周六};
定义枚举类型名称enum weekday,然后将变量定义为枚举类型。例如:
枚举工作日;
当然,你也可以直接定义枚举类型变量。例如:
枚举工作日{星期日,星期一,星期二,星期三,星期四,星期五,星期六}日;
其中sum、mon、…、sat等称为枚举元素或枚举常数,是用户自定义的标识符。
以下几点需要说明。
(1)枚举元素不是变量,而是常数,所以枚举元素也叫枚举常数。枚举元素不能赋值,因为它们是常数。
(2)枚举元素是常量,它们有值。c语言使它们的值为,1,2,...按照编译时定义的顺序。
在上面的描述中,sun的值是0,mon的值是1,而...…sat是6,如果有赋值语句的话。
日=周一;
day变量的值是1。当然,这个变量值是可以输出的。例如:
printf ("%d ",天);
将输出整数1。
如果在定义枚举类型时指定元素的值,还可以更改枚举元素的值。例如:
枚举工作日{星期日=7,星期一=1,星期二,星期三,星期四,星期五,星期六}日;
此时,sun是7,mon是1,然后元素依次加1,所以sat是6。
③枚举值可以用来做判断。例如:
if (day==mon) {…}
if (daymon) {…}
枚举值的比较规则是:按照描述时的序号进行比较。如果在描述它们时没有人为指定,则第一个枚举元素的值被视为0。比如monsun satfri。
c语言课程?216?
④整数不能直接赋给枚举变量,必须强制类型转换赋值。例如:
day =(enum weekday)2;
这种赋值意味着序号为2的枚举元素被赋值给day,相当于workday = tue
【例11.6】从键盘输入一个整数,显示该整数对应的枚举常数的英文名称。
#包括
void main()
{
枚举工作日{星期日,星期一,星期二,星期三,星期四,星期五,星期六}日;
int k;
printf("输入一个数字(0-6)");
scanf("%d ",k);
day =(enum weekday)k;
开关(日)
{
案例孙:printf(" Sunday/n ");打破;
case mon:printf(" Monday/n ");打破;
案例tue:printf(" Tuesday/n ");打破;
案例wed: printf("星期三/n ");打破;
case thu: printf("星期四/n ");打破;
案例fri:printf(" Friday/n ");打破;
案例sat:printf(" satday/n ");打破;
默认值:printf("输入错误/n ");打破;
}
}
程序的运行结果是:
输入一个数字(0 - 6)1
星期一
在这个程序中,可以比较枚举常数和枚举变量,但是要输出与枚举常数对应的英文单词,不能使用下面的语句:
printf(" %s ",mon);
因为枚举常数mon是整数值,不是字符串。
使用枚举变量时,主要关心的不是其值的大小,而是它所代表的状态。
注意:以下所有代码的执行环境都是VC 6.0。
在程序中,你可能需要为一些整数定义一个别名。我们可以使用预处理指令#define来完成这项工作。您的代码可能是:
#定义MON 1
#定义TUE新协议
#定义WED 3
#定义THU 4
#定义星期五5
#定义SAT 6
#定义SUN 7
这里,我们定义了一个新的数据类型,希望它能做同样的工作。这种新的数据类型称为枚举。
1.定义新的数据类型-枚举。
下面的代码定义了这个新的数据类型-枚举。
枚举日
{
周一=1,TUE,周三,THU,周五,周六,周日
};
(1)枚举是一个集合,集合中的元素(枚举成员)命名为整数常量,用逗号分隔。
(2)日是一个标识符,可以看作是这个集合的名称,是可选项,也就是可有可无项。
(3)第一个枚举成员的默认值为整数0,后续枚举成员的值均为前一个成员加1。
(4)可以人为设置枚举成员的值,从而自定义一个整数范围。
(5)枚举是预处理指令#define的替代。
(6)类型定义是分号;结束。
2.使用枚举类型声明变量。
新的数据类型定义完成后,就可以使用了。我们见过最基本的数据类型,比如integer int,单精度浮点float,双精度浮点double,char,short integer short等等。用这些基本数据类型声明变量通常如下:
char a;//变量A的类型都是字符char。
char字母;
int x,
y,
z;//变量x,y,z的类型都是整型int。
int数;
双m,n;
双重结果;//变量结果的类型是双精度浮点double。
由于枚举也是一种数据类型,所以它也可以像基本数据类型一样声明变量。
方法一:枚举类型的定义与变量的声明分离。
枚举日
{
周一=1,TUE,周三,THU,周五,周六,周日
};
昨天是枚举日;
今天的枚举日;
明天是枚举日;//明天变量的类型是enum DAY。
枚举日good_day,bad _ day//变量good_day和bad_day的类型是枚举enum DAY。
方法2:类型定义和变量声明同时进行:
Enum //与第一个定义不同,这里省略了符号DAY,这是允许的。
{
星期六,
星期日= 0,
星期一,
星期二,
星期三,
星期四,
星期五
} workday//变量workday的类型是enum DAY。
枚举周{周一=1,周二,周三,周四,Fri周六,周日}天;//变量days的类型是enum week。
枚举布尔值{ false,true } end_flag,match_flag。//定义枚举类型并声明两个枚举变量。
方法三:使用typedef关键字将枚举类型定义为别名,并使用该别名声明变量:
typedef枚举工作日
{
星期六,
星期日= 0,
星期一,
星期二,
星期三,
星期四,
星期五
} workday//workday这里是enum workday的别名。
今天工作日,明天工作日;//今天和明天的变量类型为枚举workday,即enum workday。
enum workday中的Workday可以省略:
typedef枚举
{
星期六,
星期日= 0,
星期一,
星期二,
星期三,
星期四,
星期五
} workday//workday这里是enum workday的别名。
今天工作日,明天工作日;//今天和明天的变量类型为枚举workday,即enum workday。
c语言枚举 很明显,实践检验真理,你的代码写得这么清楚,网上说枚举值只能给枚举变量是不对的,你这里没把类型强制转换也没问题。
网上的说法可能不清楚。也许他的意思是列举变量。既然你把它定义为一个枚举变量,那就意味着你要把这个变量的值控制在这个枚举范围内。如果赋一个不同的int值有什么意义呢?
还有一种可能是网上想表明,如果不进行强制类型转换,你会报警,但是编制会通过。
C语言参数的枚举 函数类型是返回值类型。如果没有显式指定,则默认为int。但是这个规则已经被大多数编译器抛弃了,有些编译器甚至在没有定义返回类型的情况下直接报错。
28
枚举类型,如果有指定值比如=xxx,那么这个值就是指定值。否则,在前一个基础上加一。
所以Ada=100,COBOL=101,Fortran = 102。
选c。
C语言中枚举可以作为函数的参数吗? 能
#包含" stdafx.h "
#包含stdio.h
枚举Enum_Struct
{
ENUM_NUM0,
ENUM_NUM1
ENUM_NUM2,
ENUM_NUM3,
枚举_数字4
};
void Func(Enum_Struct *err)
{
if((*err) == ENUM_NUM3)
{
printf("%d\n ",ENUM _ num 3);
};
}
void main()
{
Enum _ Struct obj = ENUM _ NUM3
func(obj);
}
最后更新于 2023-10-07 22:24:37 并被添加「」标签,已有 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
相关文章