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.
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:
- Định nghĩa một
enumcó tênTaskStatusvới các hằng số sau theo đúng thứ tự:PENDINGIN_PROGRESSCOMPLETEDCANCELLED
- Trong hàm main:
- Khai báo ba biến thuộc kiểu
enum TaskStatuscó têntask1,task2và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
- Nếu đầu vào là 0, gán
- 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
PENDINGhoặcIN_PROGRESS) theo đúng định dạng sau:Active tasks: [count]
- Khai báo ba biến thuộc kiểu
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;
}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
1Nền tảng về con trỏ
Con trỏ là gì?Khai báo con trỏToán tử lấy địa chỉ (&)Toán tử giải tham chiếu (*)Con trỏ NULLÔn tập: kiến thức cơ bản về con trỏ4Dự án: Công cụ xử lý văn bản đơn giản
Tổng quan dự ánĐếm ký tự7Cấu trúc (struct)
Struct là gì?Khai báo structTạo biến structTruy cập thành viên của structKhởi tạo structÔn tập: struct dữ liệu học sinh10Enum và typedef
Dùng enum cho các hằng số có tênKhai báo và sử dụng enumEnum trong câu lệnh switchDùng typedef để tạo bí danh kiểutypedef với structÔn tập: Luyện tập typedef và enum2Con trỏ và mảng
Tên mảng dưới dạng con trỏPhần tử mảng và con trỏPhép toán con trỏSo sánh con trỏÔn tập: duyệt mảng bằng con trỏ5Con trỏ và hàm
Truyền theo giá trịTruyền con trỏ vào hàmSửa đổi biến qua con trỏVí dụ kinh điển: hoán đổiTruyền mảng vào hàmÔn tập: đối số con trỏ hàm3Mảng ký tự và chuỗi
Chuỗi dưới dạng mảng charKý tự kết thúc nullNhập chuỗi bằng scanfDùng strlen()Dùng strcpy()Dùng strcat()Dùng strcmp()Ôn tập: các hàm xử lý chuỗi cơ bản6Quản lý bộ nhớ
Bộ nhớ ngăn xếp và bộ nhớ heapCấp phát động với malloc()Dùng sizeof() để cấp phátKiểm tra lỗi cấp phátGiải phóng bộ nhớ với free()Cấp phát với calloc()Ôn tập: Mảng động9Dự án: Nhập thông tin liên hệ đơn giản
Định nghĩa struct ContactHàm tạo liên hệTự luyện tập: Trình biên dịch C online