C言語のfor文 ― 決まった回数の繰り返し。ループ回数ビジュアライザとステップ実行で動きを可視化。
for (初期化; 条件; 更新) { ... } の3部構成break で抜ける、continue で次へfor (;;)sum += i パターンで累積計算#include <stdio.h> int main(void) { printf("1\n"); printf("2\n"); printf("3\n"); printf("4\n"); printf("5\n"); return 0; }
printf("1\n"); printf("2\n"); ... printf("100\n"); を100行書きますか? もし途中で「3の倍数だけ表示して」に変更になったら、全部書き直しです。#include <stdio.h> int main(void) { for (int i = 1; i <= 5; i++) { printf("%d\n", i); } return 0; }
5 を 100 に書き換えるだけ。10000回だって同じコード量で書けます。// ループなしで「1+2+...+10」を計算 int sum = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10; // ループあり int sum = 0; for (int i = 1; i <= 10; i++) sum += i;
for (int i = 0; i < 5; i++) { printf("i = %d\n", i); }
| 変数名 | 型 | 値 |
|---|
for (int i=0; i<10; i++) { if (i == 5) break; printf("%d ", i); } // 出力: 0 1 2 3 4
for (int i=0; i<5; i++) { if (i == 2) continue; printf("%d ", i); } // 出力: 0 1 3 4(2だけスキップ)
break と continue は最も内側のループにだけ作用します。二重ループの内側で break しても、外側のループは止まりません。continue は「残りを飛ばして次の周へ」。ループは抜けない点が break との最大の違いです。実行順序を細かく追ってみましょう。for (int i = 0; i < 5; i++) { if (i == 2) continue; // ← i==2 のとき、この下をスキップ printf("%d ", i); // continue の後はここから戻らない }
0 出力 → i++ で i=11 出力 → i++ で i=23 出力4 出力 → i=5 で終了
i++」は必ず実行される。だから i=2 でスキップされても、次の周は i=3 になって進む。
| break | continue | |
|---|---|---|
| ループ全体 | 抜ける(終了) | 続ける(次の周へ) |
| 今の周の残り | スキップ | スキップ |
for の更新部 i++ | 実行されない | 実行される |
| 使いどころ | 「もう探す必要ない」 | 「この要素だけスキップしたい」 |
int i = 0; while (i < 5) { if (i == 2) continue; // ❌ i++ に到達しない → i=2 で無限ループ printf("%d ", i); i++; }
if (i == 2) { i++; continue; } // ✅ これなら安全
continue でも if 入れ子でも書けますが、状況によって読みやすさが違います。
for (int i=0; i<n; i++) { if (arr[i] < 0) continue; // 負値は無視 if (arr[i] == 0) continue; // 0も無視 // ここから正の値だけの長い処理... process(arr[i]); total += arr[i] * 2; }
for (int i=0; i<n; i++) { if (arr[i] > 0) { // 条件を反転して囲む process(arr[i]); total += arr[i] * 2; } }
break と continue を使い分けるi を 5→0 にデクリメントするループを書くこの講座の理解度をチェックしましょう!
i は 0,1,2,3,4 の5つの値を取るので、5回実行されます。
i は 10,9,8,…,1 の10個の値を取るので10回。条件 i > 0 なので i=0 では実行されません。
初期化・条件・更新が全て省略され、条件が省略された場合は常に真とみなされるため無限ループになります。break や return で抜ける必要があります。
for (int i = 0; i < 5; i++) { if (i == 3) continue; printf("%d ", i); }
continue は現在の回の残りをスキップして次の繰り返しへ。i=3 のときだけ printf がスキップされるので 0 1 2 4。break なら「ループ自体を抜ける」ので 0 1 2 になる — 混同注意。