Trong các bài học trước, bạn đã được giới thiệu về các vòng lặp trong lập trình C++. Vòng lặp là cấu trúc cực kỳ quan trọng và thường xuyên sử dụng trong lập trình. Vì thế, việc hiểu và quản lý vòng lặp khá quan trọng, bài viết này mình sẽ cung cấp thêm cho bạn một số lệnh cực kỳ hữu ích trong việc quản lý vòng lặp. Đó là các lệnh rẽ nhánh (lệnh break, continue, goto).
Lệnh break
Đây là lệnh đầu tiên mình muốn nhắc tới. Lệnh break cũng đã được mình giới thiệu trong bài cấu trúc lựa chọn switch…case, không biết bạn còn nhớ không nhỉ? Tuy nhiên trong bài viết này, mình sẽ đề cập tới nó sâu hơn một chút nhé.
Lệnh break không có cú pháp gì phức tạp cả, chỉ đơn giản là break mà thôi. Lệnh break cho phép thoát ra khỏi vòng lặp chứa nó ngay lập tức.
Trong trường hợp có nhiều vòng lặp lồng nhau hoặc nhiều cấu trúc switch lồng thì lệnh break chỉ thoát ra khỏi vòng lặp đang chứa nó mà thôi. Những vòng lặp lồng bên ngoài vẫn sẽ tiếp tục được thực hiện.
Để hiểu rõ hơn, chúng ta hãy cùng làm ví dụ sau nhé:
Đoạn chương trình trên chỉ đơn giản là chạy một vòng lặp vô tận. Mỗi lần lặp sẽ giảm giá trị của i xuống 01 đơn vị, sau đó in giá trị của i ra màn hình. Bạn có thể dễ dàng nhận thấy rằng với vòng lặp vô tận thì sẽ không bao giờ dừng lại. Điều này rất nguy hiểm cho chương trình vì sẽ làm “treo” và “văng” chương trình của bạn.
Để khắc phục điều này, chúng ta sẽ thiết lập điều kiện dừng bên trong vòng lặp (dòng 5, dừng khi i = 0). Lúc này lệnh break phát huy tác dụng của nó, đó là dừng vòng lặp while lại. Chỉ đơn giản vậy thôi, không quá khó hiểu phải không nào? Bạn hãy tự làm lại và chạy thử để hiểu rõ hơn nhé.
Lệnh continue
Khác với lệnh break, lệnh continue được dùng để bắt đầu một vòng lặp mới. Có nghĩa là, khi gặp lệnh continue, chương trình sẽ bỏ qua các lệnh còn lại của lần lặp hiện tại, sau đó thực hiện lần lặp mới tiếp theo của vòng lặp chứa nó.
- Khi gặp lệnh continue bên trong vòng lặp for, chương trình sẽ chuyển đến bước khởi đầu.
- Khi gặp lệnh continue bên trong vòng lặp while hoặc do…while, chương trình sẽ xác định lại giá trị của biểu thức. Sau đó tiến hành kiểm tra điều kiện để kết thúc vòng lặp hay tiếp tục thực hiện.
Lệnh continue chỉ áp dụng cho cấu trúc lặp, không áp dụng cho cấu trúc switch.
➤ Ví dụ: Viết chương trình liệt kê các số dương chẵn nhỏ hơn 20.
Mình mô tả chương trình trên một xíu nhé. Chương trình chỉ đơn giản là chạy một vòng lặp for từ 0 đến 19 (nhỏ hơn 20). Với mỗi lần lặp, chúng ta sẽ kiểm tra giá trị i là chẵn hay lẻ. Nếu giá trị i là lẻ thì sẽ bỏ qua việc in giá trị i tại dòng 6 bằng lệnh continue mà thực hiện lần lặp kết tiếp. Còn nếu i là chẵn thì vẫn tiếp tục thực hiện dòng 6 để in giá trị i.
Ý nghĩa của lệnh continue cũng chỉ đơn giản như vậy thôi, hy vọng bạn có thể hiểu.
Lệnh goto
Lệnh goto là lệnh khá đặc biệt, lệnh goto cho phép chương trình “nhảy” tới một câu lệnh nào đó được chỉ định sẵn.
Cú pháp
Khác với lệnh break và continue, sử dụng lệnh goto thì bạn cần phải chỉ định “nhãn” vị trí.
Trong đó, “nhãn” là một tên hợp lệ được sử dụng để đánh dấu vị trí dòng lệnh mà bạn muốn “nhảy” đến.
Ví dụ
Để hiểu rõ hơn về lệnh goto thì chúng ta hãy cùng làm ví dụ sau nhé.
Nếu tinh ý, bạn sẽ thấy cách hoạt động của chương trình này có vẻ giống như một vòng lặp. Và thực tế thì đúng như vậy bạn ạ, lệnh goto khi kết hợp với cấu trúc if cũng có thể giúp bạn tạo thành một cấu trúc lặp có điều kiện. Chương trình trên chính là một ví dụ đơn giản cho việc tự xây dựng một vòng lặp bằng lệnh goto. Chương trình này cũng chỉ đơn giản là in ra dãy số từ 0 đến 9 mà thôi. Bạn hãy viết lại và chạy thử để thấy kết quả nhé.
Quy tắc sử dụng lệnh goto
- Nếu lệnh goto và “nhãn” nằm trong một hàm thì lệnh goto chỉ cho phép “nhảy” từ vị trí này sang vị trí khác trong thân của hàm đó thôi (không được “nhảy” từ hàm này sang hàm khác).
- Không cho phép dùng lệnh goto từ ngoài vào trong một khối lệnh nhưng lại cho phép “nhảy” từ trong ra ngoài.
- Viết như thế này là sai về quy tắc.
- Viết như thế này thì hợp lệ về quy tắc.
- Viết như thế này là sai về quy tắc.
Tổng kết
Bài viết này mình đã trình bày tới bạn 03 lệnh thường hay được sử dụng để điều hướng các cấu trúc rẽ nhánh. Hy vọng rằng bài viết này sẽ giúp bạn có thêm một số kỹ năng và công cụ để quản lý chương trình của mình được tốt hơn.