Các lệnh break và continue

Một phần của tài liệu Cplusplus_2011 (Trang 53 - 56)

Chương 3 Các cấu trúc điều khiển

3.5. Các lệnh break và continue

Như đã giới thiệu ở các mục trước, các vòng lặp while, do-while, và for đều kết thúc khi kiểm tra biểu thức điều kiện được giá trị false và chạy tiếp thân vòng lặp trong trường hợp còn lại. Các lệnh break và continue là các lệnh

nhảy cho phép thay đổi luồng điều khiển đó.

Lệnh break khi được thực thi bên trong một cấu trúc lặp hay một cấu trúc switch có tác dụng lập tức chấm dứt cấu trúc đó, chương trình sẽ chạy tiếp ở lệnh nằm tiếp sau cấu trúc đó. Lệnh break thường được dùng để kết thúc sớm vịng lặp (thay vì đợi đến lượt kiểm tra điều kiện lặp) hoặc để bỏ qua phần còn lại của cấu trúc switch (như tại các ví dụ trong Mục 3.2.2).

Về ví dụ sử dụng lệnh break trong vịng lặp. Chẳng hạn, nếu ta sửa ví dụ trong Hình 3.11 để vịng for ngừng lại khi người dùng nhập điểm số có giá trị âm, ta có chương trình trong Hình 3.13. Với cài đặt này, khi người dùng nhập một điểm số có giá trị âm, điều kiện (mark < 0) sẽ cho kết quả true, chương trình thốt khỏi vịng for và chạy tiếp từ lệnh if nằm sau đó. Trong trường hợp đó, biến count chưa kịp tăng đến ngưỡng subjects (điều kiện lặp của vòng for

chưa kịp bị phá vỡ). Do đó, biểu thức (count >= subjects) trong lệnh if sau đó có nghĩa "vịng for có chạy đủ subjects lần hay khơng?" hoặc "vịng for

có bị ngắt giữa chừng bởi lệnh break hay không?", hay là "dữ liệu nhập vào có thành cơng hay khơng?".

#include <iostream> using namespace std; int main()

{

float sum = 0;

int count, subjects = 10;

cout << "Enter the marks for " << subjects << " subjects: "; for (count = 0; count < subjects; count++) {

float mark; cin >> mark;

if (mark < 0) break; sum += mark;

}

if (count >= subjects) // successful

cout << "Average mark = " << sum/subjects; else

cout << "Error: Invalid mark!"; return 0;

}

Hình 3.13: Ví dụ về lệnh break.

Lệnh continue nằm trong một vịng lặp có tác dụng kết thúc lần lặp hiện hành của vòng lặp đó. Hình 3.14 là một bản sửa đổi khác của chương trình trong Hình 3.11. Trong phiên bản này, chương trình khơng ghi nhận điểm số có giá trị âm, cũng khơng kết thúc chương trình sau khi báo lỗi như bản trong Hình 3.13, mà yêu cầu nhập lại cho đến khi nào thành công. Khi gặp điểm số âm được nhập vào (biến mark), lệnh continue được thực thi có tác dụng bỏ qua đoạn lệnh ghi nhận điểm ở nửa sau của thân vòng while (đoạn cộng dồn vào tổng sum và tăng biến đếm count). Lần lặp được thực hiện sau đó sẽ yêu cầu nhập lại điểm cho môn học đang nhập dở (xem kết quả chạy chương trình trong Hình 3.14).

#include <iostream> using namespace std; int main()

{

float sum = 0;

int count = 0, subjects = 3;

cout << "Enter the marks of " << subjects << " subjects.\n"; while (count < subjects) {

float mark;

cout << "#" << count + 1 << ": "; cin >> mark;

if (mark < 0) {

cout << mark << " ignored\n"; continue;

}

sum += mark; count++; }

cout << "Average mark = " << sum/count; return 0;

}

Kết quả chạy chương trình Enter the marks of 3 subjects. #1: 8.0 #2: 7.2 #3: -5 -5 ignored #3: 10.0 Average mark = 8.4 Hình 3.14: Ví dụ về lệnh continue.

Một điểm cần lưu ý là các lệnh break hay continue chỉ có tác dụng đối với vịng lặp trong cùng chứa nó. Chẳng hạn, nếu có hai vịng lặp lồng nhau và lệnh

break nằm trong vịng lặp bên trong, thì khi được thực thi, lệnh break đó chỉ có

tác dụng kết thúc vòng lặp bên trong.

một lệnh break kết thúc sớm vòng lặp hoặc một lệnh continue kết thúc sớm lần lặp hiện hành, cấu trúc lặp sẽ khó hiểu. Vậy nên người ta khuyên nên tránh hai lệnh này nếu có thể.

Một phần của tài liệu Cplusplus_2011 (Trang 53 - 56)

Tải bản đầy đủ (PDF)

(145 trang)