14 break と continue 文

ループの途中で制御を変える2つの命令を学ぶ。
どちらも for・while の中で使える。


14-1 break 文

break はループを即座に終了させる。
ループ条件に関係なく、その時点でループを抜ける。

14_01_break.c
#include <stdio.h>

int main(void)
{
    int i;
    for (i = 1; i <= 10; i++) {
        if (i > 5) {
            break;   /* i が 5 を超えたらループを抜ける */
        }
        printf("%d ", i);
    }
    printf("\n");
    return 0;
}
1 2 3 4 5
✅ break は「条件が成立したらループを終わりにする」用途に使う。
検索・探索処理(見つかったら終了)でよく登場する。

14-2 continue 文

continue はループを終了させず、その回の残りの処理をスキップして次の繰り返しへ進む。

14_02_continue.c
#include <stdio.h>

int main(void)
{
    int i;
    for (i = 1; i <= 5; i++) {
        if (i % 2 == 0) {
            continue;   /* 偶数のときだけスキップ */
        }
        printf("%d ", i);
    }
    printf("\n");
    return 0;
}
1 3 5
✅ continue は「特定の条件を除外する」用途に使う。
偶数をスキップ・エラー値を無視するなど。

14-3 break と continue の違い

breakcontinue
動作ループを完全に終了その回だけスキップして次へ
ループの継続しないする
よく使う場面条件成立で検索終了特定条件の要素を除外

動作の違いを並べて確認

14_03_compare.c
#include <stdio.h>

int main(void)
{
    int i;

    /* break の場合:i == 3 でループ終了 */
    printf("break:    ");
    for (i = 1; i <= 5; i++) {
        if (i == 3) { break; }
        printf("%d ", i);
    }
    printf("\n");

    /* continue の場合:i == 3 のときだけスキップ */
    printf("continue: ");
    for (i = 1; i <= 5; i++) {
        if (i == 3) { continue; }
        printf("%d ", i);
    }
    printf("\n");

    return 0;
}
break:    1 2
continue: 1 2 4 5

14-4 while + break:入力チェックのパターン

「正しい値が入力されるまで繰り返す」という実用的なパターン。

14_04_inputCheck.c
#include <stdio.h>

int main(void)
{
    int n;

    while (1) {              /* 条件が常に真 → 無限ループ */
        printf("1〜10の整数を入力してください: ");
        scanf("%d", &n);
        if (n >= 1 && n <= 10) {
            break;           /* 正しい値なら抜ける */
        }
        printf("無効な値です。もう一度入力してください。\n");
    }

    printf("入力された値: %d\n", n);
    return 0;
}
1〜10の整数を入力してください: 15
無効な値です。もう一度入力してください。
1〜10の整数を入力してください: 0
無効な値です。もう一度入力してください。
1〜10の整数を入力してください: 7
入力された値: 7
while (1) は意図的な無限ループ。break で抜けることを前提にしている。
break を忘れると本当に無限ループになるので注意。

14-5 演習

📝 演習① 3の倍数を除外して合計

1〜20 の整数のうち、3の倍数を除いた合計を計算して表示するプログラムを作れ。

14_05_skipMultiple3.c
#include <stdio.h>

int main(void)
{
    int i, sum = 0;
    for (i = 1; i <= 20; i++) {
        /* 3の倍数のときは continue でスキップ */

        sum += i;
    }
    printf("合計 = %d\n", sum);
    return 0;
}
答えの例を表示
#include <stdio.h>

int main(void)
{
    int i, sum = 0;
    for (i = 1; i <= 20; i++) {
        if (i % 3 == 0) { continue; }
        sum += i;
    }
    printf("合計 = %d\n", sum);
    return 0;
}

実行結果:合計 = 147(1〜20の合計210 から 3+6+9+12+15+18=63 を引いた値)

📝 演習② 最初に見つかる5の倍数

1〜100 の整数を順に調べ、最初に見つかった5の倍数を表示してループを終了するプログラムを作れ。

14_06_findFirst5.c
#include <stdio.h>

int main(void)
{
    int i;
    for (i = 1; i <= 100; i++) {
        /* 5の倍数が見つかったら表示して break */

    }
    return 0;
}
答えの例を表示
#include <stdio.h>

int main(void)
{
    int i;
    for (i = 1; i <= 100; i++) {
        if (i % 5 == 0) {
            printf("最初の5の倍数: %d\n", i);
            break;
        }
    }
    return 0;
}

実行結果:最初の5の倍数: 5


14-6 理解度チェック

Q1. 次のコードの出力として正しいものはどれか。

int i = 0;
while (i < 5) {
    i++;
    if (i == 3) { break; }
    printf("%d ", i);
}
解説を表示

正解:イ

i=1 → 出力、i=2 → 出力、i=3 → break でループ終了。3は出力されない。

Q2. 次のコードの出力として正しいものはどれか。

int i;
for (i = 0; i < 5; i++) {
    if (i == 2) { continue; }
    printf("%d ", i);
}
解説を表示

正解:イ

i=2 のとき continue でその回の printf をスキップする。ループは継続するので 3, 4 は出力される。

Q3. break と continue の説明として正しいものはどれか。

解説を表示

正解:ウ

break はループ全体を終了。continue はその回の残りをスキップして次の繰り返しへ。どちらも for・while どちらでも使える。

Q4. while (1) { ... break; } の構造について正しい説明はどれか。

解説を表示

正解:イ

C言語では 1 は真なので while (1) は無限ループ。
「正しい入力が来るまで繰り返す」などの用途で意図的に使い、break で抜ける。