Semorphe

for 迴圈

把迴圈的三樣東西寫在同一行。 · ⏱ 約 25 分鐘

你會學到三件事

  1. for 就是 while三樣東西寫在一起
  2. break 跳出整個迴圈,continue 只跳過這一圈
  3. 為什麼大家幾乎都從 0 開始數

開始之前

上一課的迴圈,三樣東西散在三個地方:

int n = 1;          // ① 在上面
while (n <= 5) {    // ② 在這裡
    ...
    n = n + 1;      // ③ 在最後一行,很容易忘
}

for 把它們放在同一行,所以你不可能漏掉第三樣。

一、for

for (int i = 1; i <= 5; i++) {
    cout << i << endl;
}

分號隔開的三段,就是上一課那三樣東西

for ( int i = 1 ;  i <= 5 ;  i++ ) {
       ① 起點      ② 條件     ③ 前進

執行順序:起點跑一次 → 問條件 → 做內容 → 前進 → 回去問條件 → …

⚠️ i 只活在這個迴圈裡。 迴圈結束之後 i 就不存在了—— 想在外面用到它的值,要另外宣告一個變數。

二、跳出去 vs 跳過這圈

for (int i = 1; i <= 5; i++) {
    if (i == 3) continue;      // 這一圈剩下的不做,直接前進
    cout << i << endl;
}

印出 1 2 4 5——3 被跳過了。

做什麼
continue 這一圈剩下的不做,跳到「前進」,繼續下一圈
break 整個迴圈結束,跳到大括號後面

⚠️ 兩個都只影響最靠近的那一層迴圈。多層迴圈的時候要注意 (第 15 課會遇到)。

三、為什麼大家從 0 開始

上面的例子從 1 開始,因為我們要印 1 到 5。

而處理資料的時候幾乎都這樣寫:

for (int i = 0; i < n; i++) {

0 開始、< 而不是 <=。原因是第 7 課那件事: 位置從 0 開始數,所以 n 個東西的位置是 0n-1

寫成 i = 0; i < n 的話,i 正好走過每一個位置,一個不多一個不少。 ⚠️ 寫成 i <= n 會多跑一圈,而多的那一圈碰到的是不存在的東西

這個形狀從下一課的陣列開始會一直出現。先把它記成一個整體。

完成的樣子

int main() {
    for (int i = 1; i <= 5; i++) {
        if (i == 3) continue;
        cout << i << endl;
    }
    return 0;
}

換你了

continue 改成 break,執行看看差在哪。

(會印 1 2 就停——break 是整個迴圈結束,不是跳過一圈。)

這一課你做了什麼

如果卡住了

你看到 多半是因為
迴圈外面用 i 說沒宣告 i 只活在迴圈裡。要在外面用就在外面宣告
多跑了一圈 i <= n 應該是 i < n
for (...) ; 什麼都沒做 多了一個分號——和 if 同一個錯
break 沒跳出全部 它只跳出最靠近的那一層
在編輯器打開這一課 →