C 语言中的枚举(或 enum)
C 语言中的枚举(或 enum)
C 语言枚举(enum)是一种枚举数据类型,由一组整型常量组成。枚举 在将用户定义的名称赋给整型常量时非常有用。 enum 关键字用于定义枚举。
定义和声明枚举类型
要声明和定义枚举 (enum) 数据类型,请使用 enum 关键字,后跟枚举名称,并将所有值赋给大括号内的值。
语法
以下是定义枚举类型的语法:
enum enum_name{const1, const2, ... };
枚举变量声明
声明枚举类型后,还可以声明其变量来访问枚举成员(常量)。要声明枚举变量,请编写 enum 关键字,后接枚举名称 (enum_name),然后是变量名称 (var)。
语法
以下是声明枚举类型变量的语法 -
enum enum_name var;
示例
让我们定义一个名为 myenum 的枚举类型 -
enum myenum {val1, val2, val3, val4};
标识符值是无符号整数,从"0"开始。val1 表示 0,val2 表示 1,依此类推。
myenum 类型的变量声明如下:
enum myenum var;
myenum 类型的可能常量值在花括号内枚举。
更改枚举常量值
声明枚举类型时,枚举的第一个常量默认初始化为 0,第二个常量初始化为 1,依此类推。我们还可以给枚举的任何常量赋值任意整数值。
示例
在下面的示例中,我们声明了一个枚举类型,并为枚举常量赋值不同的值。
#include <stdio.h> enum status_codes { OKAY = 1, CANCEL = 0, ALERT = 2 }; int main() { // 打印值 printf("OKAY = %d ", OKAY); printf("CANCEL = %d ", CANCEL); printf("ALERT = %d ", ALERT); return 0; }
输出
它将产生以下输出 -
OKAY = 1 CANCEL = 0 ALERT = 2
Switch 语句中的枚举
C 语言 switch case 语句 使用整数值。我们可以使用枚举类型定义带有(或不带有)整数类型值的常量,以便在 switch case 语句中使用它们。
示例
以下示例中,对彩虹中的颜色进行了枚举。
#include <stdio.h> // 枚举声明 enum colors { VIOLET, INDIGO, BLUE, GREEN, YELLOW, ORANGE, RED }; int main() { // 枚举变量声明 enum colors color = YELLOW; // 使用枚举的 switch 语句 switch (color) { case BLUE: printf("Blue color"); break; case GREEN: printf("Green color"); break; case RED: printf("Red color"); break; default: printf("Color other than RGB"); } return 0; }
输出
运行代码并检查其输出 −
Color other than RGB
枚举 (enum) 类型示例
练习以下示例,理解 C 语言中枚举 (enum) 类型的概念。
示例 1:枚举常量获取递增的整数值
C 语言为每个常量分配递增的整数值,从"0"开始。当我们将 val2 赋值给上述变量时,
var = val2;
赋值给 val2 的整数值为 1。请看以下示例 -
#include <stdio.h> enum myenum {val1, val2, val3, val4}; int main(){ enum myenum var; var = val2; printf("var = %d", var); return 0; }
输出
它将产生以下输出 -
var = 1
示例 2:枚举星期
声明一个枚举类型 weekdays 来枚举星期名称,并将其值赋给枚举类型变量 -
#include <stdio.h> int main(){ enum weekdays {Sun, Mon, Tue, Wed, Thu, Fri, Sat}; printf ("Monday = %d ", Mon); printf ("Thursday = %d ", Thu); printf ("Sunday = %d ", Sun); }
输出
它将产生以下输出 -
Monday = 1 Thursday = 4 Sunday = 0
示例 3:声明枚举类型变量
枚举数据类型的一个典型应用是将工作日赋值给整数值。在此代码中,我们声明了一个 weekdays 枚举类型的变量 -
#include <stdio.h> enum weekdays {Sun, Mon, Tue, Wed, Thu, Fri, Sat}; int main(){ enum weekdays day; day = Wed; printf("Day number of Wed is = %d", day); return 0; }
输出
运行此代码时,将产生以下输出 -
Day number of Wed is = 3
示例 4:枚举值默认从"0"开始
在此代码中,我们定义了一个枚举类型,用于表示日历年中的月份名称。默认情况下,C 语言会从"0"开始赋值。例如,在下面的 C 程序中,Jan 的值是"0",Feb 的值是"1",依此类推。
#include <stdio.h> enum months{Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec}; int main(){ for (int i = Jan; i <= Dec; i++) printf("Month No: %d ", i); return 0; }
输出
运行代码并检查其输出 −
Month No: 0 Month No: 1 Month No: 2 Month No: 3 Month No: 4 Month No: 5 Month No: 6 Month No: 7 Month No: 8 Month No: 9 Month No: 10 Month No: 11
示例 5:枚举从 1 开始
要从 1 开始枚举,请明确将 1 赋给第一个值,编译器将为后续值分配递增的数字。
#include <stdio.h> enum months{Jan=1, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec}; int main(){ for (int i = Jan; i <= Dec; i++) printf("Month No: %d ", i); return 0; }
输出
运行代码并检查其输出 −
Month No: 1 Month No: 2 Month No: 3 Month No: 4 Month No: 5 Month No: 6 Month No: 7 Month No: 8 Month No: 9 Month No: 10 Month No: 11 Month No: 12
示例 6:枚举 HTTP 状态代码
枚举类型中的常量不必具有递增的整数值。您可以为每个常量分配一个不同的、唯一的值,这些值可以按任意顺序排列。
在以下代码中,枚举类型枚举了 HTTP 状态代码。
#include <stdio.h> enum status { OK = 200, BadRequest = 400, Unauthorized = 401, Forbidden = 403, NotFound = 404, InternalServerError = 500, }; int main(){ enum status code = InternalServerError; if (code == 500) printf("Internal Server Error has been encountered"); return 0; }
输出
运行代码并检查其输出 −
Internal Server Error has been encountered
示例 7:为枚举常量赋值固定数字
您可以为某些常量赋值固定整数,而让编译器为其他常量赋值。所有未赋值的名称都会获得一个"前一个名称的值加一"的值。
#include <stdio.h> enum myenum {a, b = 5, c, d, e = 10, f}; int main(){ printf("a: %d ", a); printf("b: %d ", b); printf("c: %d ", c); printf("d: %d ", d); printf("e: %d ", e); printf("f: %d ", f); return 0; }
输出
运行代码并检查其输出 −
a: 0 b: 5 c: 6 d: 7 e: 10 f: 11
枚举的应用
在 C 语言中,我们可以在不同情况下使用枚举,其中一些列举如下 -
- 存储常量值,例如,星期、月份、方向、颜色等。
- 枚举用于使用标志、状态码等。
- 在 C 语言中使用 switch-case 语句时可以使用枚举。