Menu
CoddyTech

Khai báo và sử dụng enum

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 56 trên 63.

Bây giờ bạn đã định nghĩa enum, bạn có thể tạo biến thuộc kiểu enum đó và gán cho chúng những giá trị có ý nghĩa. Đây là lúc enum thực sự phát huy tác dụng: thay vì làm việc với những con số khó hiểu, bạn dùng các tên mô tả.

Để khai báo một biến có kiểu enum, bạn dùng cú pháp giống như khi khai báo bất kỳ biến nào khác:

enum DayOfWeek today;
enum DayOfWeek weekend_day;

Sau đó, bạn có thể gán giá trị cho các biến này bằng các hằng số có tên trong enum của mình:

today = WEDNESDAY;
weekend_day = SATURDAY;

Hãy so sánh với cách dùng số thuần: today = 2; và weekend_day = 5;. Phiên bản enum cho bạn biết ngay bạn đang làm việc với ngày nào, còn với các con số, bạn phải nhớ mỗi giá trị đại diện cho điều gì. Nhờ vậy, code dễ đọc hơn nhiều và ít mắc lỗi hơn.

challenge icon

Thử thách

Dễ

Tạo một chương trình C minh họa cách khai báo và sử dụng biến enum cho một hệ thống quản lý tác vụ đơn giản. Chương trình cần:

  1. Định nghĩa một enum có tên TaskStatus với các hằng số sau theo đúng thứ tự:
    • PENDING
    • IN_PROGRESS
    • COMPLETED
    • CANCELLED
  2. Trong hàm main:
    • Khai báo ba biến thuộc kiểu enum TaskStatus có tên task1, task2 và task3
    • Đọc ba số nguyên từ đầu vào, biểu thị trạng thái của từng tác vụ (0, 1, 2 hoặc 3)
    • Gán giá trị enum tương ứng cho mỗi biến tác vụ dựa trên đầu vào:
      • Nếu đầu vào là 0, gán PENDING
      • Nếu đầu vào là 1, gán IN_PROGRESS
      • Nếu đầu vào là 2, gán COMPLETED
      • Nếu đầu vào là 3, gán CANCELLED
    • In trạng thái của từng tác vụ bằng các giá trị enum theo đúng định dạng sau:
      • Task 1 status: [numeric_value]
      • Task 2 status: [numeric_value]
      • Task 3 status: [numeric_value]
    • Đếm và in số lượng tác vụ trong từng nhóm trạng thái:
      • Pending tasks: [count]
      • In progress tasks: [count]
      • Completed tasks: [count]
      • Cancelled tasks: [count]
    • Tính và in tổng số tác vụ đang hoạt động (các tác vụ có trạng thái PENDING hoặc IN_PROGRESS) theo đúng định dạng sau: Active tasks: [count]

Thử thách này minh họa cách các biến enum giúp code dễ đọc hơn nhờ sử dụng tên có ý nghĩa thay vì các con số thô. Bạn sẽ luyện tập khai báo biến enum, gán giá trị enum dựa trên đầu vào, sử dụng hằng số enum trong các phép so sánh và thực hiện phép tính với giá trị enum.

Tự làm thử

#include <stdio.h>

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

int main() {
    // Đọc đầu vào cho trạng thái của ba tác vụ
    int status1, status2, status3;
    scanf("%d", &status1);
    scanf("%d", &status2);
    scanf("%d", &status3);
    
    // TODO: Khai báo ba biến enum TaskStatus (task1, task2, task3)
    
    // TODO: Gán giá trị enum dựa trên đầu vào
    
    // TODO: In ra trạng thái của các tác vụ
    
    // TODO: Đếm số tác vụ trong từng nhóm
    
    // TODO: Tính và in ra số tác vụ đang hoạt động
    
    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