4.5 break 與 continue
有時候你想在迴圈中途強制停止、或跳過當前一次的剩餘步驟。break 和 continue 就是做這個的。
break:立即跳出迴圈
- 執行到
break時,迴圈立刻結束 - 只離開「最近的一層」迴圈
continue:跳過當前一次的剩餘步驟
- 執行到
continue時,立即跳到迴圈的下一次 - 條件檢查和更新運算式還是會執行
¶範例程式碼
範例 1:用 break 提前結束迴圈
#include<iostream>
using namespace std;
int main() {
// 照條件式要從 1 印到 10,但印完 5 就提早停止
for (int i = 1; i <= 10; i++) {
if (i > 5) {
break; // 當 i > 5 時強制跳出迴圈
}
cout << i << "\n";
}
return 0;
}
執行結果:
1
2
3
4
5
條件式明明寫著 i <= 10,卻只印到 5——break 不理會迴圈自己的條件式,執行到就立刻跳出。
範例 2:用 continue 跳過偶數
#include<iostream>
using namespace std;
int main() {
// 印出 1 到 10 的所有奇數
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
continue; // 偶數時跳到下一次迴圈
}
cout << i << "\n"; // 只有奇數會執行到這裡
}
return 0;
}
執行結果:
1
3
5
7
9
¶例題:判斷一個數是不是質數
質數是「大於 1、而且只有 1 和自己兩個因數」的數。給一個整數 n(n \ge 2),判斷它是不是質數。
作法:試著用 2、3、4、…、n-1 去除 n,只要有一個能整除,就代表 n 有 1 和自己以外的因數,不是質數。一旦找到,就不必再試下去——break 立刻收工:
#include<iostream>
using namespace std;
int main() {
int n;
cin >> n;
bool is_prime = true; // 先假設它是質數
for (int i = 2; i < n; i++) {
if (n % i == 0) { // 找到一個因數
is_prime = false; // 那就不是質數
break; // 已經確定了,別再白試
}
}
if (is_prime) cout << n << " 是質數\n";
else cout << n << " 不是質數\n";
return 0;
}
break 在這裡的意義是「答案已經確定,剩下的都是白做」。以 n = 15 為例:i = 2 除不盡、i = 3 時 15 % 3 == 0,馬上把 is_prime 設成 false 並 break,後面的 4、5、…、14 一個都不用試。這種「找到就走」的提早結束,是 break 最常見的用途。
¶動手試試看
- (break) 讀入一連串數字,一遇到負數就停止,輸出在那之前所有數字的總和(負數本身不算)。
- (continue) 印出 1 到 100 之間,所有不是 3 的倍數的數。
- (綜合) 讀入數字直到遇到 0(0 不算),輸出這些非零數字裡的最大值。