[C++] while文におけるcontinue文の使い方を初心者向けに解説
C++のwhile文でcontinue文を使うと、現在のループ処理をスキップして次の繰り返しに進みます。
continue文が実行されると、以降の処理は無視され、while文の条件式の評価に戻ります。
例えば、特定の条件で処理を飛ばしたい場合に便利です。
ただし、無限ループを避けるため、ループ内で条件が変化するように注意しましょう。
while文とcontinue文の基本
C++におけるwhile
文は、条件が真である限り繰り返し処理を行う制御構文です。
一方、continue
文は、ループ内での処理をスキップし、次の反復に移るために使用されます。
これにより、特定の条件を満たす場合に処理を中断し、次のループに進むことができます。
while文の基本構文
#include <iostream>
using namespace std;
int main() {
int count = 0; // カウント用の変数
while (count < 5) { // countが5未満の間ループ
cout << "カウント: " << count << endl; // カウントを表示
count++; // カウントを1増やす
}
return 0; // プログラムの終了
}
カウント: 0
カウント: 1
カウント: 2
カウント: 3
カウント: 4
continue文の基本構文
continue
文は、ループ内で特定の条件が満たされた場合に、以降の処理をスキップして次の反復に移るために使用されます。
以下は、while
文とcontinue
文を組み合わせた例です。
#include <iostream>
using namespace std;
int main() {
int count = 0; // カウント用の変数
while (count < 5) { // countが5未満の間ループ
count++; // カウントを1増やす
if (count == 3) { // countが3のとき
continue; // 次の反復に移る
}
cout << "カウント: " << count << endl; // カウントを表示
}
return 0; // プログラムの終了
}
カウント: 1
カウント: 2
カウント: 4
カウント: 5
この例では、count
が3のときにcontinue
文が実行され、cout
文がスキップされます。
そのため、出力には3が表示されません。
while
文とcontinue
文を組み合わせることで、柔軟なループ処理が可能になります。
while文とcontinue文の実践例
while
文とcontinue
文を使った実践的な例をいくつか紹介します。
これにより、実際のプログラムでどのようにこれらの構文を活用できるかを理解できます。
例1: 偶数のカウント
以下のプログラムは、1から10までの数の中で偶数だけをカウントして表示します。
continue
文を使用して、奇数のときは処理をスキップします。
#include <iostream>
using namespace std;
int main() {
int number = 0; // カウント用の変数
while (number < 10) { // numberが10未満の間ループ
number++; // numberを1増やす
if (number % 2 != 0) { // numberが奇数のとき
continue; // 次の反復に移る
}
cout << "偶数: " << number << endl; // 偶数を表示
}
return 0; // プログラムの終了
}
偶数: 2
偶数: 4
偶数: 6
偶数: 8
偶数: 10
このプログラムでは、number
が奇数のときにcontinue
文が実行され、偶数だけが表示されます。
例2: 特定の値をスキップ
次の例では、1から10までの数をカウントし、5をスキップして表示します。
#include <iostream>
using namespace std;
int main() {
int number = 0; // カウント用の変数
while (number < 10) { // numberが10未満の間ループ
number++; // numberを1増やす
if (number == 5) { // numberが5のとき
continue; // 次の反復に移る
}
cout << "カウント: " << number << endl; // カウントを表示
}
return 0; // プログラムの終了
}
カウント: 1
カウント: 2
カウント: 3
カウント: 4
カウント: 6
カウント: 7
カウント: 8
カウント: 9
カウント: 10
このプログラムでは、number
が5のときにcontinue
文が実行され、5が表示されないことが確認できます。
例3: 入力値のフィルタリング
次の例では、ユーザーからの入力を受け取り、負の数をスキップして正の数だけを表示します。
#include <iostream>
using namespace std;
int main() {
int number = 0; // ユーザーからの入力用の変数
while (true) { // 無限ループ
cout << "数を入力してください (0で終了): ";
cin >> number; // ユーザーからの入力を受け取る
if (number == 0) { // 0が入力されたら終了
break; // ループを終了
}
if (number < 0) { // 負の数のとき
continue; // 次の反復に移る
}
cout << "正の数: " << number << endl; // 正の数を表示
}
return 0; // プログラムの終了
}
数を入力してください (0で終了): 3
正の数: 3
数を入力してください (0で終了): -1
数を入力してください (0で終了): 5
正の数: 5
数を入力してください (0で終了): 0
このプログラムでは、ユーザーが負の数を入力した場合、continue
文によってその入力がスキップされ、正の数だけが表示されます。
これにより、ユーザーからの入力をフィルタリングすることができます。
continue文を使う際の注意点
continue
文は、ループ内で特定の条件を満たす場合に処理をスキップするために非常に便利ですが、使用する際にはいくつかの注意点があります。
以下に、continue
文を使う際のポイントをまとめます。
1. 無限ループに注意
continue
文を使用する際、条件によっては無限ループに陥る可能性があります。
特に、ループの条件が常に真である場合、continue
文によってループの進行が妨げられると、プログラムが停止しなくなります。
#include <iostream>
using namespace std;
int main() {
int count = 0; // カウント用の変数
while (count < 5) { // countが5未満の間ループ
count++; // countを1増やす
if (count == 3) { // countが3のとき
continue; // 次の反復に移る
}
cout << "カウント: " << count << endl; // カウントを表示
}
return 0; // プログラムの終了
}
この例では、count
が3のときにcontinue
文が実行されますが、count
は常に増加しているため、無限ループにはなりません。
しかし、条件が適切でない場合は注意が必要です。
2. ループの進行を確認
continue
文を使用する場合、ループの進行が適切に行われているかを確認することが重要です。
特に、ループの条件を満たすために必要な変数が適切に更新されているかを確認しましょう。
3. 可読性の低下
continue
文を多用すると、コードの可読性が低下することがあります。
特に、複雑な条件やネストされたループで使用する場合、どの条件で処理がスキップされるのかが分かりにくくなることがあります。
適切なコメントを追加することで、可読性を向上させることができます。
4. 代替手段の検討
continue
文を使用する代わりに、条件を工夫してループの中で処理を分岐させる方法もあります。
これにより、continue
文を使わずに済む場合があります。
以下はその例です。
#include <iostream>
using namespace std;
int main() {
int count = 0; // カウント用の変数
while (count < 5) { // countが5未満の間ループ
count++; // countを1増やす
if (count != 3) { // countが3でないとき
cout << "カウント: " << count << endl; // カウントを表示
}
}
return 0; // プログラムの終了
}
この例では、continue
文を使わずに条件分岐を行っています。
これにより、コードがシンプルになり、可読性が向上します。
5. デバッグの難しさ
continue
文を使用すると、デバッグが難しくなることがあります。
特に、スキップされた処理が多い場合、プログラムの挙動を追跡するのが難しくなることがあります。
デバッグ時には、スキップされる条件を明確にし、必要に応じてログを追加することが推奨されます。
これらの注意点を考慮しながら、continue
文を適切に使用することで、より効果的なプログラムを作成することができます。
while文とcontinue文の応用
while
文とcontinue
文は、さまざまなプログラミングシナリオで応用可能です。
ここでは、実際の問題解決に役立ついくつかの応用例を紹介します。
1. ユーザー入力の検証
ユーザーからの入力を受け取り、特定の条件を満たさない場合は再入力を促すプログラムを作成できます。
以下の例では、正の整数のみを受け付けるようにしています。
#include <iostream>
using namespace std;
int main() {
int number = 0; // ユーザーからの入力用の変数
while (true) { // 無限ループ
cout << "正の整数を入力してください (0で終了): ";
cin >> number; // ユーザーからの入力を受け取る
if (number == 0) { // 0が入力されたら終了
break; // ループを終了
}
if (number < 0) { // 負の数のとき
cout << "負の数は無効です。再度入力してください。" << endl; // エラーメッセージ
continue; // 次の反復に移る
}
cout << "入力された正の整数: " << number << endl; // 正の整数を表示
}
return 0; // プログラムの終了
}
正の整数を入力してください (0で終了): -5
負の数は無効です。再度入力してください。
正の整数を入力してください (0で終了): 10
入力された正の整数: 10
正の整数を入力してください (0で終了): 0
2. フィボナッチ数列の生成
while
文とcontinue
文を使用して、フィボナッチ数列を生成するプログラムを作成できます。
特定の条件を満たす数値のみを表示することも可能です。
以下の例では、フィボナッチ数列の中で偶数の数値のみを表示します。
#include <iostream>
using namespace std;
int main() {
int a = 0; // フィボナッチ数列の初項
int b = 1; // フィボナッチ数列の次項
while (b <= 100) { // bが100以下の間ループ
a = b; // aにbの値を代入
b = a + b; // bに次のフィボナッチ数を計算
if (a % 2 != 0) { // aが奇数のとき
continue; // 次の反復に移る
}
cout << "偶数のフィボナッチ数: " << a << endl; // 偶数のフィボナッチ数を表示
}
return 0; // プログラムの終了
}
偶数のフィボナッチ数: 0
偶数のフィボナッチ数: 2
偶数のフィボナッチ数: 8
偶数のフィボナッチ数: 34
3. プライム数の検出
while
文とcontinue
文を使用して、特定の範囲内のプライム数を検出するプログラムを作成できます。
以下の例では、2から50までのプライム数を表示します。
#include <iostream>
using namespace std;
bool isPrime(int num) { // プライム数判定関数
if (num < 2) return false; // 2未満はプライムではない
for (int i = 2; i * i <= num; i++) { // numの平方根までチェック
if (num % i == 0) { // 割り切れる場合
return false; // プライムではない
}
}
return true; // プライムである
}
int main() {
int number = 1; // カウント用の変数
while (number <= 50) { // numberが50以下の間ループ
number++; // numberを1増やす
if (!isPrime(number)) { // プライムでない場合
continue; // 次の反復に移る
}
cout << "プライム数: " << number << endl; // プライム数を表示
}
return 0; // プログラムの終了
}
プライム数: 2
プライム数: 3
プライム数: 5
プライム数: 7
プライム数: 11
プライム数: 13
プライム数: 17
プライム数: 19
プライム数: 23
プライム数: 29
プライム数: 31
プライム数: 37
プライム数: 41
プライム数: 43
プライム数: 47
これらの例から、while
文とcontinue
文を組み合わせることで、さまざまな問題を解決することができることがわかります。
柔軟な制御構文を活用して、より効率的なプログラムを作成しましょう。
まとめ
この記事では、C++におけるwhile
文とcontinue
文の基本的な使い方から、実践的な応用例までを紹介しました。
これにより、ループ処理を効率的に制御する方法を学ぶことができ、特定の条件に基づいて処理をスキップする技術を身につけることができました。
今後は、実際のプログラムにこれらの構文を取り入れ、より柔軟で効率的なコードを書くことに挑戦してみてください。