c语言枚举类型的一些例子
c语言遍历枚举类所有枚举值

c语言遍历枚举类所有枚举值C语言遍历枚举类型所有枚举值C语言提供了枚举(Enumeration)类型,它允许程序员定义自己的命名常量。
在某些情况下,我们可能需要遍历枚举类型的所有枚举值。
本文将介绍如何在C语言中遍历枚举类型的所有枚举值。
在C语言中,我们可以通过enum关键字定义枚举类型。
下面是一个示例:```c#include <stdio.h>enum Weekday {Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday};int main() {enum Weekday day = Monday; while (day <= Sunday) {switch (day) {case Monday:printf("Monday\n");break;case Tuesday:printf("Tuesday\n");break;case Wednesday:printf("Wednesday\n");break;case Thursday:printf("Thursday\n");break;case Friday:printf("Friday\n");break;case Saturday:printf("Saturday\n");break;case Sunday:printf("Sunday\n");break;default:break;}day++;}return 0;}```在上面的示例中,我们定义了一个枚举类型`Weekday`,其中包含了一周的每一天。
在`main`函数中,我们声明了一个`day`变量,并将其初始化为`Monday`。
然后,我们通过一个`while`循环遍历了`Weekday`枚举类型的所有枚举值,并利用`switch`语句打印每个枚举值对应的字符串。
c语言枚举法例题及解题思路

c语言枚举法例题及解题思路一、引言枚举法是一种常用的编程方法,通过列举所有可能的选项,逐一进行判断或计算,从而解决特定的问题。
在C语言中,枚举法尤其适用于需要处理大量数据或进行有限次试验的情况。
本文档将通过几个例题来展示如何使用枚举法进行解题,并提供详细的解题思路。
二、例题及解题思路1. 例题1:求水仙花数水仙花数是指一个n位数(n≥3),其各个位上的数字的n次幂之和等于它本身。
例如,153是一个3位数,且各个位上的数字的3次幂之和等于153(1^3 + 5^3 + 3^3 = 153),因此153是一个水仙花数。
解题思路:* 枚举所有可能的n位数;* 逐一判断该数的各个位上的数字的n次幂之和是否等于该数;* 如果是,则该数为水仙花数,输出该数。
代码实现:```c#include <stdio.h>int main() {int n, num, originalNum = 0;for (n = 3; n >= 0; n--) { // 从3位数开始枚举num = 0;for (int i = 0; i < n; i++) { // 逐位判断num = num * 10 + (rand() % 10); // 生成随机数}num = num * n; // 计算n次幂之和if (num == originalNum) { // 判断是否相等printf("%d是水仙花数\n", num);} else { // 如果不相等,继续下一轮枚举continue;}}return 0;}```2. 例题2:求斐波那契数列前n项和斐波那契数列是一个经典的数学序列,前两项为0和1,之后的每一项都是前两项之和。
例如,斐波那契数列的前几项为:0、1、1、2、3、5、8、13、21...求斐波那契数列前n项的和。
解题思路:* 使用枚举法逐一判断前n项中的每一项;* 根据斐波那契数列的定义,计算每一项的值;* 将所有项的值相加得到总和。
枚举类型enum用法举例

枚举类型enum用法举例枚举类型(enum)是C++中的一种数据类型,它允许我们将一组相关的常量组合在一起,并为这些常量赋予有意义的名称。
枚举类型可以帮助我们编写更易于理解和维护的代码,因为它们提供了一种清晰地表示不同选项或状态的方式。
一、定义一个枚举类型在C++中,定义一个枚举类型非常简单。
我们可以使用关键字enum 来声明一个新的枚举类型,并在大括号内列出所有可能的值。
例如:```c++enum Color {RED,GREEN,BLUE};```上面的代码定义了一个名为Color的新枚举类型,该类型包含三个可能值:RED、GREEN和BLUE。
请注意,这些值没有被赋予任何特定的整数值,它们只是标识符。
二、使用枚举类型定义一个枚举类型后,我们可以在程序中使用它来表示不同选项或状态。
例如,假设我们正在编写一个程序来绘制图形,并需要指定图形的颜色。
我们可以使用上面定义的Color枚举来表示所有可能的颜色:```c++Color color = RED;```上面的代码将color变量设置为RED颜色。
请注意,在这里我们不需要显式地指定RED等标识符所对应的整数值。
三、枚举类型的默认值在C++中,枚举类型的默认值是从0开始递增的整数。
因此,在上面的Color枚举类型中,RED将被赋予整数值0,GREEN将被赋予整数值1,BLUE将被赋予整数值2。
我们可以通过指定一个特定的整数值来改变这个默认行为。
例如:```c++enum Color {RED = 1,GREEN,BLUE};```上面的代码定义了与之前相同的Color枚举类型,但这次我们显式地将RED赋予整数值1。
因此,在这里GREEN将被赋予整数值2,BLUE将被赋予整数值3。
四、枚举类型和switch语句在C++中,我们可以使用switch语句来根据不同的选项执行不同的代码块。
当我们使用枚举类型时,switch语句非常有用。
例如:```c++enum Color {RED,GREEN,BLUE};int main() {Color color = GREEN;switch (color) {case RED:std::cout << "The color is red." << std::endl;break;case GREEN:std::cout << "The color is green." << std::endl;break;case BLUE:std::cout << "The color is blue." << std::endl;break;default:std::cout << "Unknown color." << std::endl;break;}return 0;}```上面的代码定义了一个名为Color的枚举类型,并使用switch语句根据不同的颜色执行不同的代码块。
c语言中枚举的使用

c语⾔中枚举的使⽤枚举的定义:枚举的定义: enum [枚举名] {美剧类型列表};说完了声明枚举,我们开始考虑具 “枚举常量” 代表什么?通过上边的定义我们可以写出枚举的基本写法(ps: [] 代表可选);1. 声明使⽤enum Weekday {sun,mon,tue,wed,thu,fri,sat};// okenum Weekday weekday,weekend;2. 声明使⽤enum Weekday {sun,mon,tue,wed,thu,fri,sat}weekday,weekend;枚举常量1. 我们举个例⼦说明#include <stdio.h>enum Weekday {sun = 7,mon = 0,tue = 1,wed = 3,thu,fri,sat}weekday,weekend;int main(int argc, char *argv[]){printf("%d\n",weekday=sun);printf("%d\n",weekday=mon);printf("%d\n",weekday=tue);printf("%d\n",weekday=wed);return0;}我们总结⼀下陈词:1. C编译对枚举类型的枚举元素按照常量处理,所以称之为枚举常量。
2. 每⼀个枚举元素都代表⼀个整数,C语⾔编译是按照定义时的顺序默认它们的值为0,也就是说如果3. 开始的时候如果未对 “sun” 赋初始值的话, “sun”即为 0;后边的数字为 1,2,3,4,5,6。
枚举易错#include <stdio.h>enum Weekday {sun = 7,mon = 0,tue = 1,wed = 3,thu,fri,sat}one,two,three;int main(int argc, char *argv[]){one = mon;two = tue;three = wed;printf("%d %d %d\n",one,two,three);return0;}1. 因为枚举值是常量,不能赋值,所以下⾯的写法是错误的sun = 5;mon = 2;只能把枚举值赋予枚举变量,例如: a = sun; b = sat;2.同时,不建议把数值直接赋给枚举变量,例如 a= 1; b= 6; a = (enum week)1; //如果⼀定要使⽤数值,必须使⽤强制类型转换: b = (enum week)6;因为已经使⽤了 sun、mon…sat ⼏个标识符,所以不能再使⽤它们来定义变量等,例如: int sun = 3; char mon;都是错误的。
c语言枚举类型的用法

c语言枚举类型的用法枚举类型就相当于助记符,帮助程序员记忆的。
比如现在要画一张地图,用到红黄蓝绿四种颜色。
为了存储方便,我们规定0=红,1=黄,2=蓝,3=绿。
但是当编程到某一阶段时,程序员可能忘记了哪个数字具体对应哪种颜色,或者忘记了到底有多少个数字,这时他就要去查表,这样会耽误时间。
此时就可以定义一个枚举类型enum color{Red,Yellow,Blue,Green},这样系统就会自动将0、1、2、3和这个枚举类型中的每个元素一一对应起来,程序员只需要记住"Red"、"Green"等单词即可,而且不会出现“4”之类的定义之外的数字。
下面小编就为大家介绍下c语言枚举类型的用法。
c语言枚举类型的用法如下:1. 枚举的定义枚举类型定义的一般形式为: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;枚举类型在使用中有以下规定:1. 枚举值是常量,不是变量。
不能在程序中用赋值语句再对它赋值。
例如对枚举weekday的元素再作以下赋值:sun=5; mon=2; sun=mon; 都是错误的。
2. 枚举元素本身由系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2…。
typedef enum用法

typedef enum用法
enum(枚举)是C语言中的一种特殊的数据类型,它允许用户定义自己的常量,在代码中可以使用枚举常量来代替字符串本身。
使用枚举,可以将字符串表示的“意义”转换为数字,从而使得代码可以根据用户定义的“意义”来更准确地逻辑控制。
在C语言中,定义枚举类型使用关键字:typedef enum,下面是定义'枚举类型Season' 的一个例子:
typedef enum {
SPRING,
SUMMER,
AUTUMN,
WINTER
}Season;
枚举变量的定义有类似的格式,比如下面例子
Season myseason;
枚举变量的初始赋值可以用数值或字符来定义,如
或者
枚举变量可以使用if和switch等语句来控制程序流程,比如
if(myseason == SPRING )
{
//some code
}
switch(myseason)
{
case SPRING:
break;
case SUMMER:
break;
case AUTUMN:
break;
case WINTER:
break;
default:
break;
}
上述的例子用来演示C语言中typedef enum的用法。
通过typedef enum,可以将一个表示意义的字符变量转换为数字变量,从而可以在程序中更方便地使用,避免浪费空间并保持数据的来源一致性。
另外,不同的实现也会带来相应的性能提升,从而提高程序的执行效率。
c语言枚举法
c语言枚举法C语言枚举法枚举法是一种常用的解决问题的方法,也是C语言中常用的一种算法。
它通过穷举所有可能的情况来求解问题,从而找到问题的解决方案。
本文将介绍枚举法的基本原理和应用场景,并通过具体的例子来说明其使用方法和注意事项。
一、枚举法的原理枚举法的基本原理是通过遍历所有可能的情况来求解问题。
它适用于问题的解空间较小,可列举出所有可能的情况的情况。
枚举法的步骤如下:1. 确定问题的解空间:即确定问题的解可能取值的范围,通常是通过问题的约束条件来确定。
2. 遍历解空间:通过循环语句遍历解空间中的所有可能情况。
3. 判断解的有效性:对于每个可能的解,判断其是否满足问题的要求。
4. 输出满足要求的解:将满足要求的解输出,即得到问题的解决方案。
二、枚举法的应用场景枚举法适用于以下场景:1. 查找问题的解:例如在一个整数数组中查找某个特定的元素,可以通过枚举数组中的所有元素来找到目标元素的位置。
2. 判断问题的性质:例如判断一个数是否为素数,可以通过枚举该数的所有可能因子来判断。
3. 优化问题求解:例如在一组数字中找到最大或最小值,可以通过枚举所有数字并比较得到最终结果。
三、枚举法的例子下面通过几个具体的例子来说明枚举法的使用方法和注意事项。
例子1:在一个整数数组中查找指定的元素。
假设有一个整数数组arr,我们要查找其中是否存在一个数target。
可以通过枚举数组中的所有元素,逐个与target进行比较,如果找到相等的元素,则说明目标元素存在于数组中。
例子2:判断一个数是否为素数。
素数是指只能被1和自身整除的正整数。
我们可以通过枚举该数的所有可能因子,从2到sqrt(n)(其中n为待判断的数),检查是否存在能整除n的因子。
如果存在,则说明n不是素数;否则,n是素数。
例子3:在一组数字中找到最大或最小值。
假设有一组数字arr,我们要找到其中的最大值。
可以通过枚举数组中的所有数字,逐个与当前最大值进行比较,如果找到比当前最大值更大的数字,则更新最大值。
C语言中的enum(枚举)使用方法
C语⾔中的enum(枚举)使⽤⽅法近期在写数据结构的⼴义表时候⽤到了这个概念,在学习C语⾔的时候没有太注意们这⾥学⼀下。
我在⽹上结合了⾮常多资料,这⾥⾃⼰总结⼀下。
⾸先说。
JAVA和C++中都有枚举类型。
假设⼀个变量你须要⼏种可能存在的值,那么就能够被定义成为枚举类型。
之所以叫枚举就是说将变量或者叫对象可能存在的情况也能够说是可能的值⼀⼀例举出来。
⽐如:⼀个铅笔盒中有⼀⽀笔,但在没有打开之前你并不知道它是什么笔,可能是铅笔也可能是钢笔。
这⾥有两种可能,那么你就能够定义⼀个枚举类型来表⽰它!enum box{pencil,pen};这个枚举变量内含有两个元素也称枚举元素在这⾥是pencil和pen,分别表⽰铅笔和钢笔。
假设你想定义两个具有相同特性枚举类型的变量那么你能够⽤例如以下的两种⽅式进⾏定义!enum box{pencil,pen};enum box box2;//或者简写成box box2; 再有⼀种就是在声明的时候同⼀时候定义。
enum {pencil,pen}box,box2; //在声明的同⼀时候进⾏定义!这⾥看起来⾮常像结构体;枚举变量中的枚举元素系统是依照常量来处理的。
故叫枚举常量,他们是不能进⾏普通的算术赋值的,(pencil=1;)这种写发是错误的,可是你能够在声明的时候进⾏赋值操作!enum box{pencil=1,pen=2};可是这⾥要特别注意的⼀点是,假设你不进⾏元素赋值操作那么元素将会被系统⾃⼰主动从0開始⾃⼰主动递增的进⾏赋值操作,说到⾃⼰主动赋值,假设你仅仅定义了第⼀个那么系统将对下⼀个元素进⾏前⼀个元素的值加1操作⽐如:enum box{pencil=3,pen};//这⾥pen就是4系统将⾃⼰主动进⾏pen=4的定义赋值操作。
样例://枚举类型C语⾔//杨鑫#include <stdio.h>#include <stdlib.h>int main(){enum egg{a, b, c};enum egg test;test = a; //对枚举变量test进⾏赋予元素操作,假设不赋值的话,默认是最后⼀个元素switch(test){case a:printf("test的值是a\n");break;case b:printf("test的值是b\n");break;case c:printf("test的值是c\n");break;}return 0;}C++实现:#include <iostream>using namespace std;int main(){enum egg {a,b,c};enum egg test; //在这⾥你能够简写成egg test;test = c; //对枚举变量test进⾏赋予元素操作。
c enum 类型 长度
c enum 类型长度摘要:1.C 语言中的枚举类型2.枚举类型的长度3.枚举类型的应用实例正文:1.C 语言中的枚举类型在C 语言中,枚举类型是一种特殊的数据类型,用于表示一组有名字的常量。
枚举类型可以让程序员用更加具有可读性的方式表示一些固定的数值,使代码更加简洁易懂。
枚举类型可以用于表示状态、方向、季节等各种情况。
2.枚举类型的长度枚举类型的长度是指在计算机内存中所占用的字节数。
枚举类型的长度取决于枚举类型中元素的个数以及每个元素所占用的字节数。
在C 语言中,枚举类型的长度通常等于枚举元素个数乘以每个元素的字节数。
例如,如果一个枚举类型有3 个元素,每个元素占用2 个字节,那么该枚举类型的长度就是6。
3.枚举类型的应用实例下面是一个枚举类型的应用实例,用于表示计算机网络中的IP 地址类型:```ctypedef enum {IPV4,IPV6} IPAddressType;```在这个例子中,我们定义了一个名为`IPAddressType`的枚举类型,包含两个元素:`IPV4`和`IPV6`。
这些元素分别表示IPv4 地址和IPv6 地址。
通过使用这个枚举类型,我们可以方便地在程序中表示和处理不同类型的IP 地址。
假设我们需要计算一个IPv4 地址的字节数,可以使用以下代码:```c#include <stdio.h>int main() {IPAddressType addressType = IPV4;int byteCount = sizeof(addressType);printf("The byte count of IPAddressType is: %d", byteCount);return 0;}```运行这段代码,输出结果为:`The byte count of IPAddressType is: 2`。
enum在c语言中用法
enum在C语言中的用法1. 引言在C语言中,enum是一种用于定义枚举类型的关键字。
枚举类型是一种用户自定义的数据类型,用于定义一个有限的、离散的取值范围。
使用enum可以为一组相关的常量赋予更具有可读性和可维护性的名称。
本文将介绍enum在C语言中的用法,包括如何定义、初始化和使用枚举类型。
我们还将探讨枚举类型与整数之间的关系,以及如何进行枚举类型之间的转换。
2. 定义枚举类型要定义一个枚举类型,需要使用enum关键字,并指定该枚举类型的名称。
紧接着,在大括号内部列出该枚举类型可能取值的标识符,并用逗号分隔它们。
每个标识符都会被赋予默认值,从0开始递增。
下面是一个示例:enum Weekday {MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY};上述代码定义了一个名为Weekday的枚举类型,它包含了一周中每天的名称。
默认情况下,MONDAY被赋予值0,TUESDAY被赋予值1,以此类推。
3. 初始化枚举类型可以使用枚举类型的标识符来初始化变量。
例如:enum Weekday today = MONDAY;上述代码将today初始化为Weekday枚举类型的一个值,即MONDAY。
4. 使用枚举类型可以像使用其他数据类型一样使用枚举类型。
例如,可以将枚举类型用作函数的参数或返回值。
下面是一个示例:enum Weekday get_next_day(enum Weekday current_day) {return (current_day + 1) % 7;}上述代码定义了一个函数get_next_day(),它接受一个Weekday类型的参数,并返回该参数的下一天。
注意,在函数内部可以直接对枚举类型进行算术运算。
5. 枚举类型与整数之间的关系在C语言中,每个枚举成员都被赋予一个整数值。
默认情况下,第一个成员的值为0,并逐个递增。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
注:以下全部代码的执行环境为VC++ 6.0宏和枚举的区别宏和枚举之间的差别主要在作用的时期和存储的形式不同,宏是在预处理的阶段进行替换工作的,它替换代码段的文本,程序运行的过程中宏已不存在了。
而枚举是在程序运行之后才起作用的,枚举常量存储在数据段的静态存储区里。
宏占用代码段的空间,而枚举除了占用空间,还消耗CPU资源。
但也不能就此说宏比枚举好,如果需要定义非常多的常量,用一条enum {.....}明显比一大堆define更清晰,枚举也可以用来定义一些特殊类型,比如Bool,如:type enum {FALSE,TRUE} Bool;在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可能是:#define MON 1#define TUE 2#define WED 3#define THU 4#define FRI 5#define SAT 6#define SUN 7在此,我们定义一种新的数据类型,希望它能完成同样的工作。
这种新的数据类型叫枚举型。
1. 定义一种新的数据类型- 枚举型以下代码定义了这种新的数据类型- 枚举型enum DAY{MON=1, TUE, WED, THU, FRI, SAT, SUN};(1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。
(2) DAY是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可无的项。
(3) 第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。
(4) 可以人为设定枚举成员的值,从而自定义某个范围内的整数。
(5) 枚举型是预处理指令#define的替代。
(6) 类型定义以分号;结束。
2. 使用枚举类型对变量进行声明新的数据类型定义完成后,它就可以使用了。
我们已经见过最基本的数据类型,如:整型int, 单精度浮点型float, 双精度浮点型double, 字符型char, 短整型short等等。
用这些基本数据类型声明变量通常是这样:char a; //变量a的类型均为字符型charchar letter;int x,y,z; //变量x,y和z的类型均为整型intint number;double m, n;double result; //变量result的类型为双精度浮点型double既然枚举也是一种数据类型,那么它和基本数据类型一样也可以对变量进行声明。
方法一:枚举类型的定义和变量的声明分开enum DAY{MON=1, TUE, WED, THU, FRI, SAT, SUN};enum DAY yesterday;enum DAY today;enum DAY tomorrow; //变量tomorrow的类型为枚举型enum DAYenum DAY good_day, bad_day; //变量good_day和bad_day的类型均为枚举型enum DAY方法二:类型定义与变量声明同时进行:enum //跟第一个定义不同的是,此处的标号DAY省略,这是允许的。
{saturday,sunday = 0,monday,tuesday,wednesday,thursday,friday} workday; //变量workday的类型为枚举型enum DAYenum week { Mon=1, Tue, Wed, Thu, Fri Sat, Sun} days; //变量days的类型为枚举型enum weekenum BOOLEAN { false, true } 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 workdayenum workday中的workday可以省略:typedef enum{saturday,sunday = 0,monday,tuesday,wednesday,thursday,friday} workday; //此处的workday为枚举型enum workday的别名workday today, tomorrow; //变量today和tomorrow的类型为枚举型workday,也即enum 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;错误声明二:存在同名的枚举成员typedef enum{wednesday,thursday,friday} workday_1;typedef enum WEEK{wednesday,sunday = 0,monday,} workday_2;3. 使用枚举类型的变量3.1 对枚举型的变量赋值。
实例将枚举类型的赋值与基本数据类型的赋值进行了对比:方法一:先声明变量,再对变量赋值#include<stdio.h>enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };void main(){int x, y, z;x = 10;y = 20;z = 30;enum DAY yesterday, today, tomorrow;yesterday = MON;today = TUE;tomorrow = WED;printf("%d %d %d \n", yesterday, today, tomorrow);}方法二:声明变量的同时赋初值#include <stdio.h>enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };void main(){int x=10, y=20, z=30;enum DAY yesterday = MON,today = TUE,tomorrow = WED;printf("%d %d %d \n", yesterday, today, tomorrow);}方法三:定义类型的同时声明变量,然后对变量赋值。
#include <stdio.h>enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } yesterday, today, tomorrow; int x, y, z;void main(){x = 10; y = 20; z = 30;yesterday = MON;today = TUE;tomorrow = WED;printf("%d %d %d \n", x, y, z); //输出:10 20 30printf("%d %d %d \n", yesterday, today, tomorrow); //输出:1 2 3}方法四:类型定义,变量声明,赋初值同时进行。
#include <stdio.h>enum DAY{MON=1,TUE,WED,THU,FRI,SA T,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 }3.2 对枚举型的变量赋整数值时,需要进行类型转换。
#include <stdio.h>enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };void main(){enum DAY yesterday, today, tomorrow;yesterday = TUE;today = (enum DAY) (yesterday + 1); //类型转换tomorrow = (enum DAY) 30; //类型转换//tomorrow = 3; //错误printf("%d %d %d \n", yesterday, today, tomorrow); //输出:2 3 30 }3.3 使用枚举型变量#include<stdio.h>enum{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[] = "I'm 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);}输出:match 2 timescount of letters: 10Press any key to continue4. 枚举类型与sizeof运算符#include <stdio.h>enum 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(escapes)); //4 bytesprintf("%d bytes \n", sizeof(enum BOOLEAN)); //4 bytesprintf("%d bytes \n", sizeof(BOOLEAN)); //4 bytesprintf("%d bytes \n", sizeof(match_flag)); //4 bytesprintf("%d bytes \n", sizeof(SPACE)); //4 bytesprintf("%d bytes \n", sizeof(NEWLINE)); //4 bytesprintf("%d bytes \n", sizeof(FALSE)); //4 bytesprintf("%d bytes \n", sizeof(0)); //4 bytes}typedef struct weekday_st{enum week {sun=123456789,mon,tue,wed,thu,fri,sat };enum day {monring, moon, aftermoon} ;}weekday_st;int main(int argc, char *argv[]){printf( "sizeof(weekday_st)=%d\n ", sizeof(weekday_st));printf( "sizeof(weekday)=%d\n ", sizeof(weekday_st::week));printf( "sizeof(day)=%d\n ", sizeof(weekday_st::day));return 0;}sizeof(weekday_st)=1sizeof(weekday)=4sizeof(day)=4printf( "sizeof(weekday_st)=%d\n ", sizeof(weekday_st));这里因为结构体里面并没有定义任何的变量所以这个结构是空的,但是用sizeof进行运算的话也不能返回0因为毕竟存在着这么一个东西所以这时sizeof返回一个在机器里面所能表达的最小的存储单位的值一般的PC里面最小的存储单位的值是char所以sizeof返回1printf( "sizeof(weekday)=%d\n ", sizeof(weekday_st::week));printf( "sizeof(day)=%d\n ", sizeof(weekday_st::day));因为枚举量是当作整型常量来处理的所以上面这两个sizeof都是返回4这里的enum week和enum day只是内嵌“类型”,而不是成员变量,如果改成:typedef struct weekday_st{enum week {sun=123456789,mon,tue,wed,thu,fri,sat } ew;enum day {monring, moon, aftermoon} ed;}weekday_st;sizeof(weekday_st)=8sizeof(weekday)=4sizeof(day)=4。