Cprogramming 简明教程
Enumeration (or enum) in C
Enumeration (or enum) in C
C enumeration ( enum ) 是一个枚举数据类型,由一组整数常量组成。当要为整数常量分配用户定义的名称时, Enums 非常有用。 enum 关键字用于定义枚举。
Enum Variable Declaration
声明枚举类型后,还可以声明其变量以访问枚举成员(常量)。要声明枚举变量,请按照枚举名称(enum_name)编写 enum 关键字,然后编写变量名称(var)。
Enum in Switch Statements
C language switch case statement 使用整数值。我们可以使用枚举类型定义常量(带或不带)整数类型值,以便在 switch case 语句中使用它们。
Example
在以下示例中,枚举了彩虹中的颜色。
#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
Examples of Enumeration (enum) Type
练习以下示例以了解 C 编程语言中的枚举(或枚举)类型概念。
Example 1: Enum Constants Get Incrementing Integer Values
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
Example 2: Enumerating the Weekdays
让我们声明枚举类型 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
Example 3: Declaring a Variable of Enum Type
枚举数据类型一个典型应用是将星期分配给整数变量。在这个代码中,我们已经声明了一个类型为 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
Example 4: Enum Values By Default Start from "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
Example 5: Starting an Enum from 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
Example 6: Enumerating HTTP Status Codes
枚举类型中的常量不必具有递增的整数值。您可以为每个常量分配一个不同的唯一值,该值可以是任何序列。
在下面的代码中,枚举类型枚举 HTTP status codes 。
#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
Example 7: Assigning a Fixed Number to Enum Constants
您可以为某些常量分配一个固定的整数,让编译器为其他常量分配值。所有未分配的名称都获得一个值,该值是 "前一个名称的值加一"。
#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