Menu
CoddyTech

在 switch 语句中使用枚举

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

在 C 编程中,最强大的组合之一是将 enum 值与 switch 语句搭配使用。这种组合能创建可读性和可维护性都极高的控制流逻辑,清晰地表达程序的决策过程。

在 switch 语句中使用枚举常量作为 case 时,代码会变得更易读,也能说明自身的含义。你看到的不再是像 case 0: 或 case 5: 这样的神秘数字,而是能直接表达用途的有意义名称:

switch (day) {
    case MONDAY:
    case TUESDAY:
    case WEDNESDAY:
    case THURSDAY:
    case FRIDAY:
        printf("It's a weekday\n");
        break;
    case SATURDAY:
    case SUNDAY:
        printf("It's a weekend\n");
        break;
}

这种方法能让你的代码更容易理解和修改。任何阅读这段代码的人都能立刻知道每种情况代表什么,添加新情况或更改逻辑也会变得简单明了。编译器还能帮助发现错误:如果你拼错了枚举常量,就会收到编译错误,而不是遇到一个悄无声息的 bug。

challenge icon

挑战

简单

编写一个 C 程序,使用枚举和 switch 语句构建一个简单的天气建议系统。你的程序应当:

  1. 定义一个名为 WeatherCondition 的 enum,并按以下确切顺序列出常量:
    • SUNNY
    • CLOUDY
    • RAINY
    • STORMY
    • SNOWY
  2. 编写一个名为 getWeatherAdvice 的函数,该函数:
    • 接受一个名为 weather 的 enum WeatherCondition 参数
    • 不返回任何内容(void)
    • 使用 switch 语句,根据天气条件打印相应的建议:
      • 对于 SUNNY:打印 Perfect day for outdoor activities!
      • 对于 CLOUDY:打印 Good day for a walk, no sun protection needed.
      • 对于 RAINY:打印 Don't forget your umbrella!
      • 对于 STORMY:打印 Stay indoors and avoid travel.
      • 对于 SNOWY:打印 Drive carefully and dress warmly.
  3. 编写一个名为 getActivitySuggestion 的函数,该函数:
    • 接受一个名为 weather 的 enum WeatherCondition 参数
    • 不返回任何内容(void)
    • 使用 switch 语句,根据天气推荐活动:
      • 对于 SUNNY:打印 Suggested activity: Beach or hiking
      • 对于 CLOUDY:打印 Suggested activity: Photography or gardening
      • 对于 RAINY:打印 Suggested activity: Reading or indoor games
      • 对于 STORMY:打印 Suggested activity: Movie marathon
      • 对于 SNOWY:打印 Suggested activity: Skiing or hot cocoa
  4. 在 main 函数中:
    • 声明一个类型为 enum WeatherCondition、名为 currentWeather 的变量
    • 从输入中读取一个整数,表示天气条件(0、1、2、3 或 4)
    • 根据输入,将对应的枚举值赋给 currentWeather
    • 按照以下确切格式打印当前天气条件:Current weather: [numeric_value]
    • 使用 currentWeather 调用 getWeatherAdvice 函数
    • 使用 currentWeather 调用 getActivitySuggestion 函数

这个挑战展示了将枚举与 switch 语句结合起来,如何创建清晰且易于维护的代码。与其在 switch 语句中使用令人困惑的数字分支,不如使用含义明确的枚举常量,清楚地表达程序逻辑。switch 语句因此能清晰地说明自身含义,让你轻松理解每个分支代表什么,并根据需要修改行为。

亲手试试

#include <stdio.h>

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

// TODO:在这里实现 getWeatherAdvice 函数

// TODO:在这里实现 getActivitySuggestion 函数

int main() {
    // 读取输入
    int weatherInput;
    scanf("%d", &weatherInput);
    
    // TODO:声明 currentWeather 变量,并根据输入为其赋枚举值
    
    // TODO:按 "Current weather: [numeric_value]" 格式输出当前天气状况
    
    // TODO:调用 getWeatherAdvice 函数
    
    // TODO:调用 getActivitySuggestion 函数
    
    return 0;
}
quiz icon自我测试

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

逻辑与流程中的所有课

自己练习: C 在线编译器