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() {
   // Printing values
   printf("OKAY = %d\n", OKAY);
   printf("CANCEL = %d\n", CANCEL);
   printf("ALERT = %d\n", ALERT);

   return 0;
}

输出

它将产生以下输出:

OKAY = 1
CANCEL = 0
ALERT = 2

在 switch 语句中使用枚举

C 语言 switch case 语句 使用整数值。我们可以使用枚举类型来定义带有(或不带)整数值的常量,以便在 switch case 语句中使用它们。

示例

在下面的示例中,彩虹中的颜色被枚举。

#include <stdio.h>

// Enum declaration
enum colors { VIOLET, INDIGO, BLUE, GREEN, YELLOW, ORANGE, RED };

int main() {
   // Enum variable declaration
   enum colors color = YELLOW;
   // switch statement using enum
   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\n", Mon);
   printf ("Thursday = %d\n", Thu);
   printf ("Sunday = %d\n", 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\n", 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\n", 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\n", a);
   printf("b: %d\n", b);
   printf("c: %d\n", c);
   printf("d: %d\n", d);
   printf("e: %d\n", e);
   printf("f: %d\n", f);

   return 0;
}

输出

运行代码并检查其输出:

a: 0
b: 5
c: 6
d: 7
e: 10
f: 11

枚举的应用

我们可以在 C 中的不同情况下使用枚举,其中一些列在下面:

  • 存储常数值,例如工作日、月份、方向、颜色等。
  • 枚举用于使用标志、状态代码等。
  • 在 C 中使用 switch-case 语句时,可以使用枚举。
广告