C++のcontinue文を完全攻略!繰り返し処理で特定の条件をスキップする方法
生徒
「先生、繰り返し処理をしている最中に、ある特定の時だけ処理を飛ばして、次の回に行きたいときはどうすればいいですか?」
先生
「そんな時には『continue文』を使うのが一番ですよ。ループの中で特定の条件に当てはまった時だけ、残りの処理を無視して次のループへ進むことができるんです。」
生徒
「処理を飛ばす……?それってbreak文とは違うんですか?」
先生
「その通り!breakはループを完全に終わらせますが、continueは『今回だけお休み』というイメージです。詳しい仕組みを一緒に見ていきましょう!」
1. continue文とは?基本的な役割を解説
C++のプログラミングにおけるcontinue文(コンティニュー文)は、for文やwhile文といった繰り返し処理(ループ処理)の中で使用される強力な制御構文の一つです。この命令が実行されると、ループ内のそれ以降に書かれている処理はすべてスキップされ、即座に次の繰り返しの判定へと移動します。
例えば、「1から10まで数字を数えるけれど、4の時だけは何もせずに飛ばしたい」というような場合に非常に便利です。未経験の方でも、「一旦今の作業を切り上げて、次の番号へ進む」というイメージを持てば、難しいことはありません。このように、柔軟にプログラムの流れを操ることで、無駄のない効率的なコードを書くことができるようになります。
2. パソコン初心者でもわかる「スキップ」の具体例
プログラミングを学んだことがない方のために、日常生活の動作で例えてみましょう。あなたが学校の先生で、クラス全員(30人)のテストを採点していると想像してください。1番の人から順番に採点していきますが、もし「欠席した生徒」の答案用紙が回ってきたらどうしますか?
当然、採点作業はせずに「次の生徒」の答案用紙を手に取りますよね。この「欠席者なので採点を飛ばして、次の人の作業に移る」という動作こそが、プログラミングにおけるcontinue文の役割です。作業自体を完全にやめて帰宅してしまうのがbreak文、その人の分だけ飛ばして作業を続けるのがcontinue文という違いがあります。この違いを理解することが、C++のループ制御をマスターする第一歩です。
3. for文でcontinueを使う方法
まずは、最もよく使われるfor文(フォー文)の中での使い方を見てみましょう。for文は「決められた回数だけ繰り返す」という命令です。以下のサンプルコードでは、1から5まで表示しようとしますが、3の時だけcontinueを使ってスキップします。これにより、画面には「3」が表示されない仕組みになります。
#include <iostream>
int main() {
for (int i = 1; i <= 5; i++) {
// もしiが3だったら、これ以降の処理を飛ばして次の数字(4)へ進む
if (i == 3) {
continue;
}
std::cout << i << "番目の処理を実行中" << std::endl;
}
return 0;
}
実行結果は以下のようになります。
1番目の処理を実行中
2番目の処理を実行中
4番目の処理を実行中
5番目の処理を実行中
「3番目」が表示されていないことに注目してください。if文という条件分岐を使って、「もし3だったら」という条件が満たされた瞬間にcontinueが発動し、その下のcout(画面表示)が無視されたのです。その後、ループは終わらずに「4」へと進んでいますね。
4. while文で使う時の重要な注意点
次に、条件が満たされている間はずっと繰り返すwhile文(ワイル文)での使い方を解説します。基本的な役割は同じですが、while文でcontinueを使うときには一つだけ大きな注意点があります。それは「変数の更新(カウントアップ)」のタイミングです。
もしcontinueよりも後に「次の数字に進める処理(i++など)」を書いてしまうと、永遠に同じ数字でスキップし続けてしまい、プログラムが止まらなくなる「無限ループ」という状態に陥ってしまいます。パソコンが固まる原因にもなるので、初心者のうちは特に気をつけるポイントです。安全な書き方を確認しましょう。
#include <iostream>
int main() {
int i = 0;
while (i < 5) {
i++; // ループの最初の方でカウントを進めるのが安全
if (i == 2) {
std::cout << "2は飛ばします!" << std::endl;
continue;
}
std::cout << "現在の数値は: " << i << std::endl;
}
return 0;
}
実行結果です。
現在の数値は: 1
2は飛ばします!
現在の数値は: 3
現在の数値は: 4
現在の数値は: 5
5. 実用的な活用例:偶数だけを表示するプログラム
continue文は、特定のデータだけを除外したいときに非常に役立ちます。例えば、大量の数字の中から「奇数だけを除外して、偶数だけを表示したい」という場合です。プログラミングの世界では、余りを計算する記号(%)を使って、奇数か偶数かを判断します。2で割って余りが1なら奇数、0なら偶数ですね。この性質を利用して、奇数の時にスキップさせれば、結果的に偶数だけが残ります。
#include <iostream>
int main() {
std::cout << "1から10までの偶数を表示します。" << std::endl;
for (int i = 1; i <= 10; i++) {
// iを2で割った余りが1(つまり奇数)ならスキップ
if (i % 2 != 0) {
continue;
}
std::cout << i << " ";
}
return 0;
}
実行結果です。
1から10までの偶数を表示します。
2 4 6 8 10
このように、continueを使うことで「処理をしたくない対象」を最初に取り除くことができ、メインの処理(ここでは表示)をすっきりと書くことができます。これを専門用語で「ガード句」のような考え方と呼ぶこともありますが、まずは「嫌なものは先に飛ばす」と覚えればOKです。
6. break文とcontinue文の決定的な違い
ここで、よく混同されるbreak文との違いをしっかり整理しておきましょう。どちらもループを制御するものですが、その影響力には大きな差があります。検索エンジンでも「C++ break continue 違い」はよく調べられるキーワードです。
break文: 実行された瞬間、ループ自体が強制終了します。その後に予定されていた繰り返しも一切行われません。例えるなら、マラソン大会で途中でリタイアして家に帰ってしまうようなものです。
continue文: 実行されると、今回の回の残りの作業だけをやめて、すぐに次の回を開始します。ループ自体は続きます。例えるなら、マラソン大会で給水ポイントを一つだけ立ち寄らずに通り過ぎ、そのまま走り続けるようなものです。この違いを使い分けることで、より複雑な条件設定が可能になります。
7. 複雑な条件でのcontinue文の活用
実際の開発現場では、一つの条件だけでなく複数の条件を組み合わせてスキップすることもあります。例えば、「3の倍数」または「数字に5が含まれる」時にスキップするなどです。こうした複雑なロジックを組む際、if文の中に何重にも処理を書くよりも、continueを使って「対象外」を弾いていく方が、コードの見た目が綺麗になり、後から見返したときに理解しやすくなります。読みやすさ(可読性)を意識するのは、プログラマーにとって大切なスキルです。
#include <iostream>
int main() {
for (int i = 1; i <= 15; i++) {
// 3の倍数、または4の倍数の時は何も表示しない
if (i % 3 == 0 || i % 4 == 0) {
continue;
}
std::cout << i << "は対象内です。" << std::endl;
}
return 0;
}
実行結果です。
1は対象内です。
2は対象内です。
5は対象内です。
7は対象内です。
10は対象内です。
11は対象内です。
13は対象内です。
14は対象内です。
3、4、6、8、9、12、15といった数字がしっかり除外されています。複数の条件があっても、continue一つでスマートに制御できることがわかりますね。
8. エラーを防ぐ!continueを使う時のコツ
最後に、より良いプログラムを書くためのヒントをお伝えします。continueを多用しすぎると、どこで処理が飛んでいるのか追いかけるのが大変になることがあります。そのため、「本当にスキップが必要な理由」をコメント(//から始まるメモ書き)で残しておく癖をつけましょう。また、条件式はできるだけシンプルに保つことがエラーを防ぐコツです。
パソコンを触ったことがない方でも、こうした一つ一つの「お作法」を意識することで、プロのプログラマーに近い綺麗なコードが書けるようになります。C++は難しいイメージがあるかもしれませんが、continueのような便利な道具を少しずつ覚えていけば、必ず自由にプログラムを作れるようになりますよ!