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);

}

相关文章

发表新评论