声明和使用枚举
本课属于 Coddy C 学习旅程的“逻辑与流程”单元。第 56 课,共 63 课。
现在你已经定义了一个 enum,可以创建这种枚举类型的变量,并为它们赋予有意义的值。枚举真正的优势就在这里:你不必处理令人困惑的数字,而是可以使用描述性名称。
要声明一个枚举类型的变量,你可以使用与声明其他变量相同的语法:
enum DayOfWeek today;
enum DayOfWeek weekend_day;然后,你可以使用枚举中的命名常量为这些变量赋值:
today = WEDNESDAY;
weekend_day = SATURDAY;把它和使用原始数字进行比较:today = 2; 和 weekend_day = 5;。枚举版本能让你立即知道正在处理星期几,而使用数字时,你需要记住每个值代表什么。这样,代码会更易读,也不容易出错。
挑战
简单创建一个 C 程序,演示如何声明和使用枚举变量,构建一个简单的任务管理系统。程序应满足以下要求:
- 定义一个名为
enum的TaskStatus,其中包含以下常量,顺序必须完全一致:PENDINGIN_PROGRESSCOMPLETEDCANCELLED
- 在主函数中:
- 声明 3 个
enum TaskStatus类型的变量,分别命名为task1、task2和task3 - 从输入中读取 3 个整数,分别表示每个任务的状态(0、1、2 或 3)
- 根据输入,将对应的枚举值赋给每个任务变量:
- 如果输入是 0,则赋值为
PENDING - 如果输入是 1,则赋值为
IN_PROGRESS - 如果输入是 2,则赋值为
COMPLETED - 如果输入是 3,则赋值为
CANCELLED
- 如果输入是 0,则赋值为
- 使用枚举值打印每个任务的状态,格式必须完全一致:
Task 1 status: [numeric_value]Task 2 status: [numeric_value]Task 3 status: [numeric_value]
- 统计并打印每种状态的任务数量:
Pending tasks: [count]In progress tasks: [count]Completed tasks: [count]Cancelled tasks: [count]
- 计算并打印活动任务总数(状态为
PENDING或IN_PROGRESS的任务),格式必须完全一致:Active tasks: [count]
- 声明 3 个
这个挑战演示了如何使用有意义的名称而不是原始数字,让枚举变量使代码更易读。你将练习声明枚举变量、根据输入赋值枚举值、在比较中使用枚举常量,以及使用枚举值进行计算。
亲手试试
#include <stdio.h>
// TODO: 在这里定义 TaskStatus 枚举
int main() {
// 读取三个任务状态的输入
int status1, status2, status3;
scanf("%d", &status1);
scanf("%d", &status2);
scanf("%d", &status3);
// TODO: 声明三个 enum TaskStatus 变量(task1, task2, task3)
// TODO: 根据输入赋予枚举值
// TODO: 输出任务状态
// TODO: 统计每个类别中的任务数量
// TODO: 计算并输出活跃任务的数量
return 0;
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: C 在线编译器