【2026年7月最新】C言語のfor文完全ガイド|break・continue文でループを制御する方法
この記事の内容
C言語を学ぶ上で、for文は最初に壁になる構文のひとつです。「何度処理を繰り返せばいいのかわからない」「break文とcontinue文の使いどころがわからない」という悩みを持つ方は多いでしょう。
この記事では、C言語のfor文の基本構文から始まり、break文・continue文によるループ制御、二重ループ(ネスト)、無限ループ、そして配列との組み合わせまで、具体的なコード例とともに徹底解説します。
さらに記事の後半では、AI(Claude Code)を使ってC言語のfor文コードを自動生成する方法も紹介します。プログラミング学習にAIを活用する方法を知ることで、学習スピードを大きく加速させることができます。
この記事を最後まで読むと、次のことが理解できます。
01 FOR LOOP BASICS C言語のfor文とは(ループ処理の重要性) for文・while文・do-while文の使い分けを理解する
プログラムの中で「同じ処理を繰り返す」ことは非常に頻繁に登場します。たとえば「1から100までの合計を計算する」「配列の全要素を表示する」「条件を満たすまでユーザー入力を待つ」といった処理です。
これらを毎回コードを書き並べることは現実的ではありません。そこで登場するのがループ構文(繰り返し処理)です。C言語には主に3種類のループ構文が用意されています。
📚 用語解説
ループ処理:同じ処理を条件が満たされるまで繰り返し実行する制御構造。「ループ」とは英語で「輪」を意味し、処理が円環状に繰り返されるイメージから来ています。プログラミングにおいてループは最も基本的かつ重要な制御構造のひとつです。
| ループ構文 | 特徴 | 主な使いどころ |
|---|---|---|
| for文 | 繰り返し回数があらかじめ決まっている | 配列の全要素処理、カウンタ制御ループ |
| while文 | 条件が真の間ループ継続 | 繰り返し回数が不定、ファイル読み込みなど |
| do-while文 | 最低1回は必ず実行 | メニュー表示、入力バリデーションなど |
3種類の中でもfor文は最もよく使われます。理由は「初期化・条件・更新」という3つの要素が1行にまとまって見やすく、繰り返し回数が明確なコードを書きやすいからです。
「繰り返し回数があらかじめわかっている」→ for文。「条件が変化するまで何度も繰り返す」→ while文。この判断基準を最初に覚えておくと、コードを書く際に迷う時間が大幅に減ります。
また、for文はコードの読み手にとっても「このループは何回回るのか」がひと目でわかるため、コードの可読性(読みやすさ)が上がるというメリットもあります。大規模なプロジェクトでは可読性が非常に重要になります。
02 SYNTAX for文の基本構文(初期化・条件・更新の3要素) C言語 for文の書き方を1行ずつ丁寧に解説
C言語のfor文の基本構文は次のようになっています。
for (初期化式; 条件式; 更新式) {
/* 繰り返す処理 */
}
この3つの要素がfor文の核心です。それぞれの役割を詳しく見ていきましょう。
2-1. 初期化式(ループ開始前に1回だけ実行)
初期化式はfor文が実行される最初の1回だけ評価されます。通常は「カウンタ変数の初期値設定」に使います。
int i = 0; /* iという変数を0で初期化 */
「i」はループカウンタの慣用的な変数名です(index・iteratorの頭文字)。0から始めることが多いですが、1や任意の値から始めることも可能です。
📚 用語解説
カウンタ変数:ループの繰り返し回数を管理するための変数。for文では慣習的に「i」「j」「k」という名前が使われます。i は外側のループ、j は内側のループ(ネスト時)、k はさらに内側のループに使うのが一般的です。
2-2. 条件式(ループを続けるかどうかを判定)
条件式は各ループの繰り返しの前に評価されます。条件式が真(true / 非ゼロ)の間はループを継続し、偽(false / 0)になった時点でループを終了します。
i < 10; /* i が 10 より小さい間はループ継続 */
条件式には不等号(<, >, <=, >=)や等値比較(==, !=)を使います。i <= 9 と i < 10 は同じ意味ですが、C言語では「i < 配列サイズ」という書き方が慣習的に多く使われます。
if文やfor文の条件式で代入演算子「=」を使ってしまうミスは初心者に非常に多いです。「i = 10」と書くと「iに10を代入する」という意味になり、返り値(10)は常に真になるため無限ループになります。比較には必ず「i == 10」と「==」を使いましょう。
2-3. 更新式(各繰り返しの末尾で実行)
更新式は各ループの末尾(繰り返し処理の実行後)に評価されます。通常はカウンタ変数をインクリメント(1増やす)またはデクリメント(1減らす)します。
i++ /* i をインクリメント(i = i + 1 と同じ) */ i-- /* i をデクリメント(i = i - 1 と同じ) */ i += 2 /* i を2ずつ増やす */
2-4. for文の実行の流れを図で理解する
この順序を頭に入れておくことで、「いつ条件が評価されるのか」「更新式はいつ実行されるのか」という疑問がクリアになります。
#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
*/
03 EXAMPLES 基本的なfor文の例(1〜100の合計、九九の表) 実際のコードで理解を深める
理論を理解したら、実際のコードで動かしてみましょう。for文の定番サンプルを3つ紹介します。
3-1. 1から100までの合計を計算する
最も基本的なfor文の使い方のひとつが「1からNまでの合計を求める」処理です。
#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 = sum + i の省略形です。i++ が i = i + 1 の省略形であるのと同じ考え方です。このような複合代入演算子(+=, -=, *=, /=)はC言語でよく登場します。
3-2. 九九の表を表示する(二重ループの予告)
次は九九の表を表示するコードです。これは後のセクションで詳しく解説する「二重ループ(ネスト)」を先に体験する例です。
#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-- にするだけです。
#include <stdio.h>
int main(void) {
int i;
printf("カウントダウン開始!\n");
for (i = 10; i >= 1; i--) {
printf("%d\n", i);
}
printf("発射!\n");
return 0;
}
04 NESTED LOOP 二重ループ(ネスト)の使い方 2次元配列との組み合わせ・行列処理
for文の中にさらにfor文を入れることをネスト(入れ子)と呼びます。九九の表でも使いましたが、ネストは2次元配列や行列処理などで非常によく使われます。
📚 用語解説
ネスト(入れ子):for文の中に別のfor文を入れた構造。外側のループが1回回るたびに、内側のループが全回数回ります。2次元配列の全要素にアクセスする場合など、行×列の組み合わせを処理するシーンで多用されます。
4-1. 2次元配列の全要素を処理する
#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. 行列の合計・平均を計算する
#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言語の重要なテクニックです。
05 INFINITE LOOP 無限ループ for(;;) の書き方と用途 意図的な無限ループの正しい使い方
C言語では、条件式を省略することで無限ループを作ることができます。無限ループと聞くとバグのように聞こえますが、実は意図的に使う場面が多々あります。
/* for文で無限ループを作る方法 */
for (;;) {
/* 無限に繰り返す処理 */
}
📚 用語解説
無限ループ:終了条件がなく、理論上永遠に繰り返し実行されるループ。組み込みシステムのメインループ、サーバーの接続待機処理、インタラクティブなメニュー処理などで意図的に使われます。break文と組み合わせて終了条件を設定するのが一般的です。
5-1. 無限ループの正しい使い方(breakと組み合わせ)
#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を制御し続ける処理は、無限ループが最適です。
/* 組み込みシステムの典型的なメインループ */
int main(void) {
/* 初期化処理 */
init_sensors();
init_display();
/* 機器が動いている間ずっとループ */
for (;;) {
read_sensor_data();
update_display();
check_buttons();
}
return 0; /* 実際には到達しない */
}
C言語で無限ループを書く場合、for(;;) と while(1) はまったく同じ動作をします。どちらを使うかはプロジェクトのコーディング規約や個人の好みによります。組み込み開発では while(1) がよく使われる傾向があります。
06 BREAK STATEMENT break文でループを抜ける 条件に合致した瞬間にループを脱出する
break文はループを即座に終了させる命令です。for文、while文、do-while文のいずれでも使えます。また、switch文でも多用される重要な構文です。
📚 用語解説
break文:ループや switch 文を即座に終了させる制御文。break が実行されると、それを囲む最も内側のループ(または switch)を抜けて、次の処理に移ります。複数のネストがある場合は、一番内側のループだけを抜けます。
6-1. 配列から特定の値を検索してbreakする
#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文を使うと、一番内側のループしか終了しないという点です。
#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 で内側ループが終了するが、外側ループは継続する */
外側のループまで抜けたい場合は、フラグ変数を使う方法が一般的です。
#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;
}
C言語には goto 文という任意の場所にジャンプできる命令がありますが、コードの流れが複雑になるため現代のプログラミングでは原則使用しません。フラグ変数かループ構造のリファクタリングで対処するのが正しいアプローチです。
07 CONTINUE STATEMENT continue文でスキップする 特定条件の反復だけをスキップして次のループへ
continue文はループを終了させるのではなく、現在の繰り返しだけをスキップして次の繰り返しに進む命令です。「今回だけはパスして、ループ自体は続けたい」というときに使います。
📚 用語解説
continue文:現在の繰り返し処理を中断して、次の繰り返しに移行する制御文。break が「ループを抜ける」のに対して、continue は「今回の繰り返しだけをスキップする」という違いがあります。ループ自体は継続します。
7-1. 偶数だけを表示する(奇数をスキップ)
#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. 特定の値を除外して合計を求める
#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の使い分けまとめ
| break | continue | |
|---|---|---|
| 効果 | ループを完全に終了する | 現在の繰り返しをスキップして次へ |
| ループ継続 | ループ終了(次の処理へ移行) | ループは継続する |
| for文での更新式 | 実行されない | 実行される(i++ など) |
| 主な用途 | 探索で目的値を発見、エラー脱出 | 特定条件の処理をスキップ |
break は「ブレーキ(停止)」、continue は「コンティニュー(続行)」。ループ全体を止めたいときはbreak、今回だけスキップして続けたいときはcontinueです。この直感的な意味合いで覚えると間違えにくくなります。
08 ARRAY OPERATION for文で配列を操作する 全要素処理・最大値探索・ソートの基礎
C言語でfor文が最もよく使われる場面のひとつが配列の操作です。配列の全要素を走査して処理するパターンは、データ処理の基本中の基本です。
8-1. 配列の全要素を表示する
#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. 配列から最大値・最小値を探索する
#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文で処理する
#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;
}
C言語ではfor文のカウンタが配列サイズを超えても、コンパイルエラーにはなりません。「arr[size]」のような範囲外アクセスは未定義動作(バグの温床)です。ループ条件は必ず「i < size」(<= ではなく <)で書きましょう。
09 FOR vs WHILE for文とwhileの書き換え比較 状況に応じたループ構文の選択基準
for文とwhile文は互いに書き換えが可能です。しかし、どちらを使うかによってコードの読みやすさが大きく変わります。
9-1. for文をwhile文で書き換える
| for文 | while文 | |
|---|---|---|
| 構造 | 初期化・条件・更新が1行 | 分散して書く |
| 読みやすさ | ループ範囲が一目でわかる | 初期化がループの外に出る |
| 向いている場面 | 繰り返し回数が明確 | 条件が複雑・回数が不定 |
/* 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文の方が自然なケース
#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文、という基準を持つと迷いにくくなります。
10 FLEXIBLE SYNTAX 初期化子なし・更新なしのfor文(柔軟な構文) 3要素を省略したfor文の応用テクニック
C言語のfor文では、初期化式・条件式・更新式のすべてを省略できます。この柔軟性により、さまざまなバリエーションのループが記述可能です。
10-1. 初期化式を省略するケース
#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. 更新式を省略するケース(ループ本体で更新)
#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. 複数の変数を同時に制御する
#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」のように複数の変数を一度に操作するときに使います。全体の値は最後の式の値になります。
11 GENAI REAL USE GENAI実運用でのC言語活用 業務自動化システムにおけるC言語の役割
株式会社GENAIでは、AI自動化システムの開発においてC言語が重要な役割を担うことがあります。特に組み込みシステム連携・高速データ処理・システムプログラミングの分野でC言語が選ばれます。
11-1. C言語が選ばれる業務シーン
GENAIでAIを活用した業務自動化を推進する中で、C言語が使われる主なシーンを紹介します。
11-2. for文を使ったデータ前処理の実例
/*
* センサーデータの移動平均を計算する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言語の学習はプログラミングの本質を理解する上で今でも非常に有効です。
12 CLAUDE CODE Claude CodeにC言語のfor文コードを生成させる AIを活用してC言語の学習・開発を加速する
ここまでfor文の書き方を解説してきましたが、実際のコーディング現場ではAIアシスタントを活用してコードを自動生成する場面が増えています。特にClaude CodeはC言語のコード生成・説明・デバッグにおいて非常に優秀なAIです。
12-1. Claude Codeでfor文コードを生成するプロンプト例
Claude Codeに対して、以下のようなプロンプトでC言語のfor文コードを生成させることができます。
# Claude Codeへのプロンプト例 「C言語で、配列に格納された学生の点数データから 最高点・最低点・平均点を計算するプログラムを書いてください。 for文を使って配列を走査し、コメントを日本語で記入してください。」
このプロンプトに対してClaude Codeが生成するコードは、先ほど紹介した「最大値探索」の実用版です。学習段階で「こういう処理を書きたいが書き方がわからない」というときに、Claude Codeに雛形を生成させてから理解する、という使い方が効果的です。
12-2. for文のデバッグをClaude Codeに依頼する
for文のバグは初心者が詰まりやすいポイントです。特に「無限ループ」「配列の境界外アクセス」「breakとcontinueの混同」などは発見が難しいです。
# デバッグプロンプト例
「以下の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言語学習ロードマップ
このサイクルを繰り返すことで、従来の参考書学習よりも3〜5倍速くC言語を習得できます。わからない点はその場でClaude Codeに聞けるため、「詰まって時間を無駄にする」ことが大幅に減ります。
12-4. Claude Codeが得意なC言語の支援タスク
13 FAQ よくある質問 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文について次のことを解説しました。
C言語のfor文は、プログラミングの基礎力を問う最重要構文のひとつです。本記事のサンプルコードを実際に手元で動かして、各パターンの動作を体で覚えることが上達への近道です。
そして、学習の中で疑問が生まれたときはClaude Codeを積極的に活用してください。「なぜこうなるの?」「もっと良い書き方は?」という質問に、Claude Codeはリアルタイムで的確な回答を出してくれます。
Claude Codeで業務自動化を90日で叩き込む
経営者向けの伴走型パーソナルトレーニング
Claude Code を業務に落とし込む
専門研修コース一覧
受講者本人の業務を題材に、「使いこなせる」状態になるまで伴走する研修プログラム。1対1特化型・ハンズオン・法人講座の3コースを展開中。業務特化・実装まで踏み込むタイプのClaude Code研修です。
研修コース一覧を見る →AI鬼管理へのお問い合わせ
この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。





