Trong bài trước, mình đã giới thiệu tới bạn cấu trúc điều khiển. Đó là cấu trúc rất hay, cho phép bạn thực hiện rẽ nhánh chọn lựa khối lệnh muốn thực hiện thoả theo một điều kiện nào đó. Tuy nhiên nó cũng có nhược điểm, đó là nếu bạn cần kiểm tra nhiều trường hợp và mỗi trường hợp lại có khối lệnh xử lý riêng thì cấu trúc if lúc này sẽ trở nên phức tạp và khó đọc. Hôm nay, mình giới thiệu tới bạn cấu trúc mới có thể khắc phục nhược điểm của cấu trúc if. Đó là cấu trúc lựa chọn (còn gọi là cấu trúc switch…case).
Cấu trúc lựa chọn switch … case
Cấu trúc switch … case là gì?
Đôi khi bạn cần thực hiện việc kiểm tra so khớp một biến/hằng nào đó. Nói đến đây thì chắc hẳn các bạn sẽ nghĩ đến việc dùng cấu trúc if phải không nào? Điều này không sai, vì bản chất của if là để kiểm tra cơ mà. Thế nhưng sẽ không có gì đáng nói nếu như việc kiểm tra này lại cần được so khớp với nhiều giá trị. Rõ ràng rằng bạn vẫn có thể dùng if lồng để so sánh, nhưng việc này cũng sẽ khiến source code của chúng ta trở nên dài dòng và rườm rà hơn nhiều.
Lúc này, cấu trúc switch được sử dụng để thay thế if trong trường hợp cần so sánh một giá trị nào đó với nhiều giá trị khác nhau. Mặc dù gọi là cấu trúc lựa chọn, nhưng đây cũng là một dạng của cấu trúc rẽ nhánh bạn nhé.
Cú pháp
Lưu đồ và cú pháp của cấu trúc switch như sau:
Từ lưu đồ và cú pháp ở trên, bạn có thể hiểu như sau:
- Cấu trúc switch..case sẽ nhận vào giá trị đầu vào để thực hiện việc so khớp với các case. Giá trị đầu vào và giá trị tại các case phải là những giá trị có kiểu số nguyên (char, int, long, unsigned, …).
- Cấu trúc switch…case sẽ so khớp giá trị đầu vào với giá trị của các case bên trong thân. Nếu case nào có giá trị bằng (khớp) với giá trị đầu vào của switch thì chương trình sẽ “nhảy tới” thực hiện khối lệnh của case đó.
- Lưu ý: lệnh break bên trong mỗi một case có vai trò giúp chương trình thoát khỏi cấu trúc switch sau khi thực hiện xong khối lệnh của case. Nếu không có lệnh break thì chương trình sẽ không dừng lại và không thoát khỏi cấu trúc switch. Mà chương trình vẫn tiếp tục thực hiện khối lệnh của case liền kề tiếp theo mà không cần so khớp lại giá trị.
- Khối lệnh default là khối lệnh không bắt buộc, do đó bạn có thể bỏ nếu không cần. Nếu trong trường hợp không có case nào khớp với giá trị đầu vào của cấu trúc switch thì chương trình sẽ tìm khối lệnh default để thực hiện.
Ví dụ minh hoạ
- Đầu vào: Một số nguyên n.
- Đầu ra: Cách đọc số nguyên n bằng chữ, ví dụ “So mot”.
- Giải thuật: Để minh hoạ cả trường hợp “khuyết” lệnh break, mình sẽ vẽ lưu đồ như sau:
➤ Chương trình: dưới đây là chương trình minh hoạ tương ứng với sơ đồ thuật toán ở trên.
➤ Chạy thử: bây giờ mình sẽ chạy thử chương trình ở trên nhé. Bạn hãy chú ý quan sát kết quả thực hiện của chương trình để rút ra nhận xét.
Qua demo này bạn đã hiểu được cách thức vận hành của cấu trúc switch chưa? Trong bài học này mình chỉ trình bày một ví dụ đơn giản như vậy. Chủ yếu là bạn hiểu được cách hoạt động của cấu trúc switch để làm các bài tập sắp tới.
Tổng kết
Cấu trúc switch … case sẽ là một sự lựa chọn tốt hơn so với cấu trúc if trong trường hợp bạn muốn so khớp với nhiều giá trị. Bài viết này cũng không quá dài, lượng kiến thức cũng không quá nhiều. Do đó mình hy vọng bạn có thể nắm được trọn vẹn nội dung của cấu trúc này. Nếu có bất kỳ vấn đề gì cần trao đổi, bạn hãy comment bên dưới nhé.