# 【2-4】重複迴圈 — while-do while迴圈 喔不,罰寫完以後,你還是在走廊奔跑了。 現在你被老師罰站在走廊,直到抓到下一個走廊奔跑的,你才可以回教室。 要站多久...不知道,但我們知道什麼時候結束(終止條件),那這樣要怎麼寫成迴圈呢? ## if 你可能會想到用 `if` 來判斷: ```cpp if(有人走廊奔跑){ 終止罰站,回教室; } 罰站; ``` 問題是,什麼時候要判斷,我們的電腦沒辦法自己知道要判斷了,換句話說,現在這樣寫,只會判斷一次,如果沒抓到有人走廊奔跑,那就沒有下一次機會了。 ## for 不然,我們就給他判斷 1000次,看能不能抓到: ```cpp for(int i=0;i<1000;i++){ if(有人走廊奔跑){ 終止罰站,回教室; } 罰站; } ``` 我們的機會變多次了,但會遇到兩個問題: 1. 前 1000 次都沒抓到,第 1001 次有人走廊奔跑了,你沒判斷到 2. 第 1 次就抓到了,但還要罰站完直到判斷完剩下的 999 次才能離開這個重複迴圈 所以,我們來學習 `while` 迴圈吧! ## while ![image](https://hackmd.io/_uploads/BklfdETEel.png) `while` 多用在已知「終止條件」,但不知道具體的執行次數的時候,具體用法如下: ```cpp while(執行條件){ 執行內容; } ``` 這裡要轉一個彎,`while` 迴圈跟 `for` 迴圈一樣,要的是執行條件,所以我們把「終止條件」取「非(`!`)」的運算子,就變執行條件了。 剛才的問題就可以被寫成: ```cpp while(!有人走廊奔跑){ 罰站; } 終止罰站,回教室; ``` ### Python對照 ```python while not 有人在走廊奔跑: 罰站; 終止罰站,回教室; ``` --- 還有一種情況,當老師正在氣頭上的時候,就是想要你先去罰站,就算面前剛跑過別班的學生也不管,不算抓到。 也就是說,我們要先去罰站,才能抓。 ## if ```cpp! 罰站; if(有人走廊奔跑){ 終止罰站,回教室; } ``` ## for ```cpp for(int i=0;i<1000;i++){ if(有人走廊奔跑){ 終止罰站,回教室; } 罰站; } ``` 但 `while` 這樣直接寫就錯了,按照程式碼由上到下的執行順序,會變成「先判斷再執行」。 所以,來學 `do-while` 吧! ## do-while `do-while` 可以做到「先執行再判斷」,來看看用法: ```cpp do{ 執行內容; }while(執行條件); ``` 剛才的問題,就可以寫成: ```cpp do{ 罰站; }while(!有人在走廊奔跑); ``` --- 聯絡方式:codecodefunny@gmail.com 最後編修時間:2025/06/28 子柚筆