用 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挑战
简单创建一个 C 程序,定义表示交通信号灯颜色的 enum,并演示它的用法。你的程序应当:
- 定义一个名为
TrafficLight的enum,其中的常量按以下顺序排列:REDYELLOWGREEN
- 在 main 函数中:
- 声明一个类型为
enum TrafficLight、名为currentLight的变量 - 从输入中读取一个整数,表示交通信号灯的状态(0、1 或 2)
- 根据输入为
currentLight赋予对应的枚举值:- 如果输入是 0,赋值为
RED - 如果输入是 1,赋值为
YELLOW - 如果输入是 2,赋值为
GREEN
- 如果输入是 0,赋值为
- 按以下准确格式输出当前信号灯状态:
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;
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: C 在线编译器