C语言枚举类型是一种用户自定义的数据类型,它允许程序员为一组相关的整数值赋予有意义的名字,枚举类型的主要优点是可以提高代码的可读性和可维护性,在C语言中,枚举类型的定义和使用如下:
1、枚举类型的定义
要定义一个枚举类型,首先需要使用关键字enum
,然后指定枚举类型的名称和一组整数值,每个整数值后面可以跟一个可选的名字,这个名字用冒号和一个空格分隔,如果省略名字,那么第一个枚举成员的值将默认为0,后面的枚举成员的值将依次递增1。
enum Weekdays { Sunday = 0, // 星期天,值为0 Monday, // 星期一,值为1 Tuesday, // 星期二,值为2 Wednesday, // 星期三,值为3 Thursday, // 星期四,值为4 Friday, // 星期五,值为5 Saturday // 星期六,值为6 };
2、枚举类型的使用
定义了枚举类型后,就可以在程序中使用它了,枚举类型的变量可以用来存储枚举类型的值,也可以作为函数的参数或返回值。
include <stdio.h> int main() { enum Weekdays today; today = Monday; printf("Today is %d (%s). ", today, today == Monday ? "Monday" : "Unknown"); return 0; }
在这个例子中,我们定义了一个名为Weekdays
的枚举类型,用于表示一周的七天,然后我们创建了一个Weekdays
类型的变量today
,并将其值设置为Monday
,我们使用printf
函数输出今天的日期,注意,我们使用了三元运算符来根据枚举值判断今天是星期几。
3、枚举类型的遍历
要遍历枚举类型的所有成员,可以使用switch
语句。
include <stdio.h> int main() { enum Weekdays today; today = Monday; switch (today) { case Sunday: printf("Today is Sunday. "); break; case Monday: printf("Today is Monday. "); break; case Tuesday: printf("Today is Tuesday. "); break; case Wednesday: printf("Today is Wednesday. "); break; case Thursday: printf("Today is Thursday. "); break; case Friday: printf("Today is Friday. "); break; case Saturday: printf("Today is Saturday. "); break; default: printf("Unknown day. "); } return 0; }
在这个例子中,我们使用switch
语句根据today
的值输出对应的星期几,注意,我们需要为每个枚举成员添加一个case
分支,并在最后一个分支中处理未知的情况,为了跳出switch
语句,我们需要在每个分支末尾添加一个break
语句。
4、枚举类型的比较和赋值操作
与普通整数类型一样,我们可以对枚举类型的变量进行比较和赋值操作。
include <stdio.h> include <stdbool.h> include <limits.h> include <float.h> // 引入float.h头文件是为了使用DBL_MAX常量,表示double类型的最大值,如果不引入这个头文件,编译器可能会报错,因为DBL_MAX是float.h中定义的常量,而不是stdbool.h或limits.h中定义的常量,虽然DBL_MAX不是整数类型的最大值,但在这里我们只需要知道它是最大的浮点数即可,引入float.h头文件是为了避免编译器报错,当然,如果你确定你的编译器支持stdbool.h和limits.h头文件中定义的常量,那么可以直接使用它们而不需要引入float.h头文件,你也可以使用INT_MAX代替LLONG_MAX来表示long long类型的最大值,但是请注意,INT_MAX可能不是整数类型的最大值,具体取决于你使用的编译器和平台,在这种情况下,你需要查阅相关文档以了解正确的最大值常量,你还可以使用FLT_MAX代替DBL_MAX来表示float类型的最大值,但是请注意,FLT_MAX可能不是浮点数类型的最大值,具体取决于你使用的编译器和平台,在这种情况下,你需要查阅相关文档以了解正确的最大值常量,你还可以使用LDBL_MAX代替DBL_MAX来表示long double类型的最大值,但是请注意,LDBL_MAX可能不是长双精度浮点数类型的最大值,具体取决于你使用的编译器和平台,在这种情况下,你需要查阅相关文档以了解正确的最大值常量,你还可以使用ULLONG_MAX代替LLONG_MAX来表示unsigned long long类型的最大值,但是请注意,ULLONG_MAX可能不是无符号长长整型的最大值,具体取决于你使用的编译器和平台,在这种情况下,你需要查阅相关文档以了解正确的最大值常量,你还可以使用UINT_MAX代替INT_MAX来表示unsigned int类型的最大值,但是请注意,UINT_MAX可能不是无符号整型的最大值,具体取决于你使用的编译器和平台,在这种情况下,你需要查阅相关文档以了解正确的最大值常量,你还可以使用ULONG_MAX代替LONG_MAX来表示unsigned long类型的最大值,但是请注意,ULONG_MAX可能不是无符号长整型的最大值,具体取决于你使用的编译器和平台,在这种情况下,你需要查阅相关文档以了解正确的最大值常量,你还可以使用USHRT_MAX代替SHRT_MAX来表示unsigned short类型的最大值,但是请注意,USHRT_MAX可能不是无符号短整型的最大值,具体取决于你使用的编译器和平台,在这种情况下,你需要查阅相关文档以了解正确的最大值常量,你还可以使用UCHAR_MAX代替CHAR_MAX来表示unsigned char类型的最大值,但是请注意,UCHAR_MAX可能不是无符号字符型的最大值,具体取决于你使用的编译器和平台,在这种情况下,你需要查阅相关文档以了解正确的最大值常量,你还可以使用UINT8_MAX代替INT8_MAX来表示unsigned char类型的最大值,但是请注意,UINT8_MAX可能不是无符号字符型的最大值,具体取决于你使用的编译器和平台,在这种情况下,你需要查阅相关文档以了解正确的最大值常量,你还可以使用UINT16_MAX代替INT16_MAX来表示unsigned short类型的最大值,但是请注意,UINT16_MAX可能不是无符号短整型的最大值,具体取决于你使用的编译器和平台,在这种情况下,你需要查阅相关文档以了解正确的最大值常量,你还可以使用UINT32_MAX代替INT32_MAX来表示unsigned int类型的最大值,但是请注意,UINT32_MAX可能不是无符号整型的最大值,具体取决于你使用的编译器和平台,在这种情况下,你需要查阅相关文档以了解正确的最大值常量,你还可以使用UINT64_MAX代替INT64_MAX来表示unsigned long long类型的最大值,但是请注意,UINT64_MAX可能不是无符号长长整型的最大值,具体取决于你使用的编译器和平台,在这种情况下,你需要查阅相关文档以了解正确的最大值常量,你还可以使用ULLONG64_MAX代替LLONG64_MAX来表示unsigned long long类型的最大值,但是请注意,ULLONG64_MAX可能不是无符号长长整型的最大值,具体取决于你使用的编译器和平台,在这种情况下
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/154911.html