Từ khóa break và continue

####Xin chào các bạn học viên đang theo dõi khóa học lập trình trực truyến ngôn ngữ C++.

Trong bài học này, chúng ta sẽ cùng nhau tìm hiểu về cấu trúc điểu khiển Jump mà mình đã giới thiệu sơ lược đến các bạn. Sau bài học này, các bạn sẽ biết cách sử dụng từ khóa break, continue trong cấu trúc vòng lặp hoặc cấu trúc rẽ nhánh với switch case statement.


###Break

Từ khóa break được dùng để kết thúc vòng lặp, hoặc cấu trúc switch.

#####Break a switch

Khi sử dụng trong switch case statement, từ khóa break thường được đặt tại cuối mỗi khối lệnh mỗi nhãn case.

switch (character)
{
	case '+':
		cout << "addition" << endl;
		break;
	case '-':
		cout << "subtraction" << endl;
		break;
	case '*':
		cout << "multiplication" << endl;
		break;
	case '/':
		cout << "division" << endl;
		break;
        default:
                break;
}

#####Break a loop

Khi sử dụng trong các dạng vòng lặp khác nhau, từ khóa break đều có cùng mục đích là kết thúc sớm quá trình thực thi của vòng lặp.

for (int i = 10; i >= 0; i--)
{
	cout << "Count down: " << i << endl;
	if (i <= 5)
		break;
}

Đoạn chương trình này thực hiện đếm ngược từ 10 về 0, nhưng khi đếm về 5 thì biểu thức điều kiện của lệnh if bên trong vòng lặp for đúng, nên chương trình sẽ break vòng lặp for.

Từ khóa break thường được dùng để dừng vòng lặp vô hạn:

bool running = true;
while (true)
{
	// do something on running variable

	if(!running)
		break;
}

###Continue

Từ khóa continue thường được sử dụng trong vòng lặp for để chuyển đến bước cuối cùng trong 1 lần lặp (update variable). Cùng nhìn lại 4 bước thực thi cơ bản của 1 lần lặp của vòng lặp for:

(1) Initialize loop variables

(2) Check condition expression

(3) Execute the statements

(4) Update variables

Mỗi khi bắt gặp từ khóa continue trong bước (3), chương trình sẽ bỏ qua phần còn lại của bước (3) để chuyển đến thực hiện bước (4), và bắt đầu 1 lần lặp mới từ bước (2).

for (int i = 0; i <= 20; i++)
{
	if (i % 5 == 0)
		continue;

	cout << i << " ";
}

Đoạn chương trình này sẽ in ra tất cả các số nguyên từ 0 đến 20, ngoại trừ các số chia hết cho 5 như 0, 5, 10, 15.

Từ khóa continue ít được sử dụng trong vòng lặp while hoặc do-while bởi một số hạn chế của nó.

int i = 1; // (1)
while (i <= 20) // (2)
{
	if (i % 5 == 0) // (3)
		continue;

	cout << i << " ";
	i++; // (4)
}

Cũng với ví dụ mẫu trên, nhưng được chuyển sang sử dụng cấu trúc của vòng lặp while. Như các bạn thấy, vòng lặp này vẫn thực hiện đủ 4 bước như vòng lặp for ở trên. Nhưng kết quả chỉ in ra được:

1 2 3 4

Và sau đó, vòng lặp này lặp vô hạn vì biến i sẽ không bao giờ được tăng lên nữa sau khi câu lệnh if được thực thi, vì bước (4) đặt trong vòng lặp while được coi như thuộc bước (3) của vòng lặp for. Do đó, khi gặp từ khóa continue, bước 4 của vòng lặp while cũng bị bỏ qua luôn, mà dòng lệnh i++ sẽ không bao giờ được thực thi nữa.

Vì thế mà chúng ta thường xuyên sử dụng vòng lặp for hơn, và cũng thường đặt từ khóa continue trong vòng lặp for hơn.


###Tổng kết

breakcontinue là 2 từ khóa tiêu biểu cho cấu trúc điều khiển Jump mà ngôn ngữ C++ cung cấp. Các bạn nên tránh lạm dụng 2 từ khóa này vì nó dễ gây sai sót cho chương trình.


P/s: Hẹn gặp lại các bạn trong bài học tiếp theo trong khóa học lập trình C++ hướng thực hành.

Mọi ý kiến đóng góp hoặc thắc mắc có thể đặt câu hỏi trực tiếp tại diễn đàn

www.daynhauhoc.com


Link Videos khóa học

5 Likes
int i = 0; // (1)
while (i <= 20) // (2)
{
	if (i % 5 == 0) // (3)
		continue;

	cout << i << " ";
	i++; // (4)
}

đoạn code này làm gì in ra 0 1 2 3 4 được, 0 chia 5 vẫn dư… 0 mờ ??

1 Like

Để mình sửa lại.

Viết nhiều quá không coi hết mấy chổ lặt vặt được.

1 Like

bài này cũng có view mà không ai góp ý hết.

Vũ đừng nghĩ thế, ai cũng mắc lỗi. Đạt cũng mắc lỗi, up tài liệu lên là để mọi người chỉnh. Chỉnh xong rồi thì sẽ có videos.

Kể cả videos ra rồi mà bị sai, giúp Đạt bằng cách thông báo lỗi, Đạt sẽ sửa lại nội dung bài viết và videos.

2 Likes

Không có đâu anh. Ai cũng đọc kỹ mà :smile:
Nếu có người đọc qua loa thì trước sau gì, họ gặp trường hợp đó cũng sẽ vô tài liệu của anh để tra lại thôi :smiley:

So, just “yên tâm” :slight_smile:

1 Like

Em cũng đọc 2 lần rồi đó :wink:, mặc dù em học rồi nhưng xem thử coi em có quên gì không ý mà :smile:

1 Like

bài viết khá đơn giản mà dễ hiểu

1 Like

switch luôn luôn nên có default case @nguyenchiemminhvu ơi :slight_smile:

5 Likes

Cái đó là phong cách của C++ hay sao ạ??? :confused:

1 Like

Đó là cách viết cẩn thận để tránh bug và dễ kế thừa em.

4 Likes

Anh có tài liệu nào nói về vấn đề đó có thể chỉ cho em được không ạ? :slight_smile:

1 Like

Nhiều em. Ví dụ rule 15.3 chuẩn Misra 2004.

The final clause of a switch statement shall be the default clause.

3 Likes

Ai có bài tập cơ bản đến nần cao cho phần này làm ơn cho em ít bài tập đi ạ. Tài liệu thì nhiều nhưng chất lượng chẳng ra sao. :pensive:

em cũng thích các bài viết của bạn, mặc dù biết qua mấy cái này nhưng đọc kỹ lại hiểu ra điều nhiều cái mà mình bỏ qua. cố lên bạn nhé :smiley:

Chuẩn :slight_smile:

Kể cả default không làm gì thì vẫn cần có default.

@nguyenchiemminhvu thêm cái đấy vào chưa.


Trong videos cũ của anh có nói về việc switch nên có default đó. Em có thể xem qua.

2 Likes

Diễn đàn không hỏi bài tập nha. Mình khuyên bạn không nên làm bài tập làm gì :slight_smile:, chỉ làm cho hiểu bản chất của “lý thuyết” mình đang học thôi. Còn nếu thấy mình đã đủ kiến thức -> hãy làm 1 phần mềm nhỏ. :wink:

Cái này chưa chắc đâu nha. Tuy anh Đạt đã từng khuyên là không nên giải nhiều bài tập.
Tuy bài tập không giúp ích nhiều cho công việc tương lai của mình nhưng nó rèn cho mình tu duy lập trình.
Và hai khóa can ban và giải thuật C++ của anh Đạt mình nghĩ nó mang tính chất rèn kỹ năng và tư duy lập trình + các khái niệm và cú pháp C++ là chính thôi.
Qua khóa OOP mới bắt tay học cao hơn và làm phần mềm.

Dù sao mình vẫn không đánh giá thấp việc làm bài tập và cũng không đánh giá cao việc làm bài tập. Không làm nhiều thì cũng phải làm ít.
Dẫu sao có làm cũng tốt hơn không làm.

Đây là ý kiến cá nhân của mình.

1 Like

@nguyenchiemminhvu : Bạn viết tutorial dễ hiểu lắm, tiếp tục nhé bạn. Cám ơn bạn rất nhiều

1 Like

sao không cần dấu chấm phẩy (:wink: sau câu lệnh if nhỉ, ai giải thích hộ mình

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?