【C言語入門】for文・while文をわかりやすく解説！

# 【C言語入門】for文・while文をわかりやすく解説！

:::note warn
 **注意**  
 本記事の内容には、誤った知識や古い情報が含まれている可能性があります。  
 必ず公式ドキュメントや信頼できる参考書なども併せてご確認ください。
:::
---

:::note info
 **まだC言語の開発環境ができていない方へ**  
 この記事ではC言語の`scanf`について解説していますが、**まだC言語の開発環境（コンパイラやエディタ）が整っていない方**は、まず環境構築から始めましょう。  
 特にWindowsユーザーの方は、以下の記事が参考になります。  
 [VSCodeにC言語の開発環境を構築するには？（Qiita）](https://qiita.com/Ayanokoji/items/60b6873c3bc00084eeba)  
  
 この記事では、**Visual Studio Code（VSCode）とMinGW**を使ったC言語開発環境の作り方が、初心者向けに丁寧に解説されています。  
  
 **環境構築が完了したら、この記事の内容を参考にC言語のプログラムを書いてみましょう！**
:::

C言語を学び始めると必ず出てくる「for文」と「while文」。  
これらは**繰り返し処理（ループ）**を行うための基本的な文法です。  
「同じ処理を何度も繰り返したい」「配列の全要素を順番に処理したい」など、プログラムを書く上で欠かせません。

この記事では、for文・while文の基本から、よくある間違い、実践例まで、**完全初心者向け**にやさしく解説します！

---

## for文・while文ってなに？

for文やwhile文は、**同じ処理を何度も繰り返す**ための仕組みです。

- 例え話：「100回腕立て伏せをする」→ 1回ずつ数えて繰り返すのは大変。for文やwhile文を使えば、プログラムが自動で繰り返してくれます。

---

## for文の基本的な書き方

for文は「回数が決まっている繰り返し」によく使います。

```c
for (初期化; 条件; 更新) {
    // 繰り返したい処理
}
```

### サンプル：1から10まで表示する

```c:sample1.c
#include <stdio.h>

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

**解説**  
- `int i = 1;` でカウンタ変数iを1からスタート
- `i <= 10;` でiが10以下の間、繰り返す
- `i++` でiを1ずつ増やす
- 1から10まで順番に表示される

---

## while文の基本的な書き方

while文は「条件を満たす間、ずっと繰り返す」処理に使います。  
回数が決まっていない場合や、「いつ終わるか分からない」繰り返しに便利です。

```c
while (条件) {
    // 繰り返したい処理
}
```

### サンプル：1から10まで表示する

```c:sample2.c
#include <stdio.h>

int main() {
    int i = 1;
    while (i <= 10) {
        printf("%d\n", i);
        i++;
    }
    return 0;
}
```

**解説**  
- `int i = 1;` でカウンタ変数iを1からスタート
- `while (i <= 10)` でiが10以下の間、繰り返す
- `i++` でiを1ずつ増やす
- 1から10まで順番に表示される

---

## for文とwhile文の違い・使い分け

### どちらも「繰り返し」だけど、使い分けが大事！

- **for文**：回数が決まっているときに使う（例：10回だけ繰り返す）
- **while文**：回数が決まっていないときや、「条件を満たす間ずっと」繰り返したいときに使う（例：ユーザーが0を入力するまで繰り返す）

#### 例え話

- for文は「何回やるか最初に決まっている腕立て伏せ」
- while文は「疲れるまで続ける腕立て伏せ（何回やるか分からない）」

---

## よくある間違い・注意点

### 1. 無限ループに注意！

条件がずっと「真（true）」のままだと、プログラムが止まらなくなります。

```c
int i = 1;
while (i <= 10) {
    printf("%d\n", i);
    // i++ を書き忘れると、iがずっと1のまま無限ループ！
}
```

**対策**  
- カウンタ変数の増減（i++など）を忘れずに！

### 2. セミコロンの位置に注意

```c
for (int i = 1; i <= 10; i++); // ← このセミコロンはダメ！
{
    printf("%d\n", i); // エラーや意図しない動作になる
}
```

**正しくは**  
```c
for (int i = 1; i <= 10; i++) {
    printf("%d\n", i);
}
```

### 3. 変数の初期化忘れ

while文では、カウンタ変数の初期化を忘れやすいです。

---

## 実践例：1からnまでの合計を求める

### for文バージョン

```c:sum_for.c
#include <stdio.h>

int main() {
    int n, sum = 0;
    printf("nの値を入力してください: ");
    if (scanf("%d", &n) != 1) {
        printf("入力エラーです。\n");
        return 1;
    }
    for (int i = 1; i <= n; i++) {
        sum += i;
    }
    printf("1から%dまでの合計は%dです。\n", n, sum);
    return 0;
}
```

### while文バージョン

```c:sum_while.c
#include <stdio.h>

int main() {
    int n, sum = 0, i = 1;
    printf("nの値を入力してください: ");
    if (scanf("%d", &n) != 1) {
        printf("入力エラーです。\n");
        return 1;
    }
    while (i <= n) {
        sum += i;
        i++;
    }
    printf("1から%dまでの合計は%dです。\n", n, sum);
    return 0;
}
```

**入力例**  
```
5
```

**出力例**  
```
1から5までの合計は15です。
```

---

## まとめ

- **for文**は「回数が決まっている繰り返し」に便利
  - 例：10回だけ処理を繰り返す、配列の全要素を順番に処理する
- **while文**は「条件を満たす間ずっと繰り返す」処理に便利
  - 例：ユーザーが0を入力するまで繰り返す、ファイルの終わりまで読み込む
- どちらも「カウンタ変数の初期化」「条件」「更新」を忘れずに！
- セミコロンの位置や無限ループに注意
- 実際に手を動かして、for文・while文の違いを体験しよう

---

この記事を最後までご覧いただきありがとうございました。  
for文・while文はC言語の基礎中の基礎です。  
ぜひ実際にプログラムを書いて、繰り返し処理をマスターしてください！

---
:::note info
## 関連記事

- [【C言語入門】ifとelseをわかりやすく解説！](https://qiita.com/Ayanokoji/items/e3388e8d12a1a6c4e49d)
- [【C言語入門】合計と平均を求める方法をわかりやすく解説！](https://qiita.com/Ayanokoji/items/33e46865e6b83b76076a)
- [【C言語入門】scanfってなに？初心者向けにわかりやすく解説！](https://qiita.com/Ayanokoji/items/b6747e69f5668a28897a)

---
:::