# 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

----
```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
----

----
你:是不是 X?
:(第一次說)不對
你:(不玩了)
----

=>
```c++
while (跟罹患阿茲海默症的阿嬤要錢成功) {
等待二十分鐘
}
```
---
### do-while in 白話文
你:進行 Y
還是你:是不是 X?
:對
----
你:進行 Y
還是你:是不是 X?
:對
----

----
你:進行 Y
還是你:是不是 X?
:(第一次說)不對
你:(不玩了)
----

=>
```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 結尾的分號

{"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}]"}