Semorphe

重複

一段程式跑很多次,而你只寫一次。 · ⏱ 約 25 分鐘

你會學到三件事

  1. while 怎麼讓一段程式重複
  2. 一個迴圈一定要有的三樣東西
  3. 少了其中一樣會發生什麼(無窮迴圈)

開始之前

想印出 1 到 5,用現在會的東西只能這樣:

cout << 1 << endl;
cout << 2 << endl;
cout << 3 << endl;
cout << 4 << endl;
cout << 5 << endl;

那印到 100 呢?印到 n 呢——而 n 是使用者輸入的?

寫不出來。 這一課解決它。

一、while

int n = 1;
while (n <= 5) {
    cout << n << endl;
    n = n + 1;
}

讀法:「只要 n <= 5 還成立,就一直做大括號裡面的事。」

它和 if 長得幾乎一樣,只差一個字——而行為差很多:

條件成立時 做完之後
if 做一次 往下走
while 做一次 回去再問一次條件

二、一個迴圈一定要有三樣東西

int n = 1;          // ① 起點   ——從哪裡開始
while (n <= 5) {    // ② 條件   ——什麼時候還要繼續
    cout << n << endl;
    n = n + 1;      // ③ 前進   ——每一圈讓它往終點靠近
}

三樣缺一不可,而漏掉的通常是第三樣。

三、少了「前進」會怎樣

int n = 1;
while (n <= 5) {
    cout << n << endl;
    // ← 忘了 n = n + 1;
}

n 永遠是 1,條件永遠成立,於是它永遠不會停

這叫無窮迴圈。畫面會一直印 1,直到你按停止。

每次寫完一個 while,回頭看一眼:那個條件裡的東西, 有沒有在迴圈裡被改? 沒有的話它就停不下來。

⚠️ 而「前進」不一定是加一。它可以是 n = n * 2、可以是讀下一筆輸入—— 只要那件事會讓條件遲早變成不成立就行。

四、do ... while

還有一種寫法,它先做一次再問

do {
    cout << n << endl;
    n = n + 1;
} while (n <= 5);

差別只有一個:do while 保證至少跑一次,即使條件一開始就不成立。

它用得比 while 少很多。知道有這個東西就好。 ⚠️ 注意它的結尾有分號

完成的樣子

int main() {
    int n = 1;
    while (n <= 5) {
        cout << n << endl;
        n = n + 1;
    }
    return 0;
}

換你了

改成印出 1 到 5 的總和(答案是 15)。

提示:多一個變數 sum 從 0 開始,每一圈 sum = sum + n;。 ⚠️ sum 要宣告在迴圈外面——宣告在裡面的話它每一圈都重新開始。

這一課你做了什麼

如果卡住了

你看到 多半是因為
一直印同一個數字停不下來 少了「前進」那一行
一次都沒印 條件一開始就不成立(例如 n 從 10 開始)
印到 6 才停 條件用了 <= 而你想要 <(或反過來)
總和每次都一樣 sum 宣告在迴圈裡面了
在編輯器打開這一課 →