這邊第一個要介紹的迴圈是 while 迴圈,它是一個很基本的迴圈,就像它的名字一樣,當條件成立時就會一直執行迴圈中的程式,直到條件不成立為止。
基本語法#
在上個單元裡,我們學會了如何使用 if 來判斷一個條件是否成立:
if (條件) {
// 程式碼
}
而 while 的語法也很類似:
while (條件) {
// 程式碼
}
跟 if 不同的地方是,while 會一直執行迴圈中的程式,直到條件不成立為止,而 if 只會執行一次。
來看一個簡單的例子:
int x = 5;
while (x > 0) {
cout << x << ' ';
x--;
}
這個程式會印出 5 4 3 2 1,這是因為當 x 大於 0 時,會一直執行 cout << x << ' '; 這行程式,直到 x 變成 0 為止。
更仔細的解釋一下,這個程式的執行流程是這樣的:首先我們先設定一個變數叫做 x 它的功用是判斷我們什麼時候要離開迴圈。接著重頭戲來了,while 的語法是先寫一個 while 接著寫小括號,小括號中寫的通常是一個條件,如果該條件的目前結果是 true ,那麼就繼續執行迴圈中的程式,否則就不執行。注意這邊是先判斷條件是否成立,再決定要不要執行迴圈中的程式。
while 的執行流程就是會先判斷條件是否成立,如果成立就執行迴圈中的程式,否則就跳出迴圈。如下圖所示:

do-while 迴圈#
do-while 迴圈是 while 迴圈的一種變形,跟 while 迴圈不同的地方是它會先執行一次迴圈中的程式,再來判斷是否要繼續執行迴圈(也就是說,do-while 迴圈至少會執行一次)。
具體流程圖如下:

接下來我們再來看一個簡單的例子:
int i = 0;
do {
cout << i << ' ';
} while (i < 10);
這個技巧在某些情況下會很有用,未來我們也會在其他演算法中應用到這個語法!
無限迴圈#
無限迴圈就是指迴圈中的條件永遠成立,這樣迴圈就會一直執行下去,直到程式被強制終止才會停下,通常都是撰寫者不小心寫出來的。應該要盡可能避免這樣的情況,否則可能會導致 TLE (Time Limit Exceeded) 的問題。
一個簡單的例子:
while (true) {
cout << "Hello, World!" << '\n';
}
如果你的 while 迴圈執行的時候,終端機 ( terminal ) 沒有反應或是印出一堆文字,這時候通常是進入了所謂的無限迴圈,代表寫程式的時候沒有注意好離開迴圈的時機,導致程式不斷地卡在迴圈出不來。解決辦法很簡單,通常有兩種,第一種是直接找到跳不出迴圈的原因,第二種方法跟上面的程式很像,設定一個新的變數規定程式要在幾次內執行完,並且印出關鍵的資訊幫助 debug。
