Hỏi về vòng lặp while?

Em chưa hiểu về thứ tự xử lý vòng lặp while lắm.
VD :

unsigned int t = 10;
         while(t--)
         {
          abcxyz...
         }

Em có hai cách hiểu nhưng chưa biết theo hướng nào:

  1. Nó sẽ t = t-1 rồi kiểm tra điều kiện t > 0 rồi mới nhảy vào xử lý trong ngoặc { }

  2. Nó sẽ kiểm tra t > 0 rồi mới nhảy vào trong ngoặc { } xử lý rồi mới quay về t = t - 1.
    Theo e thì nó tương đương với

    while(t)
    {
    abcxyz…
    t = t - 1;
    }

Xin các bác giải đáp giúp

Ý thứ 2 của bạn hiểu sát hơn, sau khi kiểm tra điều kiện t > 0 đúng thì sẽ chạy luôn lệnh t = t - 1 chứ không phải abcxyz… rồi mới chạy t = t-1

2 Likes

Vâng rất cảm ơn bác.
Vậy thì nó hơi khác chút vòng lặp for(khởi gián, điều kiện, cập nhật).
Theo tài liệu thì khởi gián -> điều kiện -> xử lý trong ngoặc { } rồi mới nhảy về cập nhật . Như vậy là ông while này điều kiện -> cập nhật -> xử lý trong ngoặc có đúng không bác.

Bạn hiểu chưa đúng.

Thực ra t-- ở đây được hiểu như là một biểu thức điều kiện (suy biến thành 0/1 ứng với falsy/truthy), chứ không có mechanism nào khác.

2 Likes

@rogp10 ở đây bạn ấy hỏi trình tự xử lý trong vòng lặp như thế nào mà.

@Gian_Don để hiểu rõ hơn bạn xem kết quả khi chạy chương trình như sau:

1 Like

Không cần thiết phải chia t-- thành hai lệnh. Mà điều kiện của đoạn code tương đương là t != 0 chứ không phải là >.

1 Like

Vâng trăm nghe không bằng một thấy. Em cảm ơn bác.

ở đây có sequence point trong điều kiện của while nên nó phải kết thúc trước thì mới xuống dưới thực hiện lệnh

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