Menu
CoddyTech

Enum trong câu lệnh switch

Thuộc phần Logic và luồng điều khiển trong hành trình C của Coddy. Bài học 57 trên 63.

Một trong những cách kết hợp mạnh mẽ nhất trong lập trình C là dùng các giá trị enum với câu lệnh switch. Cách kết hợp này tạo ra luồng điều khiển đặc biệt dễ đọc và dễ bảo trì, đồng thời thể hiện rõ quá trình ra quyết định của chương trình.

Khi dùng các hằng số enum làm trường hợp trong câu lệnh switch, code sẽ tự mô tả ý nghĩa. Thay vì thấy những con số khó hiểu như case 0: hoặc case 5:, bạn sẽ thấy các tên có ý nghĩa, giúp bạn hiểu ngay mục đích của chúng:

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;
}

Cách làm này giúp bạn hiểu và chỉnh sửa code dễ dàng hơn nhiều. Bất kỳ ai đọc code này cũng biết ngay mỗi trường hợp đại diện cho điều gì, đồng thời có thể dễ dàng thêm trường hợp mới hoặc thay đổi logic. Trình biên dịch cũng giúp phát hiện lỗi: nếu bạn viết sai tên một hằng số enum, bạn sẽ gặp lỗi biên dịch thay vì một bug âm thầm.

challenge icon

Thử thách

Dễ

Tạo một chương trình C sử dụng enum cùng câu lệnh switch để xây dựng một hệ thống tư vấn thời tiết đơn giản. Chương trình của bạn cần:

  1. Định nghĩa một enum có tên WeatherCondition với các hằng số sau theo đúng thứ tự:
    • SUNNY
    • CLOUDY
    • RAINY
    • STORMY
    • SNOWY
  2. Viết một hàm có tên getWeatherAdvice:
    • Nhận một tham số kiểu enum WeatherCondition có tên weather
    • Không trả về giá trị nào (void)
    • Sử dụng câu lệnh switch để in lời khuyên phù hợp với điều kiện thời tiết:
      • Với SUNNY: in Perfect day for outdoor activities!
      • Với CLOUDY: in Good day for a walk, no sun protection needed.
      • Với RAINY: in Don't forget your umbrella!
      • Với STORMY: in Stay indoors and avoid travel.
      • Với SNOWY: in Drive carefully and dress warmly.
  3. Viết một hàm có tên getActivitySuggestion:
    • Nhận một tham số kiểu enum WeatherCondition có tên weather
    • Không trả về giá trị nào (void)
    • Sử dụng câu lệnh switch để đề xuất hoạt động dựa trên thời tiết:
      • Với SUNNY: in Suggested activity: Beach or hiking
      • Với CLOUDY: in Suggested activity: Photography or gardening
      • Với RAINY: in Suggested activity: Reading or indoor games
      • Với STORMY: in Suggested activity: Movie marathon
      • Với SNOWY: in Suggested activity: Skiing or hot cocoa
  4. Trong hàm main:
    • Khai báo một biến kiểu enum WeatherCondition có tên currentWeather
    • Đọc một số nguyên từ đầu vào, biểu thị điều kiện thời tiết (0, 1, 2, 3 hoặc 4)
    • Gán giá trị enum tương ứng cho currentWeather dựa trên đầu vào
    • In điều kiện thời tiết hiện tại theo đúng định dạng này: Current weather: [numeric_value]
    • Gọi hàm getWeatherAdvice với currentWeather
    • Gọi hàm getActivitySuggestion với currentWeather

Thử thách này minh họa sức mạnh của việc kết hợp enum với câu lệnh switch để tạo ra code dễ đọc và dễ bảo trì. Thay vì dùng các trường hợp số khó hiểu trong câu lệnh switch, bạn sẽ dùng các hằng số enum có ý nghĩa, thể hiện rõ logic của chương trình. Câu lệnh switch trở nên dễ hiểu, giúp bạn nắm được ý nghĩa của từng trường hợp và chỉnh sửa hành vi khi cần.

Tự làm thử

#include <stdio.h>

// TODO: Định nghĩa enum WeatherCondition tại đây

// TODO: Viết hàm getWeatherAdvice tại đây

// TODO: Viết hàm getActivitySuggestion tại đây

int main() {
    // Đọc đầu vào
    int weatherInput;
    scanf("%d", &weatherInput);
    
    // TODO: Khai báo biến currentWeather và gán giá trị enum dựa trên đầu vào
    
    // TODO: In ra điều kiện thời tiết hiện tại theo định dạng "Current weather: [numeric_value]"
    
    // TODO: Gọi hàm getWeatherAdvice
    
    // TODO: Gọi hàm getActivitySuggestion
    
    return 0;
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng điều khiển

Tự luyện tập: Trình biên dịch C online