‘壹’ c语言中关于枚举类型
1.enum
枚举的定义
枚举类型定义的一般形式为:
enum 枚举名{ 枚举值表 };
在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。
例如:
该枚举名为weekday,枚举值共有7个,即一周中的七天。凡被说明为weekday类型变量的取值只能是七天中的某一天。
2.
枚举变量的说明
如同结构和联合一样,枚举变量也可用不同的方式说明,即先定义后说明,同时定义说明或直接说明。
设有变量a,b,c被说明为上述的weekday,可采用下述任一种方式:
enum weekday{ sun,mou,tue,wed,thu,fri,sat };
enum weekday a,b,c;
或者为:
enum weekday{ sun,mou,tue,wed,thu,fri,sat }a,b,c;
或者为:
enum { sun,mou,tue,wed,thu,fri,sat }a,b,c;
3、枚举类型变量的赋值和使用
枚举类型在使用中有以下规定:
a.
枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。
例如对枚举weekday的元素再作以下赋值:
sun=5;
mon=2;
sun=mon;
都是错误的。
b.
枚举元素本身由系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2…。如在weekday中,sun值为0,mon值为1,…,sat值为6。
int main(){
enum weekday
{ sun,mon,tue,wed,thu,fri,sat } a,b,c;
a=sun;
b=mon;
c=tue;
printf("%d,%d,%d",a,b,c);
return 0;
}
说明:
只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。如:
a=sum;
b=mon;
是正确的。而:
a=0;
b=1;
是错误的。如一定要把数值赋予枚举变量,则必须用强制类型转换。
如:a=(enum
weekday)2;
其意义是将顺序号为2的枚举元素赋予枚举变量a,相当于:
a=tue;
还应该说明的是枚举元素不是字符常量也不是字符串常量,使用时不要加单、双引号。
int main(){
enum body
{ a,b,c,d } month[31],j;
int i;
j=a;
for(i=1;i<=30;i++){
month[i]=j;
j++;
if (j>d) j=a;
}
for(i=1;i<=30;i++){
switch(month[i])
{
case a:printf(" %2d %c\t",i,'a'); break;
case b:printf(" %2d %c\t",i,'b'); break;
case c:printf(" %2d %c\t",i,'c'); break;
case d:printf(" %2d %c\t",i,'d'); break;
default:break;
}
}
printf("\n");
return 0;
}
‘贰’ C语言:输出枚举型变量的值,应该用什么格式说明
在c语言中,枚举变量,即以enum关键字定义的变量,是按照整型或者无符号整型来处理的。
1
如果在枚举变量中,不存在负值,如
enum
test
{
a,
b,
};
这样的定义,系统会将该枚举变量按照无符号整型处理,即unsigned
int
型。输出的时候使用%u格式即可。
enum
test
t
=
a;
printf("%u",
t);
2
如果在枚举变量中存在负值,那么系统按整型处理,即int型。如定义
enum
test
{
a=-199,
b,
};
输出时,需要用%d格式:
enum
test
t
=
a;
printf("%d",
t);
3
由于枚举变量在书写时,一般不会太大,很少有在没有负数的时候,即按照无符号数处理的时候超出有符号数所能表示的正数范围,即一般不会把最高位置一,所以大多数情况下,用%d输出都是没问题的。
‘叁’ C语言中的枚举类型
如果一个变量只有几种可能的值,则可以定义为 枚举类型 。所谓“枚举”是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。
声明枚举类型用 enum 开头。例如:
声明了一个枚举类型enum weekday,则可以用此类型来定义变量。例如:
也可以直接定义枚举变量,例如:
其中sun、mon、…、sat称为 枚举元素 或 枚举常量 。
说明:
1、在C编译中,对枚举元素按常量处理,故称为 枚举常量 。它们不是变量,不能进行赋值。例如 sun = 7; mon = 1; 是错误的。
2、枚举元素作为常量,是有值的。C语言编译按定义时的顺序使它们的值为0、1、2……也可以在定义时,指定枚举元素的值,例如:
3、枚举值可以用来作判断比较。例如:
4、一个证书不能直接赋值给一个枚举变量。例如 workday=1; 是错误的。它们属于不同的类型。应该先进性强制类型转换,然后才能赋值。例如:
相当于将序号为2的枚举元素赋值给workday,相当于
‘肆’ enum在c语言中怎么用
1.
enum是枚举变量
一般的定义方式如下:
enum
enum_type_name
{
ENUM_CONST_1,
ENUM_CONST_2,
...
ENUM_CONST_n
}
enum_variable_name;
注意:enum_type_name
是自定义的一种数据数据类型名,而enum_variable_name
为enum_type_name类型的一个变量,也就是我们平时常说的枚举变量。实际上enum_type_name类型是对一个变量取值范围的限定,而花括号内是它的取值范围,即enum_type_name
类型的变量enum_variable_name
只能取值为花括号内的任何一个值,如果赋给该类型变量的值不在列表中,则会报错或者警告。ENUM_CONST_1、ENUM_CONST_2、...、ENUM_CONST_n,这些成员都是常量,也就是我们平时所说的枚举常量(常量一般用大写)。
2.
enum
变量类型还可以给其中的常量符号赋值,如果不赋值则会从被赋初值的那个常量开始依次加1,如果都没有赋值,它们的值从0
开始依次递增1。如分别用一个常数表示不同颜色:
enum
Color
{
GREEN
=
1,
RED,
BLUE,
GREEN_RED
=
10,
GREEN_BLUE
}ColorVal;
其中各常量名代表的数值分别为:
GREEN
=
1
RED
=
2
BLUE
=
3
GREEN_RED
=
10
GREEN_BLUE
=
11
3.
在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能超过定义的范围。应该说明的是,枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型。
‘伍’ C语言枚举类型,知道这些你就会了
在实际编程中,有些数据的取值往往是有限的,只能是非常少量的整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门课程等。
以每周七天为例,我们可以使用 #define 命令来给每天指定一个名字:
#define 命令虽然能解决问题,但也带来了不小的副作用,导致宏名过多,代码松散,看起来总有点不舒服。C语言提供了一种 枚举(Enum)类型 ,能够列出所有可能的取值,并给它们取一个名字。
enum 是一个新的关键字,专门用来定义枚举类型,这也是它在C语言中的唯一用途; typeName 是枚举类型的名字; valueName1, valueName2, valueName3, ...... 是每个值对应的名字的列表。注意最后的 ; 不能少。
例如,列出一个星期有几天:
可以看到,我们仅仅给出了名字,却没有给出名字对应的值,这是因为枚举值默认从 0 开始,往后逐个加 1(递增);也就是说,week 中的 Mon、Tues ...... Sun 对应的值分别为 0、1 ...... 6。
我们也可以给每个名字都指定一个值:
更为简单的方法是只给第一个名字指定值:
这样枚举值就从 1 开始递增,跟上面的写法是等效的。
枚举是一种类型,通过它可以定义枚举变量:
也可以在定义枚举类型的同时定义变量:
有了枚举变量,就可以把列表中的值赋给它:
或者:
Mon、Tues、Wed 这些名字都被替换成了对应的数字。这意味着,Mon、Tues、Wed 等都不是变量,它们不占用数据区(常量区、全局数据区、栈区和堆区)的内存,而是直接被编译到命令里面,放到代码区,所以不能用 & 取得它们的地址。这就是枚举的本质。
枚举类型变量需要存放的是一个整数,它的长度和 int 相同。
‘陆’ enum在c语言中怎么用 (枚举型)
(3) 第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。 (4) 可以人为设定枚举成员的值,从而自定义某个范围内的整数。 (5) 枚举型是预处理指令#define的替代。 (6) 类型定义以分号;结束。定义枚举类型 enum YOURENUMTYPE{ID1,//如果不额外指定则第一个标识等于整数0,后续依次加1ID2, ID3=7, IDn//最后一个标识符后面没有逗号 };//注意一定要加上这个分号定义枚举变量 enum YOURENUMTYPE varname; 给枚举变量赋值 varname = IDx;举个完整的例子enum FRUIT{APPLE, PEAR, ORANGE, PEACH, GRAPE, BANANA};enmu FRUIT myfruit = PEACH; 1举个例子: 学生 类分大学生 高中 初中小学生 你就可以这么做 enum student{colleage,high,middle,junior} //小明是个大学生 student xiaoming=colleage;//判断小刚是不是高中生
‘柒’ c语言枚举用法
一、对枚举型的变量赋值。
实例将枚举类型的赋值与基本数据类型的赋值进行了对比:
方法1:先声明变量,再对变量赋值
#include<stdio.h>
/*定义枚举类型*/
enumDAY{MON=1,TUE,WED,THU,FRI,SAT,SUN};
voidmain()
{
/*使用基本数据类型声明变量,然后对变量赋值*/
intx,y,z;
x=10;
y=20;
z=30;
/*使用枚举类型声明变量,再对枚举型变量赋值*/
enumDAYyesterday,today,tomorrow;
yesterday=MON;
today=TUE;
tomorrow=WED;
printf("%d%d%d ",yesterday,today,tomorrow);
}
方法2:声明变量的同时赋初值
#include<stdio.h>
/*定义枚举类型*/
enumDAY{MON=1,TUE,WED,THU,FRI,SAT,SUN};
voidmain()
{
/*使用基本数据类型声明变量同时对变量赋初值*/
intx=10,y=20,z=30;
/*使用枚举类型声明变量同时对枚举型变量赋初值*/
enumDAYyesterday=MON,
today=TUE,
tomorrow=WED;
printf("%d%d%d ",yesterday,today,tomorrow);
}
方法3:定义类型的同时声明变量,然后对变量赋值。
#include<stdio.h>
/*定义枚举类型,同时声明该类型的三个变量,它们都为全局变量*/
enumDAY{MON=1,TUE,WED,THU,FRI,SAT,SUN}yesterday,today,tomorrow;
/*定义三个具有基本数据类型的变量,它们都为全局变量*/
intx,y,z;
voidmain()
{
/*对基本数据类型的变量赋值*/
x=10;y=20;z=30;
/*对枚举型的变量赋值*/
yesterday=MON;
today=TUE;
tomorrow=WED;
printf("%d%d%d ",x,y,z);//输出:102030
printf("%d%d%d ",yesterday,today,tomorrow);//输出:123
}
方法4:类型定义,变量声明,赋初值同时进行。
#include<stdio.h>
/*定义枚举类型,同时声明该类型的三个变量,并赋初值。它们都为全局变量*/
enumDAY
{
MON=1,
TUE,
WED,
THU,
FRI,
SAT,
SUN
}
yesterday=MON,today=TUE,tomorrow=WED;
/*定义三个具有基本数据类型的变量,并赋初值。它们都为全局变量*/
intx=10,y=20,z=30;
voidmain()
{
printf("%d%d%d ",x,y,z);//输出:102030
printf("%d%d%d ",yesterday,today,tomorrow);//输出:123
}
2、对枚举型的变量赋整数值时,需要进行类型转换。
#include<stdio.h>
enumDAY{MON=1,TUE,WED,THU,FRI,SAT,SUN};
voidmain()
{
enumDAYyesterday,today,tomorrow;
yesterday=TUE;
today=(enumDAY)(yesterday+1);//类型转换
tomorrow=(enumDAY)30;//类型转换
//tomorrow=3;//错误
printf("%d%d%d ",yesterday,today,tomorrow);//输出:2330
}
3、使用枚举型变量
#include<stdio.h>
enum
{
BELL='a',
BACKSPACE='',
HTAB=' ',
RETURN=' ',
NEWLINE=' ',
VTAB='v',
SPACE=''
};
enumBOOLEAN{FALSE=0,TRUE}match_flag;
voidmain()
{
intindex=0;
intcount_of_letter=0;
intcount_of_space=0;
charstr[]="I'mElyefod";
match_flag=FALSE;
for(;str[index]!='