网站优化含义,南宁市建筑规划设计集团有限公司,浙江外发加工网,装修设计学校排行榜枚举详解 语法格式使用枚举类型对变量进行声明枚举声明的注意事项枚举变量的赋值使用案例综合使用 在程序中#xff0c;可能需要为某些整数定义一个别名#xff0c;我们可以利用预处理指令#define来完成这项工作。
#define MON 1
#define TUE 2
#define WED 3
#define… 枚举详解 语法格式使用枚举类型对变量进行声明枚举声明的注意事项枚举变量的赋值使用案例综合使用 在程序中可能需要为某些整数定义一个别名我们可以利用预处理指令#define来完成这项工作。
#define MON 1
#define TUE 2
#define WED 3
#define THU 4
#define FRI 5
#define SAT 6
#define SUN 7对此C语言提供了更好的方式枚举类型enumerated type
可以用枚举类型enumerated type声明符号名称来表示整型常量。使用enum关键字可以创建一个新“类型”并指定它可具有的值。枚举类型的目的是提高程序的可读性。它的语法与结构的语法相同。
注实际上enum 常量是int类型因此只要能使用int类型的地方就可以使用枚举类型
语法格式
enum 枚举类型标识名 {枚举成员1 枚举成员2, … , 枚举成员n};
enum DAY {MON, TUE, WED, THU, FRI, SAT, SUN};
enum spectrum {red 1, orange, yellow, green, blue, violet};enum DAY COLOR MON;
enum spectrum color red;printf(%d\n, COLOR); // 0
printf(%d\n, color); // 1(1) 枚举型是一个集合集合中的元素(枚举成员)是一些命名的整型常量元素之间用逗号,隔开。
(2) DAY, spetrum 是一个标识符可以看成这个集合的名字是一个可选项即是可有可无的项。
(3) 第一个枚举成员的默认值为整型的0后续枚举成员的值在前一个成员上加1。
(4) 可以人为设定枚举成员的值从而自定义某个范围内的整数。
(5) 枚举型是预处理指令#define的替代。
(6) 类型定义以分号;结束。
使用枚举类型对变量进行声明
方法一、枚举类型的定义和变量的声明分开
enum DAY
{MON1, TUE, WED, THU, FRI, SAT, SUN
};enum DAY tomorrow; //变量tomorrow的类型为枚举型enum DAY
enum DAY good_day, bad_day; //变量good_day和bad_day的类型均为枚举型enum 方法二类型定义与变量声明同时进行
enum //跟第一个定义不同的是此处的标号DAY省略这是允许的。
{saturday,sunday 0,monday,tuesday,wednesday,thursday,friday
} workday; //变量workday的类型为枚举型enum DAYenum BOOLEAN { false, true } end_flag, match_flag;
//定义枚举类型并声明了两个枚举型变量 end_flag, match_flag方法三用typedef关键字将枚举类型定义成别名并利用该别名进行变量声明
typedef enum workday
{saturday,sunday 0,monday,tuesday,wednesday,thursday,friday
} workday;
//此处的workday为枚举型enum workday的别名workday today, tomorrow;
// 变量today和tomorrow的类型为枚举型workday也即enum workday
// enum workday中的workday可以省略也可以用这种方式
typedef enum workday
{saturday,sunday 0,monday,tuesday,wednesday,thursday,friday
};workday today, tomorrow;
//变量 today和 tomorrow的类型为枚举型workday也即enum workday枚举声明的注意事项
注意同一个程序中不能定义同名的枚举类型不同的枚举类型中也不能存在同名的命名常量。错误示例如下所示
错误声明一存在同名的枚举类型
typedef enum
{wednesday,thursday,friday
} workday;typedef enum WEEK
{saturday,sunday 0,monday,
} workday;// 定义了两个相同的枚举类型 workday错误声明二存在同名的枚举成员
typedef enum
{wednesday,thursday,friday
} workday_1;typedef enum WEEK
{wednesday,sunday 0,monday,
} workday_2;//在枚举类型 workday_1 与 枚举类型 workday_2中 都有枚举成员 wednesday注在同一个程序中不能定义相同的枚举类型名以及所有的枚举成员不能相同使得枚举类型名可以不定义。
枚举变量的赋值
(1) 默认情况下枚举列表中的常量都被赋予0、1、2等。因此下面的声明中nina的值是3 enum kids {nippy, slats, skippy, nina, liz};
(2) 在枚举声明中可以为枚举常量指定整数值 enum levels {low 100, medium 500, high 2000};
(3) 如果只给一个枚举常量赋值没有对后面的枚举常量赋值那么后面的 常量会被赋予后续的值。
例如假设有如下的声明 enum feline {cat, lynx 10, puma, tiger};
那么cat的值是0默认lynx、puma和tiger的值分别是10、11、12。
使用案例
枚举类型的目的是为了提高程序的可读性和可维护性
一类型定义变量声明赋初值同时进行。
#include stdio.h/* 定义枚举类型同时声明该类型的三个变量并赋初值。它们都为全局变量 */
enum DAY
{MON1, TUE,WED,THU,FRI,SAT,SUN
}
yesterday MON, today TUE, tomorrow WED;/* 定义三个具有基本数据类型的变量并赋初值。它们都为全局变量 */
int x 10, y 20, z 30;void main()
{printf(%d %d %d \n, x, y, z); //输出10 20 30printf(%d %d %d \n, yesterday, today, tomorrow); //输出1 2 3
}#includestdio.henum
{BELL \a,BACKSPACE \b,HTAB \t,RETURN \r,NEWLINE \n,VTAB \v,SPACE
};enum BOOLEAN { FALSE 0, TRUE } match_flag;void main()
{int index 0;int count_of_letter 0;int count_of_space 0;char str[] Im Ely efod;match_flag FALSE;for(; str[index] ! \0; index)if( SPACE ! str[index] )count_of_letter;else{match_flag (enum BOOLEAN) 1;count_of_space;}printf(%s %d times %c, match_flag ? match : not match, count_of_space, NEWLINE);printf(count of letters: %d %c%c, count_of_letter, NEWLINE, RETURN);
}
枚举类型与sizeof运算符
#include stdio.henum escapes
{BELL \a,BACKSPACE \b,HTAB \t,RETURN \r,NEWLINE \n,VTAB \v,SPACE
};enum BOOLEAN { FALSE 0, TRUE } match_flag;void main()
{printf(%d bytes \n, sizeof(enum escapes)); //4 bytesprintf(%d bytes \n, sizeof(enum BOOLEAN)); //4 bytesprintf(%d bytes \n, sizeof(match_flag)); //4 bytesprintf(%d bytes \n, sizeof(SPACE)); //4 bytesprintf(%d bytes \n, sizeof(FALSE)); //4 bytesprintf(%d bytes \n, sizeof(0)); //4 bytes
}无论是枚举类型、枚举成员、枚举类型变量 都是四个字节int类型。
综合使用
(一)、在switch语句 中可以把枚举常量作为标签
#includestdio.henum Season
{spring, summer100, fall96, winter
};typedef enum
{Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
}
Weekday;void main()
{/* Season */printf(%d \n, spring); // 0printf(%d, %c \n, summer, summer); // 100, dprintf(%d \n, fallwinter); // 193Season mySeasonwinter;if(wintermySeason)printf(mySeason is winter \n); // mySeason is winterint x100;if(xsummer)printf(x is equal to summer\n); // x is equal to summerprintf(%d bytes\n, sizeof(spring)); // 4 bytes/* Weekday */printf(sizeof Weekday is: %d \n, sizeof(Weekday)); //sizeof Weekday is: 4Weekday today Saturday;Weekday tomorrow;if(today Monday)tomorrow Tuesday;elsetomorrow (Weekday) (today 1); //remember to convert from int to Weekday
}(二)、用枚举常量表示数组的大小
#include stdio.henum COLOR {RED, TELLOW, GREEN, NumCOLORS};int main()
{int color -1;char *ColorNames[NumCOLORS] {red, yellow, green,};char *colorName NULL;printf(请输入你喜欢的颜色代码);scanf(%d, color);if ( color 0 color NumCOLORS){colorName ColorNames[color];}else{colorName unkonw;}printf(你喜欢的颜色是 %s\n, colorName);return 0;
}// 请输入你喜欢的颜色代码2
// 你喜欢的颜色是 green注 对于 “ enum COLOR {RED, TELLOW, GREEN, NumCOLORS}; ” 当没有给枚举变量成员赋值时最后可以多设置一个枚举变量 刚好可以表示枚举成员变量的数量。如 NumCOLORS在没有设置默认值时为 3.
这样要遍历所有的枚举量或者需要建立一个用枚举量做下标的数组的时候很方便。
参考博客 https://blog.csdn.net/qq_41673920/article/details/85261762