01/10/2018, 16:26

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

NBQ viết 18:41 ngày 01/10/2018

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;
    }

Ý 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

Giản Đơn viết 18:27 ngày 01/10/2018

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.

rogp10 viết 18:33 ngày 01/10/2018

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.

NBQ viết 18:38 ngày 01/10/2018

@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:

rogp10 viết 18:30 ngày 01/10/2018

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

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à >.

Giản Đơn viết 18:38 ngày 01/10/2018

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

Nguyễn Đức Mạnh viết 18:40 ngày 01/10/2018

ở đâ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

Bài liên quan
0