コース一覧
    C言語基礎 制御フロー編
    breakとcontinue

    C言語基礎 制御フロー編

    C言語の条件分岐と繰り返しを学び、処理の流れを組み立てるコースです。

    1
    条件分岐
    01. if文15分
    02. else ifで多分岐15分
    03. switch文15分
    04. 三項演算子15分
    05. 定番 FizzBuzz判定15分
    06. 条件の組み合わせ15分
    07. つくる 合否とランク判定15分
    08. 第3章クイズ10分
    2
    繰り返し
    01. for文15分
    02. while15分
    03. do-while15分
    04. breakとcontinue15分
    05. 二重ループ(九九)15分
    06. FizzBuzzループ版15分
    07. つくる N人分の入力15分
    08. 第4章クイズ10分

    breakとcontinue

    ループの途中で進路を変える

    ここまでのループは、条件が偽になるまで最後まで回りきる形でした。実際の集計では、そうもいかない事情が出てきます。欠席した学生は平均に入れたくありませんし、入力の終わりの合図が来たらその場でやめたくなります。

    この 2 つを引き受けるのが break と continue です。名前は似ていますが、やることはまったく違います。

    • break は ループそのものを終わらせる。波カッコの外に出て、続きの処理へ進みます
    • continue は その回だけを飛ばす。中身の残りを実行せず、次の回に進みます

    c

    for (i = 1; i <= 10; i++) {
        scanf("%d", &score);
        if (score == -1) {
            continue;   /* 欠席なので集計しない */
        }
        if (score < 0) {
            break;      /* 終わりの合図なのでやめる */
        }
        total += score;
    }

    continue が飛ばすのはどこまでか

    continue を実行すると、そこから下の中身はすべて飛ばされ、ループの次の回へ移ります。for なら更新の i++ はきちんと実行されるので、回数が狂うことはありません。

    気をつけたいのは while との組み合わせです。while の中身の最後で次の入力を読んでいる場合、continue はその scanf も飛ばしてしまいます。条件に使う変数が更新されないまま次の回に入るので、そのまま無限ループになります。continue を使うときは、条件を進める処理より 前 に置いてあるかを必ず確かめてください。

    break が抜けるのは1枚だけ

    break が終わらせるのは、いま自分が入っている いちばん内側のループ 1 つだけ です。第3章の switch でも break を使いましたが、あれも同じで、自分を囲むいちばん近い switch を抜けています。次回学ぶ二重ループの内側で break を書いても、外側のループは回り続けます。

    使いすぎない

    break も continue も、読み手にとっては「ここで流れが飛ぶ」という負担です。条件式を書き直すだけで済むなら、そのほうが読みやすくなります。目安として、continue は「この回は対象外」とはっきり言えるとき、break は「もう続ける意味がない」ときに限ると、意図が伝わるコードになります。

    c

    /* continue を使わない書き方 */
    if (score >= 0) {
        total += score;
    }
    
    /* continue を使う書き方 */
    if (score < 0) {
        continue;
    }
    total += score;

    この程度の短さなら、上のように if で囲むほうが素直です。continue が効いてくるのは、対象外の条件が何種類もあって、それを最初にまとめて振るい落としたいときです。先に例外を片付けてしまえば、そこから下は「まともなデータだけが来る」と思って読めるので、右へ右へと深くなる入れ子を防げます。

    なお break と continue は、いま実行中のループにだけ効きます。関数の途中で処理を打ち切る return とは別ものです。関数は次章で学びますが、break を書けば関数が終わるわけではない、という点だけ先に押さえておいてください。

    では、欠席者を飛ばしながら受験者の点数だけを集計してみましょう。

    要件

    1. for で最大10回まで読み込む
    2. -1 が来たら「2人目 欠席」の形で表示し、集計には入れない
    3. -1 以外の負の数が来たら、その場で読み込みをやめる
    4. 最後に「受験者は3人、合計は240点です」の形で表示する

    ヒント

    何人目かはループ変数 i がそのまま使えます

    -1 の判定を先に書かないと、-1 も「終わりの合図」に吸い込まれてしまいます

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/07

    関連レッスン

    • 二重ループ(九九)

      ループの入れ子を書けるようになります。

    • FizzBuzzループ版

      判定と繰り返しを組み合わせられるようになります。

    • つくる N人分の入力

      人数を聞いて、その人数ぶんの処理を回せるようになります。

    • 第4章クイズ

      第4章の理解を確認します。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • ループ繰り返し処理。矢印で戻すか専用記号で示す
    • 処理計算や代入を表す長方形
    • 変数データに名前をつけて参照する仕組み
    • 関数処理に名前を付けて再利用できる単位
    main.c
    エディタを読み込んでいます

    メモ

    breakとcontinue

    ⌘S で保存