C言語のきほん|breakでループを終了する

条件に合った瞬間に、すっと抜ける。break文を覚えると、ループ処理はもっと自然に書けます

繰り返し処理は、同じような作業を何度も実行したいときにとても便利です。
ただ、実際のプログラムでは、最初に決めた回数まで必ず続けたいとは限りません。

たとえば、ある条件を満たしたらそこで探索をやめたいことがあります。
入力チェックをしていて、特定の値が入ったら処理を終了したいこともあります。
このような場面で活躍するのが break文 です。

break文を使うと、実行中のループをその場で終了し、ループの外側にある次の処理へ進めます。
for文、while文、do~while文の中で使うことができ、ループ制御の幅をぐっと広げてくれる大切な文です。

ここでは、breakでループを終了する基本的な考え方から、処理の流れ、使い方の注意点、そして分かりやすいサンプルプログラムまで、順番にやさしく見ていきます。

break文とは

break文は、実行中の繰り返し処理を途中で終了するための文です。
通常、ループは条件が偽になるまで続きますが、break文を使うと、その条件判定を待たずにその場で抜けられます。

たとえば、for文で10回繰り返すように書いていても、3回目で特定の条件が成立すれば、その時点で終了できます。
つまり break文 は、ループの途中に作る非常口のような役割を持っています。

break文が使われる主な場面

break文は、主に次のような場面で使われます。

場面役割
switch文該当する処理を終えて、switch文を抜ける
for文条件を満たした時点で繰り返しを終了する
while文途中で終了条件が成立したらループを抜ける
do~while文最低1回実行したあと、必要に応じて途中終了する

今回の中心は、繰り返し文の中で使う break文 です。

break文の基本構文

break文は、たいてい if文 と組み合わせて使います。

繰り返し処理 {
    文1;
    if (条件式)
        break;
    文2;
}

この形では、まず文1を実行し、そのあと条件式を調べます。
条件式が真なら break文 が実行され、ループはその場で終了します。
条件式が偽なら break文 は実行されず、そのまま文2へ進み、次の繰り返しに入ります。

break文の流れをイメージする

break文の動きは、次の流れで考えると分かりやすいです。

大事なのは、break文が実行された瞬間に、そのループの残りの処理は行われないという点です。
つまり、breakの下に書いてある文は実行されず、そのままループの外へ出ます。

if文と一緒に使う理由

break文は、ほとんどの場合 if文 と組み合わせて使います。
なぜかというと、条件に応じて抜けるためです。

たとえば次のように書くと、scoreが100になったときだけループを終了できます。

if (score == 100)
    break;

一方で、if文なしで break文 をそのまま書くと、ループに入った直後に必ず終了してしまいます。

for (int i = 0; i < 5; i++) {
    break;
}

この場合は、1回目の繰り返しで即終了してしまうため、繰り返し処理としてほとんど意味がなくなります。
そのため、break文は通常、何らかの条件判断とセットで使うと覚えておくと安心です。

break文を使うときの注意点

break文は便利ですが、使いすぎるとコードが読みにくくなることがあります。

たとえば、1つのループの中に break が何度も出てくると、どこで終わるのか追いかけにくくなります。
処理の流れが複雑になり、あとから見直したときに理解しづらくなることもあります。

注意点を整理すると、次のようになります。

注意点内容
無条件で使わないif文なしだとすぐにループが終わってしまう
多用しすぎない出口が多すぎると読みづらくなる
条件を明確にする何のために抜けるのかが分かるように書く
必要最小限にするできるだけ自然な流れの中で使う

つまり、break文は便利な道具ですが、必要な場所にだけ使うのがコツです。

サンプルプログラムで理解しよう

商品番号を最大5回入力し、999 が入力されたら途中で受付を終了するシンプルなプログラム例です。

この例では、入力された商品番号の個数だけを数えます。
999 は終了の合図であり、個数には含めません。

サンプルプログラム

ファイル名:9_10_1.c

#include <stdio.h>

int main(void)
{
    int code;
    int count = 0;

    for (int i = 1; i <= 5; i++) {    // 最大5回まで入力を受け付ける
        printf("商品番号を入力してください(999で終了)> ");
        scanf("%d", &code);

        if (code == 999) {            // 999が入力されたら受付を終了する
            break;
        }

        count++;                      // 有効な入力として件数を数える
    }

    printf("入力された商品番号の件数は%d件です。\n", count);

    return 0;
}

実行結果の例

商品番号を入力してください(999で終了)> 120
商品番号を入力してください(999で終了)> 245
商品番号を入力してください(999で終了)> 381
商品番号を入力してください(999で終了)> 999
入力された商品番号の件数は3件です。

このプログラムの考え方

このプログラムは、for文で最大5回まで繰り返します。
ただし、途中で 999 が入力されたら break文 でループを終了します。

流れを追うと、次のようになります。

1回目に120を入力
→ 999ではない
→ breakは実行されない
→ 件数を1増やす

2回目に245を入力
→ 999ではない
→ breakは実行されない
→ 件数を1増やす

3回目に381を入力
→ 999ではない
→ breakは実行されない
→ 件数を1増やす

4回目に999を入力
→ 条件が真になる
→ breakを実行
→ その場でループ終了

このように、for文には最大5回という上限がありますが、break文によって必要なタイミングで早めに抜けられます。

どの行でループが終わるのか

このプログラムで特に注目したいのは、次の部分です。

if (code == 999) {
    break;
}

ここで code が 999 と等しければ、break文 が実行されます。
その瞬間、for文の繰り返し処理は終了します。

そして重要なのは、breakの後ろにある count++ は実行されないことです。
つまり、999 は件数に含まれません。

この性質はとても大切です。
break文は、ただループを終えるだけではなく、その回の残りの処理も飛ばすからです。

breakが実行されなかった場合

逆に、入力が999でなければ if文 の条件は偽になります。
その場合は break文 は実行されず、そのまま次の文へ進みます。

count++;

そのあと for文 の次の繰り返しに進みます。
つまり、break文があるからといって毎回終了するわけではなく、あくまで条件に合ったときだけ終了します。

for文の条件だけではだめなのか

ここで、for文の条件だけで制御すれば十分なのでは、と思うかもしれません。
たしかに、繰り返し回数だけで決まる処理なら、for文の条件だけでも十分です。

しかし、入力値や計算結果のように、ループの途中で初めて分かる条件には対応しにくいことがあります。
そうしたときに break文 が役立ちます。

たとえば今回の例では、ユーザーがいつ 999 を入力するかは、ループ開始前には分かりません。
このような途中判定の終了条件は、break文がとても得意です。

break文が便利な場面

break文は、次のような処理でもよく使われます。

breakを使う理由
探索処理目的のデータが見つかった時点で終了したい
入力処理終了用の値が入力されたら抜けたい
エラー検出異常な値を見つけたらそれ以上進めたくない
メニュー処理終了の選択がされたらループを終えたい

つまり、最後まで続ける必要がなくなった瞬間に抜けたい処理で、とても便利です。

while文でも考え方は同じ

今回はfor文の中でbreak文を使いましたが、while文やdo~while文でも基本は同じです。
ループの中で条件を調べて、必要なら break文 で抜けます。

たとえば、while文では次のような形になります。

while (1) {
    if (条件式) {
        break;
    }
}

このように、繰り返しの種類が変わっても、break文の役割は変わりません。
今いるループを途中で終了させることが、break文の本質です。

break文を使った処理の見やすい書き方

break文を使うときは、条件がひと目で分かるように書くと読みやすくなります。

たとえば、次のような工夫が大切です。

  • 終了条件をif文に分かりやすくまとめる
  • breakする理由がコメントで伝わるようにする
  • breakの数を増やしすぎない
  • ループの目的と終了条件をはっきりさせる

今回のサンプルでも、999が終了用の値だと表示メッセージとコメントで明確にしています。
このように書くと、あとで見返したときにも意図が伝わりやすくなります。

break文と continue文の違い

break文を学ぶと、continue文との違いも気になってきます。
この2つは少し似ていますが、動きははっきり異なります。

動き
breakループそのものを終了する
continueその回の残りを飛ばして次の繰り返しへ進む

break文はループを抜けます。
continue文はループを抜けず、次の回へ進みます。
この違いを意識できると、ループ制御がかなり整理しやすくなります。

学習するときのポイント

break文を理解するときは、次の3点を意識するとぐっと分かりやすくなります。

ポイント見るべきところ
いつ条件を判定しているかbreakの前で何を調べているか
break後に何が実行されないかその回の残りの文が飛ばされること
どのループを抜けるかbreakは今いるループだけを終了すること

特に最後の点は大切です。
多重ループでは、break文はすべてのループを抜けるわけではなく、現在いる一番内側のループだけを終了します。
この点は今後さらに学んでいくときに役立ちます。

もう一度、今回のポイントを確認しよう

break文は、繰り返し処理を途中で終了したいときに使う文です。
通常は if文 と一緒に使い、条件が成立したらループを抜けます。

今回のサンプルでは、for文で最大5回の入力を受け付けながら、999が入力された時点で break文 によりループを終了しました。
このしくみを理解しておくと、入力処理、探索処理、メニュー処理など、実用的なプログラムが書きやすくなります。

break文は短い文ですが、ループ制御の中ではとても重要な役割を持っています。
ただ回すだけではなく、必要なところで止める。
この考え方を身につけると、プログラムはぐっと実践的になります。