C言語のきほん|continue文で処理をスキップする

飛ばしたい処理だけを上手にスキップ。continue文を覚えると、ループはもっと柔軟に書けます

繰り返し処理を使っていると、毎回まったく同じ流れで処理したいとは限りません。
ある条件のときだけ、その回の残りの処理を飛ばして、次の繰り返しへ進みたい場面があります。

たとえば、入力された値が不正だったときは加算しないようにしたいことがあります。
ある条件に合わないデータだけを読み飛ばしたいこともあります。
このようなときに活躍するのが continue文 です。

continue文は、ループそのものを終わらせる文ではありません。
今その回で残っている処理だけをスキップして、次の繰り返しへ進むための文です。
そのため、break文と似て見えても役割はかなり違います。

break文が ループを終了する 文だとすると、continue文は 今回の残りを飛ばして次へ進む 文です。
この違いをしっかり理解できると、繰り返し処理の書き方がぐっと広がります。

ここでは、continue文の基本構文、処理の流れ、break文との違い、そして分かりやすいサンプルプログラムを通して、continue文の使い方を丁寧に見ていきます。

continue文とは

continue文は、繰り返し処理の中で使う制御文です。
特定の条件が成立したとき、その回の残りの処理を実行せずに、次の繰り返しへ進ませます。

ここで大切なのは、ループ自体は終わらないということです。
あくまで スキップするのはその回の残りの処理だけ です。

たとえば、for文の中で continue文 が実行されると、その下に書かれている文は実行されず、次の回の繰り返しに移ります。

continue文が便利な場面

continue文は、次のような場面でよく使われます。

場面continue文が役立つ理由
不正な入力を無視したいその回の処理だけ飛ばせる
条件に合わないデータを読み飛ばしたい必要なデータだけを処理できる
特定の値だけ集計対象から外したい加算や判定をスキップできる
余分な入れ子を減らしたい条件に合わない場合を早めに飛ばせる

つまり、処理を終わらせるのではなく、処理対象から外したいときに向いています。

continue文の基本構文

continue文は、通常 if文 と組み合わせて使います。

繰り返し処理 {
    文1;

    if (条件式)
        continue;

    文2;
}

この形では、まず 文1 を実行し、そのあと条件式を判定します。
条件式が真なら continue文 が実行され、文2は飛ばされて次の繰り返しへ進みます。
条件式が偽なら continue文 は実行されず、文2もそのまま実行されます。

continue文の流れを図で理解しよう

continue文の動きは、次のように考えると分かりやすいです。

ここで注目したいのは、continue文が実行されると、その下にある文が実行されないことです。
ただし、break文のようにループ全体は終わりません。

if文と一緒に使う理由

continue文は、ほとんどの場合 if文 と一緒に使います。
なぜなら、特定の条件のときだけ処理を飛ばしたいからです。

たとえば次のように書けば、scoreが負の値だったときだけ、その回の処理を飛ばせます。

if (score < 0)
    continue;

反対に、if文なしで continue文 をそのまま書くと、その回の残りの処理は毎回必ずスキップされてしまいます。

for (int i = 0; i < 5; i++) {
    continue;
    printf("表示されません\n");
}

この例では、printf は一度も実行されません。
そのため、continue文も break文と同じく、通常は条件判断とセットで使うのが基本です。

break文との違いを整理しよう

continue文を学ぶときに、break文との違いは必ず押さえておきたいところです。

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

たとえば、ループの途中で完全に処理を終えたいなら break文 を使います。
一方で、その回だけ処理しないで次へ進みたいなら continue文 を使います。

この違いをイメージで表すと、次のようになります。

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

5回商品点数を入力し、1未満の値は無効として集計しないプログラム例です。

サンプルプログラム

ファイル名:9_13_1.c

#include <stdio.h>

int main(void)
{
    int total = 0;
    int point;

    for (int i = 1; i <= 5; i++) {    // 5回入力を受け付ける
        printf("商品点数を入力してください> ");
        scanf("%d", &point);

        if (point < 1) {              // 1未満の値は無効とする
            printf("入力エラー:1以上の値を入力してください。\n");
            continue;                 // 加算処理を飛ばして次の回へ進む
        }

        total += point;               // 有効な値だけ合計する
    }

    printf("合計点数は%d点です。\n", total);

    return 0;
}

実行結果の例

商品点数を入力してください> 2
商品点数を入力してください> 3
商品点数を入力してください> 4
商品点数を入力してください> 0
入力エラー:1以上の値を入力してください。
商品点数を入力してください> 5
合計点数は14点です。

このプログラムの考え方

このプログラムでは、for文で5回繰り返します。
毎回、商品点数を入力し、その値をチェックします。

処理の流れは次の通りです。

  1. 商品点数を入力する
  2. 入力値が 1 未満かどうかを調べる
  3. 1未満ならエラーメッセージを表示する
  4. continue文 で加算処理を飛ばす
  5. 1以上なら total に加算する

つまり、無効な値は受け取るけれど、集計対象にはしない、という流れです。
このような処理は continue文 がとても得意です。

continue文が実行されたとき、何が起こるのか

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

if (point < 1) {
    printf("入力エラー:1以上の値を入力してください。\n");
    continue;
}

ここで point が 1 未満なら continue文 が実行されます。
すると、その下にある加算処理は実行されません。

total += point;

つまり、0 や負の値が入力されても、合計には含まれないわけです。
これが continue文 の中心的な働きです。

continue文が実行されなかった場合

入力値が 1 以上なら、if文 の条件は偽になります。
その場合は continue文 は実行されず、そのまま次の文へ進みます。

total += point;

そのため、有効な値だけが合計されます。
continue文は、条件に合ったときだけ処理を飛ばす仕組みだと考えると分かりやすいです。

continue文を使うとコードが読みやすくなることがある

continue文のよいところのひとつは、条件に合わないケースを先に除外できることです。
これによって、処理の本体をすっきり書ける場合があります。

たとえば、continue文を使わずに書くと、次のように if文 の中に本処理を入れる形になりやすいです。

if (point >= 1) {
    total += point;
}
else {
    printf("入力エラー:1以上の値を入力してください。\n");
}

これでも間違いではありません。
ただ、条件に合わないケースを先に continue で飛ばすと、そのあとに 本来やりたい処理 を素直に書けることがあります。

for文・while文でのcontinue文の動き

continue文は、for文でもwhile文でも使えます。
ただし、次の繰り返しに進むときの流れを少し意識しておくとよいです。

ループcontinue実行後の流れ
for文更新式を実行して次の条件判定へ進む
while文すぐに条件判定へ戻る
do~while文末尾の条件判定へ進む

学習の最初は、細かい違いを厳密に覚えなくても大丈夫です。
まずは continue文 が その回の残りを飛ばす 文であることをしっかり理解しておくことが大切です。

while文で考えるとどうなるか

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

while (条件式) {
    文1;

    if (条件式)
        continue;

    文2;
}

ここでも意味は同じで、条件が真なら文2を飛ばして次の繰り返しへ進みます。
ただし while文 では、更新処理を書く位置によっては無限ループの原因になることもあるので注意が必要です。

continue文を使うときの注意点

continue文は便利ですが、使い方を誤ると流れが追いにくくなることがあります。

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

注意点内容
無条件で使わないその回の残りが毎回実行されなくなる
飛ばされる処理を意識する何が実行されないのかを確認する
使いすぎないcontinueが多すぎると流れが追いにくい
while文では更新忘れに注意する条件が変わらず無限ループになることがある

特に while文 で continue文 を使うときは、変数の更新が continue の前にあるか後ろにあるかをよく確認することが大切です。

continue文を使った処理を見やすく書くコツ

continue文を読みやすく使うには、次のような工夫が役立ちます。

コツ内容
スキップ条件を明確にする何を飛ばしたいのか分かるように書く
コメントを添えるなぜ continue するのか伝わりやすい
本来の処理を下にまとめる正常系の流れが見やすくなる
continueの数を増やしすぎない出口が多いと読みにくくなる

continue文は、条件に合わないものを早めに除外するための道具として使うと、コードがすっきりしやすいです。

よくある使いどころ

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

使いどころ
入力チェック不正な値ならその回を無効にする
集計処理条件に合わないデータを集計対象から外す
検索処理不要なデータを読み飛ばす
配列処理特定の要素だけ処理しない

こうした場面では、continue文を使うことで 処理しない理由 がコードに表れやすくなります。

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

continue文は、繰り返し処理の中で 特定の条件のときだけ、その回の残りの処理を飛ばして次の繰り返しへ進む 文です。
ループ自体を終了するわけではないので、break文とは役割が異なります。

今回のサンプルでは、1未満の値が入力されたときに continue文 によって加算処理をスキップし、有効な値だけを合計しました。
この考え方を身につけると、入力チェックや集計処理など、実用的なプログラムがとても書きやすくなります。

continue文は、無駄な処理を飛ばしながら、ループは続けたいときに使う文です。
処理を終わらせるのではなく、必要なものだけを通して次へ進む。
この感覚をつかめると、ループの書き方がぐっと自然になります。