Menu
CoddyTech

用 enum 表示命名常量

本课属于 Coddy C 学习旅程的“逻辑与流程”单元。第 55 课,共 63 课。

编写 C 程序时,你经常需要处理一组相关的常量值。例如,你可能需要表示一周中的几天、一年中的月份,或程序中的不同状态。你可以使用 enum 为这些常量创建有意义的名称,而不是使用 0、1、2 这样的原始数字。

枚举类型,即 enum,可以让你定义一组带名称的整数常量。这样可以让代码更易读,也更容易维护。以下是基本语法:

enum DayOfWeek {
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
};

默认情况下,第一个名称的值为 0,第二个的值为 1,以此类推。所以 MONDAY 等于 0,TUESDAY 等于 1,SUNDAY 等于 6。与其记住第 0 天表示星期一或第 6 天表示星期日,这种方法清晰得多。

使用 enum 能让代码更易读,也有助于避免在程序中到处使用魔法数字时可能出现的错误。

你可以声明枚举类型的变量,并为它们赋枚举值:

enum DayOfWeek today;
today = MONDAY;  // 将 0 赋给 today
challenge icon

挑战

简单

创建一个 C 程序,定义表示交通信号灯颜色的 enum,并演示它的用法。你的程序应当:

  1. 定义一个名为 TrafficLight 的 enum,其中的常量按以下顺序排列:
    • RED
    • YELLOW
    • GREEN
  2. 在 main 函数中:
    • 声明一个类型为 enum TrafficLight、名为 currentLight 的变量
    • 从输入中读取一个整数,表示交通信号灯的状态(0、1 或 2)
    • 根据输入为 currentLight 赋予对应的枚举值:
      • 如果输入是 0,赋值为 RED
      • 如果输入是 1,赋值为 YELLOW
      • 如果输入是 2,赋值为 GREEN
    • 按以下准确格式输出当前信号灯状态:Current light: [enum_name]
    • 按以下准确格式输出当前信号灯的数值:Numeric value: [number]
    • 根据当前信号灯确定并输出对应的行为:
      • 如果是 RED:输出 Action: Stop
      • 如果是 YELLOW:输出 Action: Caution
      • 如果是 GREEN:输出 Action: Go
    • 计算并输出序列中的下一个信号灯:
      • 如果当前信号灯是 RED(0),下一个是 GREEN(2)
      • 如果当前信号灯是 YELLOW(1),下一个是 RED(0)
      • 如果当前信号灯是 GREEN(2),下一个是 YELLOW(1)
    • 按以下准确格式输出下一个信号灯:Next light: [enum_name]

这个挑战演示了 enum 常量如何让代码比使用原始数字更易读。你不必记住 0 表示红色、1 表示黄色、2 表示绿色,而是可以使用 RED、YELLOW 和 GREEN 这样有意义的名称。你将练习定义枚举、在赋值和比较中使用枚举常量,以及获取枚举常量对应的整数值。

亲手试试

#include <stdio.h>

// TODO:在这里定义 TrafficLight 枚举

int main() {
    // 读取输入
    int input;
    scanf("%d", &input);
    
    // TODO:声明 currentLight 变量,并根据输入为其赋予枚举值
    
    // TODO:输出当前信号灯的状态
    
    // TODO:输出数值
    
    // TODO:根据当前信号灯输出相应的操作
    
    // TODO:计算并输出下一个信号灯状态
    
    return 0;
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: C 在线编译器