# do-while 2020 Clang, 0w1 --- ### while v.s. do-while? --- ### while ```c++ while (條件 X) { 事件 Y } ``` ---- ```c++ while (條件 X) { 事件 Y } ``` => ```c++ 1: 條件 X 是否為真?如果是偽的話跳到 4 // while (條件 X) { 2: 處理事件 Y // 事件 Y 3: 跳到 1 // } 4: (迴圈之後的事情) ``` --- ### do-while in three steps ![](https://i.imgur.com/PAW1gyf.png) ---- ```c++ do { 事件 Y } while (條件 X); ``` ---- ```c++ do { 事件 Y } while (條件 X); ``` => ```c++ 1: 處理事件 Y // do { 事件 Y 2: 條件 X 是否為真?如果是真的話跳到 1 // } while (條件 X); 3: (迴圈之後的事情) ``` --- ### while v.s. do-while? ```c++ 1: 條件 X 是否為真?如果是偽的話跳到 4 // while (條件 X) { 2: 處理事件 Y // 事件 Y 3: 跳到 1 // } 4: (迴圈之後的事情) ``` v.s. ```c++ 1: 處理事件 Y // do { 事件 Y 2: 條件 X 是否為真?如果是真的話跳到 1 // } while (條件 X); 3: (迴圈之後的事情) ``` --- ### while in 白話文 你:是不是 X? :對 你:進行 Y ---- 還是你:是不是 X? :對 你:進行 Y ---- ![](https://i.imgur.com/UOmPnry.jpg =500x) ---- 你:是不是 X? :(第一次說)不對 你:(不玩了) ---- ![](https://i.imgur.com/I7DVP2q.jpg =500x) => ```c++ while (跟罹患阿茲海默症的阿嬤要錢成功) { 等待二十分鐘 } ``` --- ### do-while in 白話文 你:進行 Y 還是你:是不是 X? :對 ---- 你:進行 Y 還是你:是不是 X? :對 ---- ![](https://i.imgur.com/UOmPnry.jpg =500x) ---- 你:進行 Y 還是你:是不是 X? :(第一次說)不對 你:(不玩了) ---- ![](https://i.imgur.com/I7DVP2q.jpg =500x) => ```c++ do { 等待二十分鐘 } while (跟罹患阿茲海默症的阿嬤要錢成功); ``` --- ### 區別 * while: 執行 Y 零次以上 / 先買票再上車 * do-while: 執行 Y 一次以上 / 先上車再補票 --- ### $$ ```c++ int money = 313; do { cout << "扣款前:" << money << endl; money = money - 100; // 扣款 cout << "扣款後:" << money << endl; } while (money >= 100); ``` => ``` 扣款前:313 扣款後:213 扣款前:213 扣款後:113 扣款前:113 扣款後:13 ``` ---- ```c++ int money = 13; do { cout << "扣款前:" << money << endl; money = money - 100; cout << "扣款後:" << money << endl; } while (money >= 100); ``` => ``` 扣款前:13 扣款後:-87 ``` --- ### 注意 do-while 結尾的分號 ![](https://i.imgur.com/bwpHfwf.png)
{"metaMigratedAt":"2023-06-15T05:09:41.081Z","metaMigratedFrom":"Content","title":"do-while","breaks":true,"contributors":"[{\"id\":\"dec33987-0cd9-4214-9d3e-825262921019\",\"add\":2575,\"del\":2969}]"}
    292 views