C语言教程
C语言控制语句
C语言函数
C语言数组
C语言指针
C语言字符串
C语言数学函数
C语言结构
C语言文件处理
C预处理器

C语言枚举

C中的枚举也称为枚举类型。它是用户定义的数据类型,由整数值组成,并且为这些值提供了有意义的名称。在C中使用枚举使程序易于理解和维护。枚举是使用enum关键字定义的。
以下是在C中定义枚举的方法:
enum flag{integer_const1, integer_const2,.....integter_constN};
在上面的声明中,我们将枚举定义为包含'N'整数常量的标志。 integer_const1的默认值为0,integer_const2的默认值为1,依此类推。我们还可以在声明时更改整数常量的默认值。
例如:
enum fruits{mango, apple, strawberry, papaya};
芒果的默认值是0,苹果是1,草莓是2,木瓜是3、如果要更改这些默认值,则可以执行以下操作:
enum fruits{
mango=2,
apple=1,
strawberry=5,
papaya=7,
};

枚举类型声明

我们知道在C语言中,我们需要声明一个预定义类型的变量,例如int,float,char等。类似,我们可以声明用户定义的数据类型的变量,例如enum。让我们看看如何声明一个枚举类型的变量。
假设我们创建状态类型的枚举,如下所示:
enum status{false,true};
现在,我们创建状态类型的变量:
enum status s; // creating a variable of the status type.
在上面的语句中,我们声明了状态类型为's'的变量。
要创建变量,可以将以上两个语句写为:
enum status{false,true} s;
在这种情况下,false的默认值将等于0,true的值将等于1、
让我们创建一个简单的枚举程序。
#include <stdio.h>
 enum weekdays{Sunday=1, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};
 int main()
{
 enum weekdays w; // variable declaration of weekdays type
 w=Monday; // assigning value of Monday to w.
 printf("The value of w is %d",w);
    return 0;
}
在上面的代码中,我们创建一个名为工作日的枚举类型,其中包含所有7天的名称。我们为星期日指定了1个值,所有其他名称都将被赋予一个值作为前一个值加一个。
输出
C中的枚举
让我们演示另一个示例,以更清楚地理解枚举。
#include <stdio.h>
 enum months{jan=1, feb, march, april, may, june, july, august, september, october, november, december};
int main()
{
// printing the values of months
 for(int i=jan;i<=december;i++)
 {
 printf("%d, ",i);
 }
    return 0;
}
在上面的代码中,我们创建了一种类型为enum的枚举,其中包含所有的月份名称。我们已将值指定为" 1",而其他所有月份都将被赋予前一个值加一的值。在main()方法内部,我们定义了一个for循环,在其中我们用jan初始化了'i'变量,该循环将迭代到12月。
输出
C中的枚举

为什么要使用枚举?

当我们希望变量仅具有一组值时,将使用枚举。例如,我们创建一个方向变量。我们知道存在四个方向(北,南,东,西),因此此方向变量将具有四个可能的值。但是变量一次只能保存一个值。如果我们尝试为此变量提供一些不同的值,则它将引发编译错误。
枚举也用在switch case语句中,在该语句中,我们在枚举括号中传递了enum变量。它确保了case块的值应在枚举中定义。
让我们看看如何在switch case语句中使用枚举。
#include <stdio.h>
enum days{sunday=1, monday, tuesday, wednesday, thursday, friday, saturday};
int main()
{
   enum days d;
   d=monday;
   switch(d)
   {
       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;
   }
    return 0;
}
输出
在C中枚举
与枚举有关的一些重要点
枚举类型中可用的枚举名称可以具有相同的值。让我们看一个例子。
#include <stdio.h>
int main(void) {
  enum fruits{mango = 1, strawberry=0, apple=1};
    printf("The value of mango is %d", mango);
    printf("\nThe value of apple is %d", apple);
  return 0;
}
输出
C中的枚举 如果我们没有为枚举名称提供任何值,那么编译器将自动为从0开始的枚举名称分配默认值。 我们还可以按任何顺序将值提供给枚举名称,未分配的名称将获得默认值,即前一个加一。 分配给枚举名称的值必须是整数常量,即它不能为字符串,浮点等其他类型。 所有枚举名称在它们的范围内必须是唯一的,即,如果我们定义两个具有相同范围的枚举,则这两个枚举应该具有不同的枚举名称,否则编译器将抛出错误。
让我们通过示例了解这种情况。
#include <stdio.h>
enum status{success, fail};
enum boolen{fail,pass};
int main(void) {
  
    printf("The value of success is %d", success);
  return 0;
}
输出
C中的枚举 在枚举中,我们也可以定义一个没有名称的枚举数据类型。
#include <stdio.h>
enum {success, fail} status;
int main(void) {
status=success;
printf("The value of status is %d", status);
return 0;
    }
输出
C中的枚举

C中的枚举与宏

宏还可以用于定义名称常量,但是对于枚举,可以将所有名称常量组合在一个语句中。
例如,
#定义通过0;
#定义成功1;

上面的两个语句可以使用enum类型写在单个语句中。
enum status {pass,success};
枚举类型遵循范围规则,而宏不遵循范围规则。 在Enum中,如果不将值分配给枚举名称,则编译器将自动将默认值分配给枚举名称。但是,对于宏,则需要显式分配值。 C语言中的枚举类型是整数,但是宏的类型可以是任何类型。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4