繰り返し処理

[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文の基本的な使い方から、実践的な応用例までを紹介しました。

これにより、ループ処理を効率的に制御する方法を学ぶことができ、特定の条件に基づいて処理をスキップする技術を身につけることができました。

今後は、実際のプログラムにこれらの構文を取り入れ、より柔軟で効率的なコードを書くことに挑戦してみてください。

関連記事

Back to top button