Xin chào và chào mừng. Trong bài giảng này, tôi muốn nói về các vòng lặp while và do while.
Chúng ta đã nói về vòng lặp for, về cơ bản cho phép bạn lặp lại mã.
Có những cấu trúc khác trong c được gọi là while và do while thực hiện điều tương tự
chỉ với cú pháp khác nhau.
Vì vậy, vòng lặp while Vòng lặp while là một cơ chế để lặp lại một tập
hợp các câu lệnh và nó cho phép thực thi tiếp tục miễn là một biểu thức logic được chỉ định đánh giá là true.
Vì vậy, nhiều điều tương tự ở đây. Giống như câu lệnh if sẽ thực thi một số mã
nhất định, trong khi các câu lệnh sẽ thực thi một số mã nhất định dựa trên đánh giá Boolean một số lần.
Mọi thứ bạn có thể làm trong vòng lặp for, bạn có thể làm trong
vòng lặp while, chỉ là cú pháp khác nhau.
Vì vậy, những gì các vòng lặp while trông giống như thế này.
Ở cấp độ rất cao, nếu chúng ta đang xem mã giả, trong khi
điều kiện này là đúng, hãy tiếp tục làm điều này.
Vì vậy, để liên hệ nó với một ví dụ thế giới hơn.
Về cơ bản, trong khi bạn đói, hãy ăn bánh mì sandwich, một cái gì đó tương tự.
Vì vậy, bạn sẽ lặp lại mã. Bạn sẽ tiếp tục ăn nhiều bánh mì sandwich trong khi đói.
Cú pháp chung cho vòng lặp while như sau.
Và điều này sẽ hiển thị cho bạn cú pháp cho một câu
lệnh trong nội dung, vì vậy bạn không cần cung cấp dấu ngoặc đơn hoặc dấu ngoặc nhọn.
Tôi có xu hướng sử dụng các thuật ngữ dấu ngoặc nhọn
và dấu ngoặc nhọn trong cùng một thuật ngữ.
Vì vậy, đây là cú pháp trông như thế nào khi bạn có một câu lệnh so với nhiều câu lệnh.
Nhiều câu lệnh, bạn phải có các dấu ngoặc đó, câu
lệnh đơn thì không, chúng là tùy chọn. Bạn không thể có chúng hoặc bạn không cần phải có chúng.
Biểu thức đi vào bên trong dấu ngoặc đơn giống như vòng
lặp for và câu lệnh if. Biểu thức ở đây khác với
vòng lặp for ở chỗ đó là một điều kiện thoát duy nhất.
Nó chỉ là biểu hiện. Bạn không khởi tạo biến điều khiển vòng lặp.
Bạn không sửa đổi biến điều khiển vòng lặp ở giữa các dấu ngoặc đơn.
Nó chỉ là biểu thức, chỉ là điều kiện thoát.
Điều kiện để tiếp tục vòng lặp while được kiểm tra khi bắt đầu.
Vì vậy, đây là đầu của vòng lặp.
Vì vậy, điều này có nghĩa là nó là vòng lặp đẹp nhất. Và điều đó có nghĩa là nó
có thể thực thi 0 lần hoặc nó có thể thực thi nhiều lần trong phần thân.
Và một lần nữa, điều này sẽ có liên quan bởi vì vòng lặp do while đang làm điều gì đó hơi khác một chút.
Nếu biểu thức bắt đầu bằng false, không có câu lệnh lặp nào
trong phần nội dung sẽ được thực thi.
Vì vậy, đó là lý do tại sao nó nằm trong bài kiểm tra hàng đầu.
Vì vậy, nếu bạn trả lời câu hỏi đầu tiên không, Tôi không đói, thì
bạn sẽ không bao giờ ăn bất kỳ bánh mì nào. Bạn sẽ chuyển thẳng đến ly cà phê
hoặc dòng mã tiếp theo. Bạn sẽ không đi vào phần nội dung của vòng lặp.
Nếu điều kiện của vòng lặp bắt đầu là true,
thì phần thân của vòng lặp phải chứa một cơ chế để thay đổi
điều này nếu vòng lặp kết thúc. Nếu không, bạn sẽ có một vòng lặp vô hạn.
Vì vậy, với vòng lặp for, nơi bạn sửa đổi biến điều khiển vòng lặp trong một câu lệnh duy nhất, nó cũng giống như
vậy trong vòng lặp while ngoại trừ bạn phải thực hiện nó trong phần nội dung.
Vòng lặp while sẽ khởi tạo
biến điều khiển vòng lặp ở đâu đó, và sau đó
nó sẽ sửa đổi bên trong phần thân của mã.
Vì vậy, như tôi đã đề cập, vòng lặp while có thể làm mọi thứ mà vòng lặp for làm, nó chỉ là cú pháp khác nhau.
Và một lần nữa, vòng lặp for ngắn hơn. Bạn có thể làm mọi thứ trong một
dòng trong khi vòng lặp while bạn phải thực hiện 3 điều đó trên các dòng riêng biệt.
Vì vậy, trong ví dụ
này, chúng ta có số int bằng 0. Đây là biến điều khiển vòng lặp. Điều này nằm ngoài câu lệnh lặp while.
Nếu bạn đang sử dụng câu lệnh for, thì câu lệnh này sẽ đi vào bên trong vòng lặp for như trước dấu chấm phẩy đầu tiên.
Đó là nơi khởi tạo biến điều khiển vòng lặp.
Sau đó, bạn có từ khóa while và bạn có bên trong dấu ngoặc đơn là biểu thức Boolean.
Điều này sẽ tương đương với vòng lặp for, câu lệnh thứ
hai ngay trước dấu chấm phẩy thứ hai.
Vì vậy, đây là những gì bạn kiểm tra đúng hay sai. Và nếu nó đúng hay sai, bạn nhập phần thân của vòng lặp.
Nếu số đếm nhỏ hơn 5, thì bạn sẽ in ra số đếm.
Dòng mã tiếp theo sau đó rất quan trọng, là
số cộng cộng vì đó là sửa đổi biến điều khiển vòng lặp.
Bạn phải làm điều này cộng với số đếm hoặc bạn sẽ không bao giờ thoát khỏi vòng lặp vì
điều kiện ở trên cùng nói nếu số lượng nhỏ hơn 5. Nếu số đếm luôn bằng 1, bạn có một
vòng lặp vô hạn.
Vì vậy, cộng cộng đó đếm rất, rất quan trọng.
Cộng với số đếm cộng nhớ là một toán tử tăng dần.
Nó chỉ nói rằng số đếm bằng số lượng cộng với 1.
Vòng lặp này sẽ chạy 5 lần.
Nó sẽ chạy với số đếm bằng
1, đếm bằng 2, đếm bằng 3, đếm bằng 4 và đếm bằng 5.
Khi số đếm bằng 6, nó sẽ nhảy ra khỏi vòng lặp và nó sẽ không
thoát ra bất kỳ câu lệnh nào nữa trong phần thân.
Một lần nữa, bạn nên suy nghĩ về vòng lặp for.
Nó chỉ là biến điều khiển vòng lặp và việc sửa đổi biến điều khiển
vòng lặp không nằm trong phần khai báo của vòng lặp thực tế.
Nó không phải là tất cả trong một dòng giống như trong vòng lặp for.
Đây là một ví dụ khác trong đó logic được điều khiển để kết thúc vòng lặp.
Vì vậy, trong ví dụ đầu tiên mà tôi đã trình bày ở đây, đây là một vòng điều khiển bộ đếm.
Nó sẽ luôn thực hiện cùng một số lần là 5.
Trong ví dụ tiếp theo, đây là một ví dụ mà vòng lặp có thể
thực hiện 100 lần hoặc 0 lần.
Điều kiện mà chúng tôi đang đánh giá ở đây trong khóa while của chúng tôi trong đó num không
bằng 1 âm tất cả phụ thuộc vào những gì người dùng nhập vì
num là những gì người dùng nhập.
Vì vậy, vòng lặp này có thể thực hiện 0 lần, nó có thể thực hiện 100 lần.
Tất cả phụ thuộc vào đầu vào từ bàn phím.
Và đây được gọi là vòng điều khiển sentinel. Nó không được kiểm soát truy cập.
Nó dựa trên logic và biến số có thể thay đổi.
Vì vậy, trong khi num không bằng 1 âm và sau đó num được lưu
trữ giá trị mà chúng ta nhập vào bàn phím.
Nếu người dùng không bao giờ nhập số âm 1 vào bàn phím, thì vòng lặp này sẽ không bao giờ thoát ra.
Vì vậy, cùng một loại cú pháp ở đây với while của chúng tôi.
Biến điều khiển vòng lặp của chúng tôi ở đây là num. Chúng tôi khởi tạo số 0 ở trên
cùng, sau đó chúng tôi đọc sửa đổi nó để xem liệu chúng tôi có đi vào vòng lặp dựa trên
những gì người dùng đã nhập vào bàn phím hay không.
Sau đó, bên trong dấu ngoặc đơn cho từ khóa while, chúng tôi thực sự kiểm tra
nó để xem nó có phải là số 1 phủ định hay không.
Và sau đó trong phần thân của vòng lặp while với các dấu ngoặc, dấu
ngoặc không cần phải ở đó vì có một câu lệnh duy nhất, nhưng tôi muốn đặt chúng ở đó.
Sau đó, chúng tôi cũng đọc đầu vào tiếp theo và chúng tôi lưu trữ trong num.
Nếu người dùng nhập số âm 1 cho đầu vào tiếp theo đó, nó sẽ nhảy ra khỏi vòng lặp.
Nếu không, nó sẽ tiếp tục thực thi và yêu cầu họ nhập thông tin.
Vòng lặp do while hơi khác so với vòng lặp for
trong vòng lặp while vì nó được coi là vòng lặp sau kiểm tra.
Vì vậy, trong vòng lặp while phần thân được thực thi trong khi điều kiện là true.
Trong vòng lặp do while mà phần thân được thực thi lần đầu tiên vô điều kiện, vòng
lặp do while vì phần kiểm tra ở dưới cùng có
nghĩa là bạn sẽ luôn thực hiện vòng lặp ít nhất một lần.
Bạn sẽ luôn thực thi body ít nhất một
lần, có thể nhiều hơn, nhưng nó luôn là một, nó không bao giờ là 0.
Bởi vì điều kiện để kiểm tra lối ra là ở dưới cùng.
Đây được gọi là vòng lặp sau kiểm tra. Nó còn được gọi là vòng lặp kiểm soát lối ra.
Vì vậy, bạn sẽ sử dụng vòng lặp do a while nếu bạn muốn vòng lặp nhập
vào ít nhất một lần.
Thông thường, bạn không cần sử dụng vòng lặp do while
vì bạn vẫn có thể làm điều tương tự trong vòng lặp for nếu muốn, bạn
chỉ cần đặt mã bên ngoài vòng lặp.
Vì vậy, vòng lặp do while không thực sự cần thiết nhưng vẫn có trường hợp bạn muốn sử dụng nó.
Sau khi thực thi ban đầu, phần thân
chỉ được thực thi khi điều kiện là đúng. Vì vậy, sau lần lặp đầu tiên của vòng lặp, nó
sẽ hoạt động giống như các vòng lặp bình thường. Nó sẽ nhảy ra nếu điều kiện sai.
Vì vậy, đây là những gì nó trông như thế nào. Việc làm ở trên cùng và
sau đó kiểm tra điều kiện ở dưới cùng với từ khóa while.
Vì vậy, đối với một từ
khóa mới và sau đó bạn sẽ có ngoặc hoặc không ngoặc tùy thuộc vào
việc bạn có nhiều câu lệnh trong nội dung hay không.
Nếu bạn chỉ có một câu lệnh duy nhất trong phần nội dung, bạn sẽ không có dấu ngoặc. Bạn sẽ chỉ phải làm ở trên cùng
và sau đó bạn sẽ có thời gian ở cuối vòng lặp.
Và bên trong dấu ngoặc đơn, bạn sẽ có đánh giá Boolean sẽ là điều
kiện mà bạn kiểm tra. Nhưng một lần nữa, vì
điều kiện đó ở cuối nên bạn luôn được đảm bảo thực hiện câu lệnh ít nhất một lần.
Và ví dụ bên trái là một câu lệnh, ví dụ bên
phải là nhiều câu lệnh. Vì vậy, bạn có các dấu ngoặc nhọn, dấu ngoặc nhọn.
Và một lần nữa, trong ví dụ thứ hai này, bạn đang nói rằng bạn có thể có một cái gì đó như lời nhắc nhập mật khẩu, đọc thông
tin nhập của người dùng và trong khi thông tin đầu vào không bằng mật khẩu.
Nhưng bạn sẽ luôn nhắc mật khẩu đó ít nhất một lần.
Vì vậy, khác làm một ví dụ về vòng lặp while.
Ví dụ hàng đầu đầu tiên ở đây là một ví dụ về
cách vòng lặp có thể thực
thi một lần hoặc nhiều lần, nhưng không bao giờ là 0.
Tất cả phụ thuộc vào những gì người dùng nhập. Nó sẽ luôn thực thi ít nhất một lần, nhưng đây
là việc đọc đầu vào từ bàn phím. Chúng tôi thấy chức năng scanf.
Và miễn là người dùng không nhập 20, họ sẽ
thực hiện vòng lặp này.
Vòng lặp while cũng có thể là vòng điều khiển bộ đếm, có nghĩa là nó sẽ thực thi một lượng thời gian nhất định.
Trong trường hợp này, nó sẽ thực thi 4 lần trong ví dụ này.
Chúng ta có số int bằng 4. Và sau đó chúng ta phải làm ở trên
cùng, và sau đó
chúng ta có dấu ngoặc vì chúng ta có nhiều câu lệnh bên trong phần nội dung.
Và chúng tôi đang gia tăng biến điều khiển vòng lặp đó bên trong phần thân, số cộng với dấu cộng.
Và sau đó điều kiện để kiểm tra vẫn ở dưới cùng. Vì vậy, bạn sẽ thực hiện điều này 4 lần.
Và bạn sẽ nhận thấy từ khóa while không phải nằm trên cùng một dòng với dấu ngoặc nhọn bên phải.
Thông thường, nó là mặc dù, nhưng nó không phải như vậy.
Và từ khóa while ở dưới cùng cũng kết thúc bằng dấu chấm phẩy, bạn cũng nên chú ý điều đó.
Vì vậy, chúng tôi đã tìm hiểu tất cả về các vòng lặp này; vòng lặp for, while và do while.
Bạn nên sử dụng những vòng lặp nào?
Vâng, điều đầu tiên bạn phải quyết định xem bạn muốn sử dụng vòng lặp nào là trước tiên bạn
có muốn nó trở thành pre-test orpost-test không? Bạn muốn nó thực thi ít nhất một lần hay
bạn không muốn thực thi ít nhất một lần? Nếu bạn muốn nó thực thi ít
nhất một lần, thì bạn sẽ sử dụng do while. Nếu đó không phải là điều
kiện, thì bạn có thể sử dụng for hoặc the while hoặc do while.
Vì vậy, đối với hầu hết các phần khi bạn quyết định sử dụng vòng lặp nào, nó
sẽ luôn là một vòng lặp thử nghiệm trước. Bạn nên tránh xa vòng lặp do while.
Nó chỉ là một lựa chọn tốt hơn trong hầu hết các trường hợp. Nó dễ đọc hơn nhiều.
Tốt hơn là bạn nên xem xét trước khi thực sự lặp lại.
Chỉ cần không bắt đầu lặp lại, tốt hơn là kiểm tra điều kiện đó ở trên cùng.
Đối với khả năng dễ đọc, nếu vòng lặp ở thử nghiệm, nó sẽ trực quan hơn nhiều.
Vì vậy, hãy kiểm tra vòng lặp đó ngay từ đầu, sử dụng một cho hoặc một lúc.
Và trong nhiều trường hợp, điều quan trọng là vòng lặp phải được bỏ qua hoàn toàn nếu bài kiểm tra không được đáp ứng ban đầu.
Một lần nữa, bởi vì đó là trường hợp kiểm tra nên ở trên cùng. Không phải lúc nào bạn cũng nên thực thi ít nhất một lần.
Đối với hầu hết các phần, bạn luôn có thể không muốn thực hiện.
Vì vậy, bạn nên sử dụng một thời gian.
Bây giờ câu hỏi đặt ra là tôi nên sử dụng cái nào, tạm thời.
Đó thực sự là một vấn đề của sở thích cá nhân. Điều đó không quan trọng vì như tôi
đã nói ở phần đầu của bài giảng này, mọi thứ bạn có thể làm trong chốc lát, bạn có thể làm trong chốc lát.
Vì vậy, nếu bạn chỉ thích vòng lặp for hơn, đôi khi for nhanh hơn một
chút vì tất cả các sửa đổi điều khiển vòng lặp, khởi tạo và điều kiện
thoát đều có thể nằm trong một dòng.
Nhưng nó thực sự phụ thuộc vào bạn.
Thông thường, những gì tôi làm là tôi sẽ sử dụng vòng lặp for cho các vòng lặp được kiểm soát ngược lại.
Nhưng một lần nữa, bạn có thể sử dụng tương tự. Nếu bạn thực sự muốn sử dụng vòng lặp
for và làm cho nó giống như một thời gian, bạn chỉ không
có biểu thức đầu tiên và biểu thức thứ ba,
bạn chỉ có một biểu thức duy nhất. Vì vậy, dấu chấm phẩy cho kiểm tra dấu chấm phẩy cũng giống như kiểm tra while.
Vì vậy, điều này chỉ cho bạn thấy rằng for in the while có thể làm điều tương tự, chỉ cần
thay đổi cú pháp một chút.
Nếu bạn thực sự muốn sử dụng một vòng lặp while nhưng bạn muốn nó hoạt động giống như một vòng lặp
for, thì bạn sẽ đặt tiền tố cho nó với phần khởi tạo và bao gồm các câu lệnh cập nhật trong phần nội dung.
Vì vậy, những gì bạn sẽ làm là một cái gì đó như thế này và bạn thường luôn làm điều này trong một vòng lặp.
Nhưng điều này tương đương với một vòng lặp for. Khởi tạo nằm ngoài vòng lặp
của biến điều khiển, biến điều khiển vòng lặp.
Điều kiện kiểm tra là bên trong dấu ngoặc đơn, và
sau đó bạn đang cập nhật biến điều khiển vòng lặp đó trong phần thân của vòng lặp while.
Và điều đó cũng giống như cập nhật kiểm tra khởi tạo vòng lặp for và sau
đó là phần thân. Không có gì khác biệt.
Một lần nữa, như tôi đã đề cập, tôi sử dụng vòng lặp for có thể cho các vòng điều khiển bộ đếm nhiều hơn một chút.
Nhưng tôi sẽ sử dụng thay thế cho cả for và the while, tùy thuộc vào cảm giác của tôi vào ngày hôm đó.
Vì vậy, vòng lặp for có thể thích hợp hơn một chút nếu bạn
muốn khởi tạo và cập nhật một biến trong một dòng.
Vòng lặp while tốt hơn khi các điều kiện khác.
Một lần nữa, vòng điều khiển bộ đếm cho, vòng điều khiển sentinel có thể là vòng lặp while.
Và đây là một ví dụ về vòng lặp while với vòng điều khiển sentinel và
vòng lặp for đang thực hiện lại điều tương tự hoặc vòng lặp for cho bộ đếm được kiểm soát.
Vòng lặp while có thể chạy nhiều lần dựa trên
những gì người dùng nhập vào, vòng lặp for được kiểm soát bộ đếm.
Vì vậy, đây là trong khi đang làm trong khi. Hy vọng rằng, điều này là rõ ràng.
Làm quen với các vòng lặp này vì bạn thường muốn lặp lại mã.
Trong phần nói chuyện một chút về các vòng lặp lồng nhau và cũng có một số
cơ chế khác nhau để thoát khỏi một vòng lặp bằng cách sử dụng
ngắt hoặc tiếp tục. Cảm ơn bạn.