読み込み中...

初心者もマスターできる!C++のwhile文完全ガイド7選

C++のwhile文を徹底解説するイメージ C++
この記事は約13分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

この記事を読めば、あなたはC++のwhile文をマスターすることができるようになります。

プログラミングの世界は広大で、多くの言語と概念が存在します。

その中でもC++は非常に強力で、システムプログラミングからゲーム開発まで、幅広い用途で使われています。

特にwhile文は、繰り返し処理を行う際に非常に重要な役割を果たします。

この記事では、C++の基本からwhile文の使い方までを、初心者でも理解しやすいように詳細に解説します。

プログラミングの基礎を固めたい方や、C++のスキルを向上させたい方にとって、この記事が有用なリソースとなることを願っています。

●C++とwhile文の基本

C++は、1980年代にBjarne Stroustrupによって開発されたプログラミング言語です。

C言語の機能を拡張し、オブジェクト指向プログラミングのサポートを加えたもので、高性能なソフトウェア開発に適しています。

while文は、この言語における基本的な制御構造の一つで、特定の条件が真(true)である間、コードブロックを繰り返し実行するために使用されます。

○C++の基本構造

C++プログラムは、一連の命令から構成されます。

これらの命令は、関数にまとめられることが多く、最も基本的な関数はmain関数です。プログラムの実行はこのmain関数から始まります。

プログラム内で使用される変数は、型を指定して宣言する必要があり、C++は型が厳密な言語です。

また、C++では、標準ライブラリとして多くの機能が提供されており、これらを利用することで効率的にプログラムを作成することが可能です。

○while文の基本的な構文と動作原理

while文は、条件式と呼ばれる真偽値を評価する式に基づいて動作します。

この条件式が真(true)である限り、while文に含まれるコードブロックが繰り返し実行されます。

構文は下記の通りです。

while (条件式) {
    // 実行するコード
}

ここで、条件式が偽(false)と評価された場合、while文の実行は終了し、プログラムの次の部分に移行します。

条件式は、ループの各反復の開始時に評価されるため、ループ内でこの条件を変更することによってループの実行回数を制御できます。

また、while文は、条件が最初から偽である場合、一度も実行されない点に注意が必要です。

これは「先評価ループ」と呼ばれ、ループの実行前に条件をチェックする特性を持っています。

●while文の基本的な使い方

C++におけるwhile文の使い方を理解するためには、具体的なサンプルコードを通して学ぶのが最も効果的です。

基本的なwhile文の使い方を示すために、いくつかの簡単な例を見ていきましょう。

これらの例は、while文の基本的な構造と、それをどのようにしてプログラム内で活用するかを理解するのに役立ちます。

○サンプルコード1:カウンタを使った基本的なループ

最初のサンプルコードでは、カウンタ変数を使って特定の回数だけループを実行する基本的な例を紹介します。

下記のコードは、1から5までの数字を順番に出力する簡単なプログラムです。

#include <iostream>

int main() {
    int counter = 1; // カウンタ変数の初期化
    while (counter <= 5) { // counterが5以下の間、ループを続ける
        std::cout << counter << std::endl; // 現在のcounterの値を出力
        counter++; // counterを1増やす
    }
    return 0;
}

この例では、counterという名前の変数を1で初期化し、while文の条件式であるcounter <= 5が真である間、ループを続けます。

ループの中で、現在のcounterの値を出力した後、counterを1増やしています。

このプロセスはcounterの値が5より大きくなるまで続き、その後ループは終了します。

○サンプルコード2:ユーザー入力に基づくループ

下記のサンプルコードでは、ユーザーの入力に基づいてループを制御する方法を表しています。

このプログラムでは、ユーザーが特定の文字(この例では’x’)を入力するまで、ループを続けています。

#include <iostream>

int main() {
    char input;
    std::cout << "Enter 'x' to exit: ";
    while (input != 'x') { // ユーザーが'x'を入力するまでループ
        std::cin >> input; // ユーザーからの入力を受け取る
        std::cout << "You entered: " << input << std::endl;
        std::cout << "Enter 'x' to exit: ";
    }
    std::cout << "Exiting program." << std::endl;
    return 0;
}

このコードでは、inputという名前の変数を用いてユーザーの入力を受け取ります。

while文の条件式input != 'x'が真である間、つまりユーザーが’x’以外の文字を入力する限り、ループは続きます。

ループ内では、ユーザーが入力した文字を出力し、再度入力を促します。

ユーザーが’x’を入力すると、条件式が偽となり、ループは終了します。

●while文の応用例

C++におけるwhile文は基本的な使い方だけでなく、さまざまな応用が可能です。

より複雑なプログラミングの問題を解決するために、while文をどのように利用できるかを見ていきましょう。

○サンプルコード3:入力された数値の合計を計算

この例では、ユーザーから入力された数値を合計するプログラムを表しています。

ユーザーが0を入力するまで、入力された数値を合計し続けます。

#include <iostream>

int main() {
    int sum = 0;
    int number;

    std::cout << "Enter numbers to sum, 0 to finish: ";
    while (true) {
        std::cin >> number;
        if (number == 0) {
            break; // 0が入力されたらループを終了
        }
        sum += number; // 合計に加算
        std::cout << "Current sum: " << sum << std::endl;
        std::cout << "Enter another number (0 to finish): ";
    }

    std::cout << "Total sum: " << sum << std::endl;
    return 0;
}

このプログラムでは、無限ループを使用し、ループ内でユーザーの入力を受け取っています。

0が入力されると、breakステートメントによりループから抜け出し、最終的な合計を出力します。

○サンプルコード4:条件に応じてループを抜ける方法

特定の条件が満たされたときにループから抜け出す方法を表す例を紹介します。

この例では、ランダムに生成された数値が特定の範囲内になるまでループを続け、範囲内になったらループを終了します。

#include <iostream>
#include <cstdlib> // rand関数とsrand関数のためのヘッダ
#include <ctime>   // time関数のためのヘッダ

int main() {
    srand(time(0)); // 乱数生成器の初期化

    int randomNumber;
    while (true) {
        randomNumber = rand() % 100; // 0から99のランダムな数値
        std::cout << "Random Number: " << randomNumber << std::endl;
        if (randomNumber >= 10 && randomNumber <= 20) {
            break; // 数値が10から20の範囲内ならループ終了
        }
    }
    std::cout << "Final number: " << randomNumber << std::endl;
    return 0;
}

このコードでは、無限ループ内でランダムな数値を生成し、その数値が10から20の範囲内になるとループから抜け出します。

○サンプルコード5:ネストされたループの使用例

while文をネスト(入れ子に)することで、より複雑な繰り返し処理を実現できます。

下記の例は、九九の表を出力するプログラムです。

#include <iostream>

int main() {
    for (int i = 1; i <= 9; i++) { // 外側のループ(行)
        for (int j = 1; j <= 9; j++) { // 内側のループ(列)
            std::cout << i * j << '\t'; // 乗算結果を出力
        }
        std::cout << std::endl; // 行ごとに改行
    }
    return 0;
}

このプログラムでは、2つのfor文を使用しています。

外側のループが1つの行を処理し、内側のループがその行の各列を処理します。

各列の乗算結果を出力し、行ごとに改行しています。

●while文の注意点と対処法

C++でwhile文を使用する際には、いくつかの重要な注意点があります。

これらを理解し、適切な対処法を用いることで、より効率的で安全なプログラムを作成することができます。

○無限ループの危険性とその回避方法

while文を使用する際の一般的な問題の一つは、無限ループです。

これは、ループの終了条件が満たされず、プログラムが終了しない状態を指します。

無限ループは、プログラムのパフォーマンスに悪影響を与え、システムリソースを過度に消費することがあります。

無限ループを避けるためには、ループの終了条件を明確に設定することが重要です。

ここでは、ループの終了条件を適切に設定した例を紹介します。

#include <iostream>

int main() {
    int counter = 1;
    while (counter <= 10) { // 終了条件を明確に設定
        std::cout << counter << std::endl;
        counter++; // counterを増やしてループの終了に向けて進める
    }
    return 0;
}

この例では、counterが10以下の場合にのみループを続けるように設定されています。

counterの値が10を超えると、ループは終了します。

○条件式の正しい設定方法

while文の条件式を設定する際には、その条件がプログラムの実行中に変更され得ることを確認する必要があります。

条件式が常に真である場合、または常に偽である場合、ループは意図したとおりに動作しません。

下記の例では、ユーザーが特定の文字を入力するまでループを続けています。

#include <iostream>

int main() {
    char input;
    std::cout << "Enter 'x' to stop: ";
    while (input != 'x') { // 条件式が変化することを確認
        std::cin >> input;
        std::cout << "You entered: " << input << std::endl;
    }
    std::cout << "Exiting program." << std::endl;
    return 0;
}

このコードでは、ユーザーが’x’を入力するまでループが続きます。

ユーザーの入力によって条件式の結果が変化するため、ループは適切に終了します。

●while文をカスタマイズする方法

C++のwhile文は、その基本的な形から多様なカスタマイズが可能です。

プログラムの特定の要件に合わせてwhile文を調整し、より効率的なコードを作成することができます。

ここでは、while文をカスタマイズするためのいくつかの方法とサンプルコードを紹介します。

○サンプルコード6:複数の条件を組み合わせる

while文では、複数の条件を組み合わせてより複雑なループ制御を行うことができます。

下記の例では、2つの異なる条件を組み合わせています。

#include <iostream>

int main() {
    int number = 1;
    while (number <= 100 && number % 2 == 0) { // 2つの条件の組み合わせ
        std::cout << number << std::endl;
        number += 2; // 2ずつ増やすことで偶数のみを表示
    }
    return 0;
}

この例では、numberが100以下でかつ偶数の場合にのみループを続けるようにしています。

numberを2ずつ増やすことで、偶数のみを出力します。

○サンプルコード7:関数内でのwhile文の利用

while文は関数内で使用することもでき、特定のタスクを繰り返し実行するのに役立ちます。

下記の例では、特定の条件を満たすまで数値の入力を求める関数を作成しています。

#include <iostream>

int getInput() {
    int input;
    while (true) {
        std::cout << "Enter a number (10-20): ";
        std::cin >> input;
        if (input >= 10 && input <= 20) {
            return input; // 条件を満たしたら入力を返す
        }
        std::cout << "Invalid input. Please try again." << std::endl;
    }
}

int main() {
    int number = getInput(); // 関数から入力を取得
    std::cout << "You entered: " << number << std::endl;
    return 0;
}

このコードでは、getInput関数内で無限ループを使用し、ユーザーが10から20の範囲の数値を入力するまで繰り返し入力を求めています。

適切な入力が得られたら、その値を返してループを終了します。

まとめ

この記事を通じて、C++におけるwhile文の基本的な使い方から応用までを解説してきました。

初心者から上級者までが理解できるように、実用的なサンプルコードと詳細な説明を交えて、while文の効果的な使用方法を解説しました。

while文の注意点やカスタマイズ方法を理解し、プログラミングスキルをさらに高めることができるでしょう。

C++のwhile文は、プログラミングにおいて非常に強力なツールであり、多様な問題解決に役立つことを実感していただけたはずです。