【2026年7月最新】C言語のfor文完全ガイド|break・continue文でループを制御する方法

【2026年7月最新】C言語のfor文完全ガイド|break・continue文でループを制御する方法

C言語を学ぶ上で、for文は最初に壁になる構文のひとつです。「何度処理を繰り返せばいいのかわからない」「break文とcontinue文の使いどころがわからない」という悩みを持つ方は多いでしょう。

この記事では、C言語のfor文の基本構文から始まり、break文・continue文によるループ制御二重ループ(ネスト)無限ループ、そして配列との組み合わせまで、具体的なコード例とともに徹底解説します。

さらに記事の後半では、AI(Claude Code)を使ってC言語のfor文コードを自動生成する方法も紹介します。プログラミング学習にAIを活用する方法を知ることで、学習スピードを大きく加速させることができます。

代表菅澤 代表菅澤
for文はC言語の根幹ともいえる構文です。for文を完全に使いこなせれば、配列操作・行列計算・データ探索など、ほとんどのアルゴリズムが書けるようになります。
AI鬼管理山崎 AI鬼管理山崎
今日は入門者の方でもコードを書きながら理解できるよう、実行結果付きのサンプルコードを豊富に用意しました。ぜひ手元の環境で動かしながら読み進めてください。

この記事を最後まで読むと、次のことが理解できます。

✔️C言語のfor文の基本構文(初期化・条件・更新の3要素)の完全理解
✔️break文・continue文を使ったループ制御の使い方と使い分け
✔️二重ループ(ネスト)で2次元配列や九九の表を処理する方法
✔️無限ループ for(;;)の書き方と正しい終了条件の設定
✔️for文とwhile文の書き換え比較と、状況に応じた選択基準
✔️Claude CodeでC言語のコードを自動生成するプロンプト手法
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理
📌 この記事の結論
【2026年7月最新】C言語のfor文完全ガイド|break・continue文でループを制御する方法
C言語のfor文の基本構文から、break・continue文によるループ制御、二重ループ、無限ループまで徹底解説。Claude Codeでコードを自動生成する方法も紹介します。

01 C言語のfor文とは(ループ処理の重要性) for文・while文・do-while文の使い分けを理解する

プログラムの中で「同じ処理を繰り返す」ことは非常に頻繁に登場します。たとえば「1から100までの合計を計算する」「配列の全要素を表示する」「条件を満たすまでユーザー入力を待つ」といった処理です。

これらを毎回コードを書き並べることは現実的ではありません。そこで登場するのがループ構文(繰り返し処理)です。C言語には主に3種類のループ構文が用意されています。

📚 用語解説

ループ処理:同じ処理を条件が満たされるまで繰り返し実行する制御構造。「ループ」とは英語で「輪」を意味し、処理が円環状に繰り返されるイメージから来ています。プログラミングにおいてループは最も基本的かつ重要な制御構造のひとつです。

ループ構文特徴主な使いどころ
for文繰り返し回数があらかじめ決まっている配列の全要素処理、カウンタ制御ループ
while文条件が真の間ループ継続繰り返し回数が不定、ファイル読み込みなど
do-while文最低1回は必ず実行メニュー表示、入力バリデーションなど

3種類の中でもfor文は最もよく使われます。理由は「初期化・条件・更新」という3つの要素が1行にまとまって見やすく、繰り返し回数が明確なコードを書きやすいからです。

AI鬼管理山崎 AI鬼管理山崎
初心者の方は「ループ3種類を全部覚えないといけない」と思いがちですが、実際の現場では for文 が圧倒的に使われます。まずfor文を完全に使いこなすことに集中しましょう。
💡 for文 vs while文の選び方の基本

「繰り返し回数があらかじめわかっている」→ for文。「条件が変化するまで何度も繰り返す」→ while文。この判断基準を最初に覚えておくと、コードを書く際に迷う時間が大幅に減ります。

また、for文はコードの読み手にとっても「このループは何回回るのか」がひと目でわかるため、コードの可読性(読みやすさ)が上がるというメリットもあります。大規模なプロジェクトでは可読性が非常に重要になります。

02 for文の基本構文(初期化・条件・更新の3要素) C言語 for文の書き方を1行ずつ丁寧に解説

C言語のfor文の基本構文は次のようになっています。

C
for (初期化式; 条件式; 更新式) {
    /* 繰り返す処理 */
}

この3つの要素がfor文の核心です。それぞれの役割を詳しく見ていきましょう。

2-1. 初期化式(ループ開始前に1回だけ実行)

初期化式はfor文が実行される最初の1回だけ評価されます。通常は「カウンタ変数の初期値設定」に使います。

C
int i = 0;  /* iという変数を0で初期化 */

「i」はループカウンタの慣用的な変数名です(index・iteratorの頭文字)。0から始めることが多いですが、1や任意の値から始めることも可能です。

📚 用語解説

カウンタ変数:ループの繰り返し回数を管理するための変数。for文では慣習的に「i」「j」「k」という名前が使われます。i は外側のループ、j は内側のループ(ネスト時)、k はさらに内側のループに使うのが一般的です。

2-2. 条件式(ループを続けるかどうかを判定)

条件式は各ループの繰り返しの前に評価されます。条件式が真(true / 非ゼロ)の間はループを継続し、偽(false / 0)になった時点でループを終了します。

C
i < 10;  /* i が 10 より小さい間はループ継続 */

条件式には不等号(<, >, <=, >=)や等値比較(==, !=)を使います。i <= 9 と i < 10 は同じ意味ですが、C言語では「i < 配列サイズ」という書き方が慣習的に多く使われます。

⚠️ 条件式の「=」と「==」の間違いに注意

if文やfor文の条件式で代入演算子「=」を使ってしまうミスは初心者に非常に多いです。「i = 10」と書くと「iに10を代入する」という意味になり、返り値(10)は常に真になるため無限ループになります。比較には必ず「i == 10」と「==」を使いましょう。

2-3. 更新式(各繰り返しの末尾で実行)

更新式は各ループの末尾(繰り返し処理の実行後)に評価されます。通常はカウンタ変数をインクリメント(1増やす)またはデクリメント(1減らす)します。

C
i++   /* i をインクリメント(i = i + 1 と同じ) */
i--   /* i をデクリメント(i = i - 1 と同じ) */
i += 2 /* i を2ずつ増やす */

2-4. for文の実行の流れを図で理解する

①初期化式(1回のみ)
②条件式を評価
③ループ本体を実行
④更新式を実行
⑤②に戻る

この順序を頭に入れておくことで、「いつ条件が評価されるのか」「更新式はいつ実行されるのか」という疑問がクリアになります。

C
#include <stdio.h>

int main(void) {
    int i;
    for (i = 0; i < 5; i++) {
        printf("i = %d\n", i);
    }
    return 0;
}

/* 出力:
i = 0
i = 1
i = 2
i = 3
i = 4
*/
代表菅澤 代表菅澤
for文の実行順序は「初期化 → 条件チェック → 本体 → 更新 → 条件チェック → ...」です。この流れを一度手で追うと、どんな複雑なfor文でも読み解けるようになります。

03 基本的なfor文の例(1〜100の合計、九九の表) 実際のコードで理解を深める

理論を理解したら、実際のコードで動かしてみましょう。for文の定番サンプルを3つ紹介します。

3-1. 1から100までの合計を計算する

最も基本的なfor文の使い方のひとつが「1からNまでの合計を求める」処理です。

C
#include <stdio.h>

int main(void) {
    int i;
    int sum = 0;

    for (i = 1; i <= 100; i++) {
        sum += i;  /* sum = sum + i と同じ */
    }

    printf("1から100の合計: %d\n", sum);
    return 0;
}

/* 出力:
1から100の合計: 5050
*/

このコードでは、i が 1 から 100 まで1ずつ増えながら、sum += i が繰り返されます。ガウスの公式(n*(n+1)/2)でも求められますが、for文による反復計算がどのように機能するかを理解するのに最適な例です。

💡 sum += i の意味

sum += i は sum = sum + i の省略形です。i++ が i = i + 1 の省略形であるのと同じ考え方です。このような複合代入演算子(+=, -=, *=, /=)はC言語でよく登場します。

3-2. 九九の表を表示する(二重ループの予告)

次は九九の表を表示するコードです。これは後のセクションで詳しく解説する「二重ループ(ネスト)」を先に体験する例です。

C
#include <stdio.h>

int main(void) {
    int i, j;

    for (i = 1; i <= 9; i++) {
        for (j = 1; j <= 9; j++) {
            printf("%3d", i * j);
        }
        printf("\n");  /* 行末で改行 */
    }
    return 0;
}

/* 出力(一部):
  1  2  3  4  5  6  7  8  9
  2  4  6  8 10 12 14 16 18
  3  6  9 12 15 18 21 24 27
...
*/

外側のfor文が「段(1の段〜9の段)」を制御し、内側のfor文が「各段の1倍から9倍」を制御しています。printf のフォーマット指定子 %3d は「3文字分の幅で整数を表示」という意味で、表が整列されます。

3-3. カウントダウンタイマー(デクリメントのfor文)

for文はカウントアップだけでなくカウントダウンにも使えます。更新式を i-- にするだけです。

C
#include <stdio.h>

int main(void) {
    int i;

    printf("カウントダウン開始!\n");
    for (i = 10; i >= 1; i--) {
        printf("%d\n", i);
    }
    printf("発射!\n");
    return 0;
}
AI鬼管理山崎 AI鬼管理山崎
九九の表コードは二重ループの理解に最適な題材です。外側ループが1段ごと、内側ループが各段の掛け算という構造を意識しながら読むと、ネストの感覚が身に付きます。
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

04 二重ループ(ネスト)の使い方 2次元配列との組み合わせ・行列処理

for文の中にさらにfor文を入れることをネスト(入れ子)と呼びます。九九の表でも使いましたが、ネストは2次元配列や行列処理などで非常によく使われます。

📚 用語解説

ネスト(入れ子):for文の中に別のfor文を入れた構造。外側のループが1回回るたびに、内側のループが全回数回ります。2次元配列の全要素にアクセスする場合など、行×列の組み合わせを処理するシーンで多用されます。

4-1. 2次元配列の全要素を処理する

C
#include <stdio.h>

int main(void) {
    int matrix[3][3] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };
    int i, j;

    /* 2次元配列の全要素を表示 */
    for (i = 0; i < 3; i++) {       /* 行のループ */
        for (j = 0; j < 3; j++) {   /* 列のループ */
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}

/* 出力:
1 2 3
4 5 6
7 8 9
*/

外側のfor文(i)が行を、内側のfor文(j)が列を担当しています。matrix[i][j] というアクセスパターンは2次元配列の基本で、i が行番号、j が列番号です。

4-2. 行列の合計・平均を計算する

C
#include <stdio.h>

int main(void) {
    int scores[3][4] = {
        {85, 92, 78, 90},
        {70, 85, 95, 88},
        {60, 75, 80, 70}
    };
    int i, j;
    int total = 0;
    double avg;

    for (i = 0; i < 3; i++) {
        int row_total = 0;
        for (j = 0; j < 4; j++) {
            row_total += scores[i][j];
            total += scores[i][j];
        }
        printf("生徒%dの合計: %d\n", i + 1, row_total);
    }

    avg = (double)total / (3 * 4);
    printf("全体平均: %.2f\n", avg);
    return 0;
}

このように、生徒×科目の形で点数を管理する場合に2次元配列+二重ループが活躍します。実際の成績管理システムや統計処理でも同様のパターンが使われています。

⚠️ ネストが深くなりすぎることの弊害

3重・4重のネストはコードの可読性を著しく下げます。ネストが3重以上になる場合は、内側の処理を別の関数に切り出すことを検討してください。「関数化」はC言語の重要なテクニックです。

代表菅澤 代表菅澤
弊社でもデータ集計処理にC言語のネストループを使うことがあります。3重ネストを見たら、まず「内側の処理を関数にできないか」と考えるのが習慣になっています。

05 無限ループ for(;;) の書き方と用途 意図的な無限ループの正しい使い方

C言語では、条件式を省略することで無限ループを作ることができます。無限ループと聞くとバグのように聞こえますが、実は意図的に使う場面が多々あります。

C
/* for文で無限ループを作る方法 */
for (;;) {
    /* 無限に繰り返す処理 */
}

📚 用語解説

無限ループ:終了条件がなく、理論上永遠に繰り返し実行されるループ。組み込みシステムのメインループ、サーバーの接続待機処理、インタラクティブなメニュー処理などで意図的に使われます。break文と組み合わせて終了条件を設定するのが一般的です。

5-1. 無限ループの正しい使い方(breakと組み合わせ)

C
#include <stdio.h>

int main(void) {
    int input;

    printf("数値を入力してください(0で終了):\n");

    for (;;) {                    /* 無限ループ開始 */
        printf("入力: ");
        scanf("%d", &input);

        if (input == 0) {
            printf("終了します\n");
            break;                /* 0が入力されたらループ脱出 */
        }

        printf("入力された値: %d\n", input);
    }

    return 0;
}

for(;;) とbreak文を組み合わせることで、「特定の入力があるまで処理を繰り返す」という自然なコードが書けます。このパターンはメニュー処理やユーザー入力のバリデーションで非常によく登場します。

5-2. 組み込みシステムでの無限ループ

マイコン(Arduino、STM32など)のプログラミングでは、メインループを無限ループで書くことが標準的です。機器が起動している間ずっとセンサーを読み取り続けたり、LEDを制御し続ける処理は、無限ループが最適です。

C
/* 組み込みシステムの典型的なメインループ */
int main(void) {
    /* 初期化処理 */
    init_sensors();
    init_display();

    /* 機器が動いている間ずっとループ */
    for (;;) {
        read_sensor_data();
        update_display();
        check_buttons();
    }

    return 0;  /* 実際には到達しない */
}
💡 while(1) と for(;;) は同じ

C言語で無限ループを書く場合、for(;;) と while(1) はまったく同じ動作をします。どちらを使うかはプロジェクトのコーディング規約や個人の好みによります。組み込み開発では while(1) がよく使われる傾向があります。

AI鬼管理山崎 AI鬼管理山崎
「無限ループ = バグ」というイメージは半分正解で半分誤解です。意図的な無限ループは正しいbreak文と組み合わせることで非常に強力なパターンになります。

06 break文でループを抜ける 条件に合致した瞬間にループを脱出する

break文はループを即座に終了させる命令です。for文、while文、do-while文のいずれでも使えます。また、switch文でも多用される重要な構文です。

📚 用語解説

break文:ループや switch 文を即座に終了させる制御文。break が実行されると、それを囲む最も内側のループ(または switch)を抜けて、次の処理に移ります。複数のネストがある場合は、一番内側のループだけを抜けます。

6-1. 配列から特定の値を検索してbreakする

C
#include <stdio.h>

int main(void) {
    int data[] = {15, 38, 7, 92, 41, 56, 23};
    int target = 41;
    int i;
    int found = 0;  /* 見つかったかどうかのフラグ */

    for (i = 0; i < 7; i++) {
        if (data[i] == target) {
            printf("値 %d は %d 番目にあります\n", target, i);
            found = 1;
            break;  /* 見つかったのでループ終了 */
        }
    }

    if (!found) {
        printf("値 %d は見つかりませんでした\n", target);
    }

    return 0;
}

/* 出力:
値 41 は 4 番目にあります
*/

目的の値を見つけた瞬間にbreak文でループを終了させることで、それ以降の無駄な検索を省くことができます。これを「線形探索」と呼び、最も基本的なアルゴリズムのひとつです。

6-2. ネストループでのbreak(注意点)

注意が必要なのは、ネストしたfor文でbreak文を使うと、一番内側のループしか終了しないという点です。

C
#include <stdio.h>

int main(void) {
    int i, j;

    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            if (j == 1) {
                break;  /* 内側のfor文だけを抜ける */
            }
            printf("i=%d, j=%d\n", i, j);
        }
    }
    return 0;
}

/* 出力:
i=0, j=0
i=1, j=0
i=2, j=0
* j=1 で内側ループが終了するが、外側ループは継続する */

外側のループまで抜けたい場合は、フラグ変数を使う方法が一般的です。

C
#include <stdio.h>

int main(void) {
    int i, j;
    int done = 0;

    for (i = 0; i < 5 && !done; i++) {
        for (j = 0; j < 5; j++) {
            if (i == 2 && j == 3) {
                printf("i=%d, j=%d で終了\n", i, j);
                done = 1;
                break;
            }
        }
    }
    return 0;
}
⚠️ gotoによる多重ループ脱出は推奨しない

C言語には goto 文という任意の場所にジャンプできる命令がありますが、コードの流れが複雑になるため現代のプログラミングでは原則使用しません。フラグ変数かループ構造のリファクタリングで対処するのが正しいアプローチです。

代表菅澤 代表菅澤
「breakで外側のループも抜けられると思っていた」という勘違いは非常に多いです。二重ループでbreakを使う前に「どのループを抜けるのか」を必ず確認する習慣を付けましょう。
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

07 continue文でスキップする 特定条件の反復だけをスキップして次のループへ

continue文はループを終了させるのではなく、現在の繰り返しだけをスキップして次の繰り返しに進む命令です。「今回だけはパスして、ループ自体は続けたい」というときに使います。

📚 用語解説

continue文:現在の繰り返し処理を中断して、次の繰り返しに移行する制御文。break が「ループを抜ける」のに対して、continue は「今回の繰り返しだけをスキップする」という違いがあります。ループ自体は継続します。

7-1. 偶数だけを表示する(奇数をスキップ)

C
#include <stdio.h>

int main(void) {
    int i;

    printf("1から10までの偶数:\n");
    for (i = 1; i <= 10; i++) {
        if (i % 2 != 0) {
            continue;  /* 奇数のときはスキップして次のループへ */
        }
        printf("%d\n", i);
    }
    return 0;
}

/* 出力:
1から10までの偶数:
2
4
6
8
10
*/

i % 2 != 0 (iを2で割った余りが0でない、つまり奇数)のときにcontinueが実行され、printf がスキップされます。i++ の更新式は実行されてから次のループに進む点がbreakとの大きな違いです。

7-2. 特定の値を除外して合計を求める

C
#include <stdio.h>

int main(void) {
    int scores[] = {85, -1, 92, 78, -1, 90, 65};
    int i;
    int sum = 0;
    int count = 0;

    /* -1 は「欠席」を意味するので合計から除外する */
    for (i = 0; i < 7; i++) {
        if (scores[i] == -1) {
            continue;  /* 欠席データはスキップ */
        }
        sum += scores[i];
        count++;
    }

    printf("有効データ数: %d\n", count);
    printf("合計: %d\n", sum);
    if (count > 0) {
        printf("平均: %.2f\n", (double)sum / count);
    }
    return 0;
}

/* 出力:
有効データ数: 5
合計: 410
平均: 82.00
*/

「-1は欠席」という意味を持つデータを含む配列で、欠席データをスキップして平均点を計算しています。実際のデータ処理では、このような「無効値・欠損値のスキップ」にcontinueが活躍します。

7-3. breakとcontinueの使い分けまとめ

breakcontinue
効果ループを完全に終了する現在の繰り返しをスキップして次へ
ループ継続ループ終了(次の処理へ移行)ループは継続する
for文での更新式実行されない実行される(i++ など)
主な用途探索で目的値を発見、エラー脱出特定条件の処理をスキップ
💡 breakとcontinueの覚え方

break は「ブレーキ(停止)」、continue は「コンティニュー(続行)」。ループ全体を止めたいときはbreak、今回だけスキップして続けたいときはcontinueです。この直感的な意味合いで覚えると間違えにくくなります。

AI鬼管理山崎 AI鬼管理山崎
continueとbreakの混同は非常によくあるミスです。「ループが終わっているはずなのに処理が続く」「スキップしたはずなのにループが止まった」という場合は、breakとcontinueを使い間違えていないか確認してください。

08 for文で配列を操作する 全要素処理・最大値探索・ソートの基礎

C言語でfor文が最もよく使われる場面のひとつが配列の操作です。配列の全要素を走査して処理するパターンは、データ処理の基本中の基本です。

8-1. 配列の全要素を表示する

C
#include <stdio.h>

int main(void) {
    int arr[] = {10, 20, 30, 40, 50};
    int size = sizeof(arr) / sizeof(arr[0]);  /* 配列の要素数を自動計算 */
    int i;

    printf("配列の要素数: %d\n", size);
    for (i = 0; i < size; i++) {
        printf("arr[%d] = %d\n", i, arr[i]);
    }
    return 0;
}

📚 用語解説

sizeof演算子:変数や型のバイト数を返す演算子。sizeof(arr) は配列全体のバイト数、sizeof(arr[0]) は配列1要素のバイト数を返します。両者を割ることで配列の要素数が求められます。配列のサイズをハードコーディングせずに済むため、可読性と保守性が向上します。

8-2. 配列から最大値・最小値を探索する

C
#include <stdio.h>

int main(void) {
    int scores[] = {72, 98, 55, 83, 67, 91, 44};
    int size = sizeof(scores) / sizeof(scores[0]);
    int i;
    int max_val = scores[0];  /* 最初の要素で初期化 */
    int min_val = scores[0];
    int max_idx = 0;
    int min_idx = 0;

    for (i = 1; i < size; i++) {  /* 2番目以降を比較 */
        if (scores[i] > max_val) {
            max_val = scores[i];
            max_idx = i;
        }
        if (scores[i] < min_val) {
            min_val = scores[i];
            min_idx = i;
        }
    }

    printf("最高点: %d(%d番目)\n", max_val, max_idx + 1);
    printf("最低点: %d(%d番目)\n", min_val, min_idx + 1);
    return 0;
}

/* 出力:
最高点: 98(2番目)
最低点: 44(7番目)
*/

最大値を求めるアルゴリズムは「最初の要素で初期化 → 2番目以降と比較」が定石です。このパターンは統計処理や順位付けなどで頻繁に使われます。

8-3. 文字列(char配列)をfor文で処理する

C
#include <stdio.h>
#include <string.h>

int main(void) {
    char str[] = "Hello, C Language!";
    int i;
    int len = strlen(str);
    int upper_count = 0;

    /* 文字列の各文字を走査 */
    for (i = 0; i < len; i++) {
        printf("str[%d] = '%c'\n", i, str[i]);
        if (str[i] >= 'A' && str[i] <= 'Z') {
            upper_count++;
        }
    }

    printf("\n大文字の数: %d\n", upper_count);
    return 0;
}
代表菅澤 代表菅澤
配列の操作パターンは「初期化 → ループで走査 → 条件に応じた処理」の3ステップが基本です。この形を意識するだけで、どんな配列操作も設計しやすくなります。
💡 配列の境界外アクセスに注意

C言語ではfor文のカウンタが配列サイズを超えても、コンパイルエラーにはなりません。「arr[size]」のような範囲外アクセスは未定義動作(バグの温床)です。ループ条件は必ず「i < size」(<= ではなく <)で書きましょう。

09 for文とwhileの書き換え比較 状況に応じたループ構文の選択基準

for文とwhile文は互いに書き換えが可能です。しかし、どちらを使うかによってコードの読みやすさが大きく変わります。

9-1. for文をwhile文で書き換える

for文while文
構造初期化・条件・更新が1行分散して書く
読みやすさループ範囲が一目でわかる初期化がループの外に出る
向いている場面繰り返し回数が明確条件が複雑・回数が不定
C
/* for文 */
for (i = 0; i < 10; i++) {
    printf("%d\n", i);
}

/* 同じ処理をwhile文で書く */
i = 0;          /* 初期化がループの外 */
while (i < 10) {
    printf("%d\n", i);
    i++;        /* 更新がループ本体の末尾 */
}

どちらも同じ結果になりますが、繰り返し回数が決まっている場合はfor文の方が意図が明確です。「0から9まで10回繰り返す」という情報がfor文なら1行に凝縮されています。

9-2. while文の方が自然なケース

C
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    FILE *fp;
    char line[256];

    fp = fopen("data.txt", "r");
    if (fp == NULL) return 1;

    /* ファイルの終端まで読み込む(行数が不明) */
    while (fgets(line, sizeof(line), fp) != NULL) {
        printf("%s", line);
    }

    fclose(fp);
    return 0;
}

ファイルの読み込みのように「何行あるかわからない」ケースでは、while文の方が自然です。カウンタ変数が不要で、「ファイルを読めた間は続ける」という意図がすっきり書けます。

繰り返し回数が確定
for文を選択
コードが簡潔・意図明確
繰り返し回数が不定
while文を選択
条件の変化でループ制御
💡 プロの判断基準

for文・while文のどちらを選ぶかは「カウンタ変数が必要かどうか」で判断するのが実践的です。カウンタが要るならfor文、条件だけで制御できるならwhile文、という基準を持つと迷いにくくなります。

Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

10 初期化子なし・更新なしのfor文(柔軟な構文) 3要素を省略したfor文の応用テクニック

C言語のfor文では、初期化式・条件式・更新式のすべてを省略できます。この柔軟性により、さまざまなバリエーションのループが記述可能です。

10-1. 初期化式を省略するケース

C
#include <stdio.h>

int main(void) {
    int i = 0;  /* for文の外で初期化 */

    /* 初期化式を省略 */
    for (; i < 5; i++) {
        printf("%d\n", i);
    }

    printf("ループ後の i: %d\n", i);  /* i = 5 */
    return 0;
}

初期化式を省略する主な用途は「ループ後もカウンタ変数の値を使いたい場合」です。for文が終わった後に i の値(この例では5)を参照できます。

10-2. 更新式を省略するケース(ループ本体で更新)

C
#include <stdio.h>

int main(void) {
    int i;

    /* 更新式を省略し、ループ本体内で更新 */
    for (i = 1; i <= 100; ) {
        printf("%d\n", i);
        i *= 2;  /* 2倍ずつ増やす(1, 2, 4, 8, 16, 32, 64...) */
    }
    return 0;
}

「2倍ずつ増やす」のように、インクリメント以外の更新が必要な場合は更新式を省略してループ本体内に書くと読みやすくなります。

10-3. 複数の変数を同時に制御する

C
#include <stdio.h>

int main(void) {
    int i, j;

    /* カンマ演算子で複数の変数を同時に制御 */
    for (i = 0, j = 10; i < j; i++, j--) {
        printf("i=%d, j=%d\n", i, j);
    }
    return 0;
}

/* 出力:
i=0, j=10
i=1, j=9
i=2, j=8
i=3, j=7
i=4, j=6
*/

📚 用語解説

カンマ演算子:複数の式をコンマで区切って順番に評価する演算子。for文の初期化式や更新式で「i=0, j=10」のように複数の変数を一度に操作するときに使います。全体の値は最後の式の値になります。

AI鬼管理山崎 AI鬼管理山崎
初期化式・更新式の省略は「柔軟さ」がある半面、使いすぎると可読性が落ちます。プロジェクトのコーディング規約を確認して、チームの方針に従うことが重要です。

11 GENAI実運用でのC言語活用 業務自動化システムにおけるC言語の役割

株式会社GENAIでは、AI自動化システムの開発においてC言語が重要な役割を担うことがあります。特に組み込みシステム連携・高速データ処理・システムプログラミングの分野でC言語が選ばれます。

11-1. C言語が選ばれる業務シーン

GENAIでAIを活用した業務自動化を推進する中で、C言語が使われる主なシーンを紹介します。

✔️センサーデータの高速処理:IoTデバイスからのリアルタイムデータをC言語で前処理してAIに渡す
✔️バッチ処理の高速化:大量データのソート・集計はPythonより高速なCで実装
✔️組み込み制御:製造業クライアントのFA(ファクトリーオートメーション)制御プログラム
✔️拡張モジュール:PythonからC言語の高速関数を呼び出すPython拡張モジュール(Cython)の作成

11-2. for文を使ったデータ前処理の実例

C
/*
 * センサーデータの移動平均を計算するC言語コード
 * GENAIのIoT連携システムで使用するパターン
 */
#include <stdio.h>

#define DATA_SIZE 100
#define WINDOW     5

void moving_average(double *data, double *result, int size, int window) {
    int i, j;
    double sum;

    for (i = 0; i < size - window + 1; i++) {
        sum = 0.0;
        for (j = 0; j < window; j++) {
            sum += data[i + j];
        }
        result[i] = sum / window;
    }
}

int main(void) {
    double sensor_data[DATA_SIZE] = { /* センサーデータ */ 0 };
    double avg_data[DATA_SIZE] = {0};

    moving_average(sensor_data, avg_data, DATA_SIZE, WINDOW);
    printf("移動平均計算完了\n");
    return 0;
}

このコードの moving_average 関数は二重for文を使っています。外側のfor文が「窓の位置」を移動させ、内側のfor文が「各窓内の合計」を計算します。for文のネストが実際のデータ処理でどう使われるかが確認できる実用例です。

11-3. C言語スキルをAI時代に活かす

「AI全盛期にC言語を学ぶ意味はあるのか」という疑問を持つ方もいるでしょう。GENAIの見解として、C言語の学習はプログラミングの本質を理解する上で今でも非常に有効です。

✔️メモリ管理・ポインタの理解がハードウェアやOSの動作理解に直結する
✔️C言語で書けるアルゴリズムは他の言語でも容易に実装できる
✔️組み込み・製造DX分野ではC言語スキルが今も高い需要を持つ
✔️Claude CodeなどのAIツールを使えば、C言語のコード生成・デバッグが格段に効率化される
代表菅澤 代表菅澤
C言語を学ぶことは「プログラミングの基礎体力を鍛える」ことと同義です。変数・配列・ループ・関数というC言語の概念は、Python・Java・JavaScriptすべての基盤になっています。C言語をマスターした人は他の言語の習得も早いです。

12 Claude CodeにC言語のfor文コードを生成させる AIを活用してC言語の学習・開発を加速する

ここまでfor文の書き方を解説してきましたが、実際のコーディング現場ではAIアシスタントを活用してコードを自動生成する場面が増えています。特にClaude CodeはC言語のコード生成・説明・デバッグにおいて非常に優秀なAIです。

12-1. Claude Codeでfor文コードを生成するプロンプト例

Claude Codeに対して、以下のようなプロンプトでC言語のfor文コードを生成させることができます。

TEXT
# Claude Codeへのプロンプト例

「C言語で、配列に格納された学生の点数データから
最高点・最低点・平均点を計算するプログラムを書いてください。
for文を使って配列を走査し、コメントを日本語で記入してください。」

このプロンプトに対してClaude Codeが生成するコードは、先ほど紹介した「最大値探索」の実用版です。学習段階で「こういう処理を書きたいが書き方がわからない」というときに、Claude Codeに雛形を生成させてから理解する、という使い方が効果的です。

12-2. for文のデバッグをClaude Codeに依頼する

for文のバグは初心者が詰まりやすいポイントです。特に「無限ループ」「配列の境界外アクセス」「breakとcontinueの混同」などは発見が難しいです。

TEXT
# デバッグプロンプト例

「以下のC言語コードが無限ループになります。原因と修正方法を教えてください。

int i = 0;
for (i = 0; i == 10; i++) {
    printf("%d\n", i);
}」

Claude Codeは「i == 10 は代わりに i < 10 または i != 10 にすべき。条件式に == を使うと i が初期値 0 のとき条件が偽になり、ループに入らない」と正確に回答します。

12-3. Claude Codeを使ったC言語学習ロードマップ

基本構文をClaude Codeで確認
サンプルコードを自分で写経・実行
課題をClaude Codeに提示して説明
自力でコードを書く
Claude Codeでレビュー・改善

このサイクルを繰り返すことで、従来の参考書学習よりも3〜5倍速くC言語を習得できます。わからない点はその場でClaude Codeに聞けるため、「詰まって時間を無駄にする」ことが大幅に減ります。

12-4. Claude Codeが得意なC言語の支援タスク

✔️コード生成:「〇〇をするC言語コードを書いて」でほぼ即座に動くコードが得られる
✔️エラー説明:コンパイルエラーをそのままコピペして「なぜ?」と聞くだけで原因と修正法を解説
✔️アルゴリズム解説:「このfor文はどういう動作をするか日本語で説明して」で理解を深める
✔️コードレビュー:書いたコードをClaude Codeに見せると改善点やより良い書き方を提案
✔️最適化:「このネストループをより効率的に書き換えて」でパフォーマンス改善
代表菅澤 代表菅澤
GENAIでは新しいプログラミング言語を習得する際にClaude Codeを積極活用しています。C言語のポインタや構造体など「本で読んでもわかりにくい概念」を具体的なコード例と一緒に説明してもらえるのが大きな強みです。
AI鬼管理山崎 AI鬼管理山崎
C言語を完全に独学で学ぼうとすると、特にポインタ周りで多くの方が挫折します。Claude Codeをメンターとして使うことで、疑問をその場で解消しながら学習できます。従来の学習環境とは雲泥の差です。
🏆
VERDICT
Claude に軍配
Claude Codeはfor文・ポインタ・構造体などC言語の難所を的確に解説してくれる最高の学習パートナー。自力で書いたコードのレビューにも使える。
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

13 よくある質問 C言語のfor文についての疑問を解消

Q. C言語のfor文で「i = 0」から始めるのか「i = 1」から始めるのかわかりません。

A. 配列のインデックスは0から始まる(最初の要素は arr[0])ため、配列を操作するfor文は i = 0 から始めます。「1からNまでの処理」のように人間の数え方に合わせる場合は i = 1 から始めます。コードの目的を先に明確にしてから初期値を決める習慣を付けましょう。

Q. for文の中で変数を宣言できますか?

A. C99以降の規格では for (int i = 0; i < 10; i++) のように初期化式内で変数を宣言できます。ただし、C89/C90規格(古い規格)では関数冒頭での宣言が必要です。コンパイラのオプションや対象環境の規格を確認してください。GCCでは -std=c99 または -std=c11 オプションでC99/C11規格が有効になります。

Q. for文とwhile文はどちらを使えばいいですか?

A. 繰り返し回数が事前に決まっている場合はfor文、条件が変化するまで繰り返す場合はwhile文が適しています。ファイル読み込み・ユーザー入力待機などはwhile文、配列処理・固定回数の計算はfor文というのが一般的な選択基準です。なお、どちらも書き換え可能なので、チームの規約や読みやすさを優先してください。

Q. breakで二重ループ(外側のfor文)を一度に抜けることはできますか?

A. C言語では break は最も内側のループしか抜けられません。外側のループも抜けたい場合は、①フラグ変数を用意して外側のループ条件に組み込む、②goto文を使う(非推奨)、③処理を関数に分けてreturnで抜けるという方法があります。実務ではフラグ変数または関数化が一般的です。

Q. for文の無限ループ for(;;) と while(1) の違いはありますか?

A. 動作的には同一で、どちらも永遠に繰り返す無限ループを作ります。コンパイラが生成するコードも通常は同じです。違いは「書き方のスタイル」のみです。組み込み開発では while(1)、システムプログラミングでは for(;;) が好まれる傾向がありますが、プロジェクトの規約に従うのが最善です。

Q. Claude CodeでC言語のコードを生成してもらうためのコツを教えてください。

A. ①「何をしたいか」を日本語で明確に説明する、②「for文を使って」「コメントを日本語で」など制約条件を指定する、③出力例や期待する入力・出力を具体的に伝えることが効果的です。また、生成されたコードが動かない場合は、エラーメッセージをそのままClaude Codeに見せるだけで修正方法を提示してくれます。

まとめ:C言語のfor文をマスターしてコーディング力を伸ばそう

この記事では、C言語のfor文について次のことを解説しました。

✔️for文の基本構文:初期化・条件・更新の3要素と実行の流れ
✔️基本的な使い方:1〜100の合計、九九の表、カウントダウン
✔️二重ループ:2次元配列・行列処理でのネストfor文
✔️無限ループ for(;;):break文と組み合わせた正しい使い方
✔️break文:配列探索・ネストループ脱出での活用パターン
✔️continue文:特定条件のスキップ・データ前処理での活用
✔️配列操作:全要素走査・最大値探索・文字列処理
✔️for文 vs while文:状況別の選択基準
✔️省略構文:初期化子なし・更新なしの柔軟なfor文
✔️Claude Codeの活用:C言語コードの自動生成・デバッグ・学習

C言語のfor文は、プログラミングの基礎力を問う最重要構文のひとつです。本記事のサンプルコードを実際に手元で動かして、各パターンの動作を体で覚えることが上達への近道です。

そして、学習の中で疑問が生まれたときはClaude Codeを積極的に活用してください。「なぜこうなるの?」「もっと良い書き方は?」という質問に、Claude Codeはリアルタイムで的確な回答を出してくれます。

代表菅澤 代表菅澤
for文をマスターした先には、ポインタ・構造体・関数ポインタとC言語の面白い世界が広がっています。今日学んだfor文の応用パターンは必ずそこでも活きてきます。ぜひ継続してください。
AI鬼管理山崎 AI鬼管理山崎
AI鬼管理では、Claude Codeを活用した業務自動化の実践例を引き続き発信していきます。C言語に限らず、AIを使ったプログラミング学習の加速方法も今後の記事で詳しく解説する予定です。
AIAI鬼管理

AI鬼管理へのお問い合わせ

この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。

会社名を入力してください
業種を選択してください
お名前を入力してください
正しいメールアドレスを入力してください

1つ以上選択してください
1つ以上選択してください
月額コストを選択してください

約1時間のオンライン面談(Google Meet)です

空き枠を取得中...
面談日時を選択してください

予約確定後、Google Calendarの招待メールをお届けします。
しつこい営業は一切ございません。

監修 最終更新日: 2026年7月18日
菅澤孝平
菅澤 孝平 株式会社GENAI 代表取締役
  • AI業務自動化サービス「AI鬼管理」を運営 — Claude Code を活用し、経営者の業務を「AIエージェントに任せる仕組み」へ転換するパーソナルトレーニングを 伴走構築 で提供。日報・採用・問い合わせ対応・経費精算・議事録・データ集計・営業リスト等の定型業務を、AIに代行させる体制を経営者と一緒に作り込む
  • Claude Code 実装ノウハウを 経営者・法人クライアント に直接指導。生成AIを「便利ツール」ではなく 「業務を任せる存在」 として運用する手法を体系化
  • 「やらせ切る管理」メソッドの開発者。シンゲキ株式会社(2021年設立・鬼管理専門塾運営)にて累計3,000名以上の学習者を志望校合格に導いた管理メソッドを、AI × 経営者支援 に転用
  • 著書『3カ月で志望大学に合格できる鬼管理』(幻冬舎)、『親の過干渉こそ、最強の大学受験対策である。』(講談社)
  • メディア出演: REAL VALUE / カンニング竹山のイチバン研究所 / ええじゃないかBiz 他
  • 明治大学政治経済学部卒
現在は AI鬼管理(Claude Code活用の伴走型パーソナルトレーニング)を主事業とし、経営者と二人三脚で「AIに業務を任せる仕組み」を実装。「実行を強制する環境」を AI で構築する手法を、自社の実運用知見をもとに発信している。