C 语言编程教程

C 语言 - 首页

C 语言基础

C 语言 - 概述 C 语言 - 特性 C 语言 - 发展历史 C 语言 - 环境设置 C 语言 - 程序结构 C 语言 - Hello World C - 编译过程 C - 注释 C - 标记 C - 关键字 C - 标识符 C - 用户输入 C - 基本语法 C - 数据类型 C - 变量 C - 整数提升 C - 类型转换 C - 类型转换 C - 布尔值

C 语言中的常量和文字

C - 常量 C - 字面量 C - 转义序列 C - 格式说明符

C 语言中的运算符

C - 运算符 C - 算术运算符 C - 关系运算符 C - 逻辑运算符 C - 位运算符 C - 赋值运算符 C - 一元运算符 C - 递增和递减运算符 C - 三元运算符 C - sizeof 运算符 C - 运算符优先级 C - 其他运算符

C 语言中的决策

C - 决策 C - if 语句 C - if...else 语句 C - 嵌套 if 语句 C - switch 语句 C - 嵌套 switch 语句

C 语言中的循环

C - 循环 C - While 循环 C - For 循环 C - Do...while 循环 C - 嵌套循环 C - 无限循环 C - Break 语句 C - Continue 语句 C - goto 语句

C 语言中的函数

C - 函数 C - Main 函数 C - 按值调用函数 C - 按引用调用函数 C - 嵌套函数 C - 可变参数函数 C - 用户定义函数 C - 回调函数 C - return 语句 C - 递归

C 语言中的作用域规则

C - 作用域规则 C - 静态变量 C - 全局变量

C 语言中的数组

C - 数组 C - 数组的属性 C - 多维数组 C - 将数组传递给函数 C - 从函数返回数组 C - 可变长度数组

C 语言中的指针

C - 指针 C - 指针和数组 C - 指针的应用 C - 指针运算 C - 指针数组 C - 指向指针的指针 C - 将指针传递给函数 C - 从函数返回指针 C - 函数指针 C - 指向数组的指针 C - 指向结构体的指针 C - 指针链 C - 指针 vs 数组 C - 字符指针和函数 C - NULL 指针 C - void 指针 C - 悬垂指针 C - 解引用指针 C - Near、Far 和 Huge 指针 C - 指针数组的初始化 C - 指针与多维数组

C 语言中的字符串

C - 字符串 C - 字符串数组 C - 特殊字符

C 语言的结构体和联合

C - 结构体 C - 结构体和函数 C - 结构体数组 C - 自引用结构 C - 查找表 C - 点 (.) 运算符 C - 枚举(或 enum) C - 结构填充和打包 C - 嵌套结构 C - 匿名结构和联合 C - 联合 C - Bit 位字段 C - Typedef

C 语言中的文件处理

C - 输入和输出 C - 文件 I/O(文件处理)

C 语言中的预处理器

C - 预处理器 C - #pragma 编译指示 C - 预处理器操作符 C - 宏 C - 头文件

C 语言中的内存管理

C - 内存管理 C - 内存地址 C - 存储类

C 其他主题

C - 错误处理 C - 可变参数 C - 命令执行 C - 数学函数 C - static 静态关键字 C - 随机数生成 C - 命令行参数

C 语言编程资源

C语言问题与解答答案 C语言快速指南 C语言速查表 C语言实用资源 C语言讨论


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 语句时可以使用枚举。