
6日でできる 新C言語入門|ループ中の処理をスキップするcontinue文
必要ない処理は飛ばして、次の繰り返しへ進む。
continue文を理解して、ループ処理をすっきり制御できるようになろう。
C言語でfor文やwhile文を使っていると、繰り返しの途中で「この回だけは残りの処理を実行したくない」という場面があります。
たとえば、1から10までの数値を順番に処理しているときに、特定の数だけ表示しないようにしたい場合があります。また、入力された値を処理するときに、条件に合わない値だけを飛ばして、次の入力へ進みたい場合もあります。
このようなときに使えるのがcontinue文です。
continue文は、現在の繰り返し回の残りの処理をスキップし、次の繰り返しへ進むための制御文です。break文のようにループ全体を終了するのではなく、あくまで今の1回分だけを途中で切り上げます。
そのため、continue文を使うと、条件に合わないデータを飛ばしたり、特定の値だけ処理対象から外したりできます。ループの中で不要な処理を避けたいときに、とても便利です。
ただし、continue文はループの流れを途中で変えるため、使い方を間違えると処理の順番が分かりにくくなったり、while文で無限ループの原因になったりすることもあります。
この記事では、continue文の基本的な動き、for文での使い方、while文で使うときの注意点、break文との違い、実践的な活用例まで、サンプルプログラムを使いながらやさしく解説していきます。
continue文は現在の回だけをスキップする
continue文は、ループの中で使う命令です。continue文に到達すると、その下にある処理は実行されず、次の繰り返しへ進みます。
基本的な考え方は、次のようになります。
ループ開始
処理1
if (スキップしたい条件) {
continue;
}
処理2
ループ継続この場合、スキップしたい条件が成り立つと、処理2は実行されません。その回の残りは飛ばされ、次の繰り返しへ進みます。
| 制御文 | 動き |
|---|---|
| continue文 | 現在の回の残りをスキップして、次の繰り返しへ進む |
| break文 | ループそのものを終了する |
| 通常の処理 | 上から順番に最後まで実行する |
continue文は、for文、while文、do〜while文の中で使えます。ただし、ループの種類によって、continueの後に進む位置が少し異なります。
| ループ | continue後の動き |
|---|---|
| for文 | 増分式へ進み、その後で条件式を判定する |
| while文 | 条件式の判定へ戻る |
| do〜while文 | 条件式の判定へ進む |
特にwhile文では、continueより前に更新処理を書いておかないと、同じ条件のままループし続けることがあります。この点は後で詳しく説明します。
図:continue文は現在の回だけをスキップする

この図から分かること
この図から分かるのは、continue文がループ全体を止めるのではなく、現在の繰り返し回だけを途中でスキップするという点です。
スキップ条件が成り立つと、その下にある処理Bは実行されず、すぐ次の繰り返しへ進みます。条件が成り立たない場合は、通常どおり処理Bまで実行されます。continue文は、不要な処理を飛ばしながらループを続けたいときに使います。
for文でcontinue文を使う
for文でcontinue文を使うと、continueに到達した時点で、その回の残りの処理をスキップします。その後、for文の増分式が実行され、条件式の判定へ進みます。
たとえば、1から8までの数値を順番に見ていき、3の倍数だけ表示しないようにする処理を考えてみましょう。
プロジェクト/ファイル名: Lesson30_1/main.c
#include <stdio.h>
int main(void) {
int i;
// 1から8まで順番に確認する
for (i = 1; i <= 8; i++) {
// 3の倍数は表示せず、次の繰り返しへ進む
if (i % 3 == 0) {
continue;
}
// 3の倍数ではない値だけ表示する
printf("表示する値: %d\n", i);
}
return 0;
}実行結果
表示する値: 1
表示する値: 2
表示する値: 4
表示する値: 5
表示する値: 7
表示する値: 8このプログラムでは、iが1から8まで変化します。ただし、i % 3 == 0が成り立つと、continue文が実行されます。
iが3や6のとき、continue文によってprintfの行がスキップされます。そのため、3と6は表示されません。
for文でのcontinue文の流れ
for文では、continue文のあとに増分式が実行されます。
今回のfor文は、次のようになっています。
for (i = 1; i <= 8; i++)この場合、continue文が実行されても、i++は行われます。そのため、次の値へ進むことができます。
| iの値 | i % 3 == 0 | continue文 | printfの実行 |
|---|---|---|---|
| 1 | 偽 | 実行しない | 表示する |
| 2 | 偽 | 実行しない | 表示する |
| 3 | 真 | 実行する | 表示しない |
| 4 | 偽 | 実行しない | 表示する |
| 5 | 偽 | 実行しない | 表示する |
| 6 | 真 | 実行する | 表示しない |
| 7 | 偽 | 実行しない | 表示する |
| 8 | 偽 | 実行しない | 表示する |
このように、continue文を使うと、特定の条件に当てはまる回だけ処理を飛ばせます。
continue文は条件に合わないデータを飛ばすときに便利
continue文は、すべてのデータを同じように処理するのではなく、一部だけを処理対象から外したいときに便利です。
たとえば、次のような場面で使えます。
| 使いどころ | 例 |
|---|---|
| 特定の数値を飛ばす | 3の倍数は表示しない |
| 条件に合わない入力を無視する | 負の値は処理しない |
| 対象外のデータをスキップする | 欠席者の点数は集計しない |
| 不要な処理を避ける | 条件を満たさない場合は計算しない |
continue文を使うと、条件に合わない場合を先に除外できるため、その後の処理を読みやすくできることがあります。
while文でcontinue文を使う
continue文はwhile文でも使えます。ただし、while文では注意が必要です。
while文では、continue文が実行されると、すぐに条件式の判定へ戻ります。そのため、カウンタの更新処理がcontinue文より後ろにあると、その更新処理がスキップされてしまいます。
次のサンプルでは、while文を使って1から6までの数値を確認し、4だけをスキップします。
プロジェクト/ファイル名: Lesson30_2/main.c
#include <stdio.h>
int main(void) {
int n = 0;
// nが6未満の間、繰り返す
while (n < 6) {
// 先にnを1増やしておく
n++;
// nが4のときは、下の表示処理をスキップする
if (n == 4) {
continue;
}
// 4以外の値を表示する
printf("nの値: %d\n", n);
}
return 0;
}実行結果
nの値: 1
nの値: 2
nの値: 3
nの値: 5
nの値: 6このプログラムでは、n++をcontinue文より前に書いています。そのため、nが4のときにcontinue文で表示処理をスキップしても、nの値はすでに更新されています。
もしn++をcontinue文より後ろに書いてしまうと、nが4になった時点でn++が実行されず、nが4のままになってしまう可能性があります。その場合、同じ条件でcontinue文が繰り返され、ループが終わらなくなる危険があります。
図:while文では更新処理の位置に注意する

この図から分かること
この図から分かるのは、while文でcontinue文を使う場合、更新処理の位置がとても重要だということです。
continue文が実行されると、その下にある処理は実行されません。そのため、カウンタを増やす処理がcontinue文より後ろにあると、値が変化しないまま次の条件判定へ戻る可能性があります。while文では、必要な更新処理をcontinue文より前に置くことを意識すると、安全に書きやすくなります。
while文でcontinue文を使うときの注意点
while文は、for文のように増分式がループの見出し部分にまとまっていません。条件に使う変数の更新は、本文の中に自分で書く必要があります。
そのため、continue文を使うときは、次の点を確認しましょう。
| 確認すること | 内容 |
|---|---|
| 条件に使う変数 | while文の条件式に使っている変数は何か |
| 更新処理の位置 | continue文より前に必要な更新があるか |
| 終了条件 | いつループが終わるのか |
| スキップ後の流れ | continue後にどこへ戻るのか |
特に、while文の中で入力値やカウンタを使っている場合、continue文によって必要な処理が飛ばされていないか確認することが大切です。
実践例:条件に合う値だけ表示する
continue文は、不要な値を飛ばし、条件に合う値だけを処理したいときにも使えます。
次のプログラムでは、1から10までの数値のうち、3の倍数だけを表示します。3の倍数ではない値は、continue文でスキップします。
プロジェクト/ファイル名: Lesson30_3/main.c
#include <stdio.h>
int main(void) {
int i;
// 1から10まで順番に確認する
for (i = 1; i <= 10; i++) {
// 3の倍数ではない場合は、表示処理をスキップする
if (i % 3 != 0) {
continue;
}
// 3の倍数だけ表示する
printf("%dは3の倍数です\n", i);
}
return 0;
}実行結果
3は3の倍数です
6は3の倍数です
9は3の倍数ですこのプログラムでは、i % 3 != 0が真のときにcontinue文を実行しています。つまり、3で割り切れない数は処理対象から外しています。
その結果、printfが実行されるのは3、6、9のときだけです。
continue文を使うと条件外の処理を早めに除外できる
continue文を使うと、処理したくない条件を先に書いて、早めに次の繰り返しへ進めます。
今回のサンプルでは、3の倍数ではない場合にcontinue文を実行しています。
if (i % 3 != 0) {
continue;
}この書き方にすると、下のprintfは3の倍数である場合だけ実行されます。
つまり、処理したい条件だけを深くネストする必要がなくなります。
continue文を使わずに書くと、次のようになります。
if (i % 3 == 0) {
printf("%dは3の倍数です\n", i);
}このように単純な場合は、continue文を使わなくても十分読みやすいです。continue文は、スキップした後に多くの処理が続く場合や、対象外のデータを先に除外したい場合に効果的です。
continue文とbreak文の違い
continue文とbreak文は、どちらもループの流れを変える命令です。ただし、動きは大きく違います。
| 制御文 | 動き | ループは続くか |
|---|---|---|
| continue文 | 現在の回の残りをスキップして、次の繰り返しへ進む | 続く |
| break文 | ループをその場で終了する | 続かない |
continue文は、その回だけを飛ばす命令です。ループ自体は続きます。
break文は、ループそのものを終わらせる命令です。break文が実行されると、それ以降の繰り返しは行われません。
たとえば、1から5までのループでiが3のときにcontinue文を実行すると、3の回だけ処理を飛ばして、4、5へ進みます。
一方、iが3のときにbreak文を実行すると、そこでループが終了し、4、5の処理は行われません。
図:continue文とbreak文の違い

この図から分かること
この図から分かるのは、continue文とbreak文はどちらもループの流れを変えるものの、進む先が違うという点です。
continue文は、現在の回の残りを飛ばして次の繰り返しへ進みます。break文は、ループそのものを終了して外へ抜けます。特定の回だけ処理を飛ばしたいならcontinue文、ループを終わらせたいならbreak文を使います。
continue文を使うときの注意点
continue文は便利ですが、使いすぎるとループの流れが追いにくくなることがあります。
特に、1つのループの中にcontinue文がいくつもあると、どの条件でどの処理がスキップされるのか分かりにくくなります。
| 注意点 | 内容 |
|---|---|
| 使いすぎない | 多用すると流れが読みにくくなる |
| スキップされる処理を確認する | continue文の下にある処理は実行されない |
| while文では更新処理に注意する | 更新処理が飛ばされると無限ループの原因になる |
| break文と混同しない | continue文はループを終了しない |
| コメントを活用する | なぜスキップするのかを説明すると読みやすい |
continue文は、処理対象外のデータを早めに除外したいときに役立ちます。ただし、条件分岐だけで十分読みやすい場合は、無理にcontinue文を使わなくても構いません。
continue文が向いている場面
continue文は、次のような場面に向いています。
条件に合わないデータを飛ばす
たとえば、入力された値のうち、負の値は計算対象にしない、0は集計から外す、といった場合です。
特定の回だけ処理しない
たとえば、1から10までの中で、特定の数だけ表示しないようにしたい場合です。
早めに対象外を除外したい
ループの後半に長い処理が続く場合、先にスキップ条件を書いてcontinue文で飛ばすと、必要な処理だけを読みやすくできます。
| 場面 | continue文の使い方 |
|---|---|
| 不要な値を除外する | 条件に合わない値でcontinue文を実行する |
| 特定の値を飛ばす | 対象外の値だけスキップする |
| 条件外の処理を避ける | 下にある重い処理を実行しない |
| 入力チェック | 無効な入力を飛ばして次へ進む |
continue文は、すべての回を同じように処理するのではなく、条件に応じて一部だけ処理しない場合に便利です。
continue文を読みやすく使うコツ
continue文を読みやすく使うには、スキップする理由をはっきりさせることが大切です。
スキップ条件を短く分かりやすくする
if (i % 3 != 0) {
continue;
}このように、条件が短く明確だと、なぜスキップするのかが分かりやすくなります。
コメントで意図を補足する
学習段階では、continue文の近くにコメントを書いておくと理解しやすくなります。
// 3の倍数ではない値は表示しない
if (i % 3 != 0) {
continue;
}その下に何があるかを確認する
continue文の下にある処理は、スキップ条件が成り立ったときには実行されません。そのため、重要な更新処理や後片付け処理をcontinue文の下に置いていないか確認しましょう。
単純な場合はif文だけでもよい
continue文を使わなくても、if文だけで十分読みやすい場合があります。特に短い処理では、無理にcontinue文を使わないほうが自然なこともあります。
continue文を理解するとループ処理を細かく制御できる
continue文を使えるようになると、ループの中で条件に応じて処理を細かく調整できるようになります。
break文がループを終了するための命令であるのに対して、continue文はその回だけをスキップして次の繰り返しへ進む命令です。この違いを理解しておくと、ループ処理の流れをより柔軟に書けます。
for文では、continue文のあとに増分式へ進みます。while文では、continue文のあとに条件式の判定へ戻ります。そのため、while文で使う場合は、更新処理がスキップされないように特に注意が必要です。
continue文は、不要な処理を飛ばしたいとき、対象外のデータを除外したいとき、条件に合う値だけを処理したいときに役立ちます。まずは短いサンプルを動かしながら、どの処理が実行され、どの処理が飛ばされるのかを確認していきましょう。
