読み込み中...

C++のif-else文を完全ガイド!初心者からプロまで10のサンプルコードで徹底解説

C++におけるif-else文の解説記事のサムネイル画像 C++
この記事は約17分で読めます。

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

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

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

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

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

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

はじめに

C++プログラミング言語におけるif-else文は、コンピュータプログラムの流れを制御する基本的な要素の一つです。

この記事では、if-else文の基本から応用までを、初心者から上級者まで理解できるよう丁寧に解説します。

if-else文を学ぶことで、プログラムの条件分岐を扱う力が身につき、より複雑なプログラムを作成することが可能になります。

このガイドを通じて、C++における条件分岐の基礎を固め、プログラミングスキルをさらに高めましょう。

●C++とif-else文の基本

C++は、オブジェクト指向プログラミングをサポートする汎用プログラミング言語の一つです。

C++で書かれたプログラムは、多くの場合、条件に応じて異なる動作をする必要があります。

ここでif-else文の役割が重要になります。if-else文は、指定された条件が真(true)か偽(false)かに基づいて、異なるコードブロックを実行します。

例えば、ユーザーが成人かどうかを判断するプログラムを考えます。

ユーザーの年齢が18歳以上であれば、「成人です」と表示し、そうでなければ「未成年です」と表示するようなプログラムです。

このような場合、if-else文を使用して、年齢に基づいた適切なメッセージを表示することができます。

○if-else文の基本構造とは?

if-else文の基本構造は非常にシンプルです。

まず「if」キーワードの後に条件式を記述し、条件が真の場合に実行するコードブロックを続けます。

さらに、「else」キーワードを使用して、条件が偽の場合に実行する別のコードブロックを指定することができます。

基本的なif-else文の構造は下記のようになります。

if (条件式) {
    // 条件式が真(true)の場合に実行するコード
} else {
    // 条件式が偽(false)の場合に実行するコード
}

この構造を使うことで、C++プログラム内で簡単に条件分岐を実現することができます。

○C++におけるif-else文の役割

C++におけるif-else文の主な役割は、プログラムの流れを条件に応じて制御することです。

プログラムは一連の命令で構成されており、通常これらの命令は上から下へと順序立てて実行されます。

しかし、多くの場合、特定の条件に基づいて異なる命令を実行する必要があります。

if-else文を使うことで、これらの条件に応じた分岐を簡単に実装することが可能です。

例えば、ユーザーの入力値に応じて異なる処理を行うプログラムや、ファイルが存在するかどうかを確認して、存在しない場合にエラーメッセージを表示するプログラムなど、多くの実用的な場面でif-else文は使われます。

●if-else文の詳細な使い方

C++プログラミングにおいて、if-else文は最も基本的でありながら重要な要素の一つです。

この構文は、ある条件が真か偽かに応じて異なるコードブロックを実行するために使用されます。

ここでは、if-else文の基本的な使い方から、少し複雑な使い方までをサンプルコードを交えて詳細に解説します。

○サンプルコード1:基本的なif-else文

基本的なif-else文は、特定の条件が真(true)であれば一つのアクションを、偽(false)であれば別のアクションを実行するために使用されます。

#include <iostream>
using namespace std;

int main() {
    int number = 10;
    if (number > 5) {
        cout << "数は5より大きい" << endl;
    } else {
        cout << "数は5以下" << endl;
    }
    return 0;
}

このコードでは、number変数が5より大きいかどうかを評価しています。

もし5より大きければ、「数は5より大きい」と出力し、そうでなければ「数は5以下」と出力します。

○サンプルコード2:入れ子になったif-else文

if-else文は入れ子にすることもできます。

これにより、より複雑な条件分岐を実現できます。

#include <iostream>
using namespace std;

int main() {
    int number = 23;
    if (number > 20) {
        if (number < 30) {
            cout << "数は20より大きく、30より小さい" << endl;
        } else {
            cout << "数は30以上" << endl;
        }
    } else {
        cout << "数は20以下" << endl;
    }
    return 0;
}

この例では、まずnumberが20より大きいかどうかを評価しています。

もし20より大きければ、さらに30より小さいかどうかを評価し、それぞれの条件に応じたメッセージを出力しています。

○サンプルコード3:複数の条件を持つif-else文

複数の条件を一つのif文で評価することも可能です。

これには論理演算子(&&、||)を使用します。

#include <iostream>
using namespace std;

int main() {
    int number = 15;
    if (number > 10 && number < 20) {
        cout << "数は10より大きく、20より小さい" << endl;
    } else {
        cout << "数は10以下または20以上" << endl;
    }
    return 0;
}

このコードでは、numberが10より大きく、かつ20より小さい場合にのみ「数は10より大きく、20より小さい」と出力します。

それ以外の場合は「数は10以下または20以上」と出力されます。

○サンプルコード4:else ifを使った条件分岐

C++におけるif-else文の応用として、「else if」の使用があります。

これは、複数の条件を順番に評価し、最初に真となるブロックのみを実行するというものです。

この方法で、さまざまな条件に対して異なるアクションを定義できます。

#include <iostream>
using namespace std;

int main() {
    int score = 75;
    if (score >= 90) {
        cout << "優秀" << endl;
    } else if (score >= 70) {
        cout << "良好" << endl;
    } else if (score >= 50) {
        cout << "普通" << endl;
    } else {
        cout << "不合格" << endl;
    }
    return 0;
}

このコードでは、スコアが90以上、70以上、50以上という3つの条件を順に評価しています。

各条件に一致する最初のブロックが実行され、残りのelse ifブロックは無視されます。

このようにして、特定の範囲内で異なる出力を生成することができます。

○サンプルコード5:条件演算子を使った簡略化

C++では、条件演算子(三項演算子)を使用して、if-else文をより簡潔に書くことができます。

この演算子は、条件式 ? 真の場合の値 : 偽の場合の値 という形式で書かれます。

#include <iostream>
using namespace std;

int main() {
    int number = 7;
    string result = (number % 2 == 0) ? "偶数" : "奇数";
    cout << number << "は" << result << "です。" << endl;
    return 0;
}

この例では、numberの値が偶数か奇数かを判断しています。

条件演算子は、numberを2で割った余りが0(偶数)かどうかを評価し、結果に応じて”偶数”または”奇数”の文字列をresult変数に代入しています。

この方法を用いることで、短いコードで条件に応じた処理を実行できます。

●if-else文の応用例

C++におけるif-else文の応用例としては、プログラムの流れを動的に制御する多様なシナリオが考えられます。

ここでは、実際のプログラムでよく見られる具体的な応用例をいくつか紹介し、その使い方をサンプルコードを通じて理解しましょう。

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

ユーザーからの入力に基づいて処理を分岐させる例です。

下記のコードでは、ユーザーからの入力を受け取り、その値に応じて異なるメッセージを表示しています。

#include <iostream>
using namespace std;

int main() {
    int userChoice;
    cout << "1を入力すると「選択1」、それ以外を入力すると「その他の選択」が表示されます: ";
    cin >> userChoice;

    if (userChoice == 1) {
        cout << "選択1" << endl;
    } else {
        cout << "その他の選択" << endl;
    }

    return 0;
}

このプログラムでは、ユーザーが入力した数値が1かどうかをチェックし、1であれば「選択1」、それ以外であれば「その他の選択」と出力します。

○サンプルコード7:ファイルの存在確認と分岐

ファイルの存在を確認し、存在するかどうかによって異なる処理を行う例です。

ここでは、簡単のためにファイルの存在チェックは仮のコードで表現しています。

#include <iostream>
#include <fstream>
using namespace std;

bool isFileExist(const string &fileName) {
    ifstream file(fileName);
    return file.good();
}

int main() {
    string fileName = "example.txt";
    if (isFileExist(fileName)) {
        cout << fileName << " は存在します。" << endl;
    } else {
        cout << fileName << " は存在しません。" << endl;
    }

    return 0;
}

このコードでは、isFileExist関数を使ってファイルの存在を確認し、結果に基づいてメッセージを表示します。

○サンプルコード8:エラーハンドリングと分岐

プログラム中でエラーが発生した場合のハンドリングを表す例を紹介します。

下記のコードでは、エラーが発生したかどうかをチェックし、エラーの場合は適切なメッセージをユーザーに表示しています。

#include <iostream>
using namespace std;

int main() {
    int divisor, dividend;
    cout << "割る数を入力してください: ";
    cin >> divisor;
    cout << "割られる数を入力してください: ";
    cin >> dividend;

    if (divisor == 0) {
        cout << "エラー:0で割ることはできません。" << endl;
    } else {
        cout << "結果は " << dividend / divisor << " です。" << endl;
    }

    return 0;
}

このコードでは、0で割り算を試みた場合にエラーメッセージを出力し、それ以外の場合は割り算の結果を表示します。

○サンプルコード9:状態に応じた処理の分岐

プログラムの中で、異なる状態に基づいて特定の処理を行うことは一般的です。

例えば、アプリケーションの状態やユーザーのアクションによって、異なる処理を実行する必要があります。

ここでは、そのようなシナリオを表すサンプルコードを紹介します。

#include <iostream>
using namespace std;

int main() {
    int appState = 2;

    if (appState == 1) {
        cout << "アプリケーションは起動状態です。" << endl;
    } else if (appState == 2) {
        cout << "アプリケーションは待機状態です。" << endl;
    } else {
        cout << "アプリケーションは終了状態です。" << endl;
    }

    return 0;
}

このプログラムでは、appState変数の値によって、アプリケーションの状態を示す異なるメッセージを出力しています。

○サンプルコード10:複雑なロジックの組み込み

複雑なロジックを含むプログラムでは、複数のif-else文を組み合わせて、より複雑な条件分岐を実現することができます。

ここでは、複数の条件を組み合わせたサンプルを紹介します。

#include <iostream>
using namespace std;

int main() {
    int number = 45;
    bool isEven = (number % 2 == 0);
    bool isMultipleOfFive = (number % 5 == 0);

    if (isEven && isMultipleOfFive) {
        cout << number << "は偶数であり、5の倍数です。" << endl;
    } else if (isEven && !isMultipleOfFive) {
        cout << number << "は偶数ですが、5の倍数ではありません。" << endl;
    } else if (!isEven && isMultipleOfFive) {
        cout << number << "は奇数であり、5の倍数です。" << endl;
    } else {
        cout << number << "は奇数であり、5の倍数でもありません。" << endl;
    }

    return 0;
}

このプログラムでは、number変数が偶数かつ5の倍数であるかどうかを判断し、それに応じて異なるメッセージを出力しています。

●注意点と対処法

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

これらの点を適切に理解し、対処することで、より効率的でバグの少ないコードを書くことができます。

○if-else文を使う際の一般的な注意点

if-else文における条件式の精度は非常に重要です。

不正確な条件式は、予期しない挙動やエラーを引き起こす可能性があります。

また、複雑な条件や多数のネスト(入れ子)されたif-else文は、コードの可読性を低下させることがあります。

可能な限りシンプルで読みやすいコードを心がけることが大切です。

さらに、すべての可能性をカバーしていない場合には、デフォルトケース(else節)を使用して、予期しない入力や状態を適切に処理することが重要です。

○よくある間違いとその対処法

if-else文を使う際には、いくつかの一般的な間違いがあります。

これらの間違いを理解し、適切に対処することが重要です。

まず、条件の誤解が挙げられます。

真偽値を正しく理解しないことで、意図しないブランチにコードが進入することがあります。

条件が明確に真または偽を返すことを確認し、必要に応じて条件をテストすることが重要です。

対処法としては、条件式を簡潔にし、複雑な条件は変数に割り当てるか、関数に分割してクリアにします。

また、ネストの過多も一般的な間違いの一つです。

深くネストされたif-else文は理解しにくく、エラーの原因となることがあります。

対処法としては、複雑な条件分岐は関数に分割するか、スイッチ文やループなど他の制御構造を使用してコードを簡素化することが推奨されます。

さらに、条件の重複も注意が必要です。

似たような条件が複数回評価されることで、パフォーマンスの低下やコードの冗長化が発生することがあります。

対処法としては、共通の条件は変数に格納し、一度だけ評価するようにします。

また、条件の順序を最適化して、最も可能性の高い条件を最初に評価するようにすることも効果的です。

●カスタマイズ方法

C++におけるif-else文をカスタマイズすることで、より効率的で可読性の高いコードを実現することが可能です。

カスタマイズは、プログラムのニーズに応じて、様々な方法で行うことができます。

ここでは、if-else文をカスタマイズするための基本的なアドバイスと、応用的なカスタマイズ例を紹介します。

○if-else文をカスタマイズするためのアドバイス

if-else文をカスタマイズする際には、まず条件式の明確化を心がけることが重要です。

条件式が複雑になりすぎないようにし、できるだけシンプルで理解しやすい形に保つことが望ましいです。

また、複数の条件式を組み合わせる場合には、各条件式を個別の関数に分割し、コードの再利用性を高めることも有効な手段です。

さらに、条件分岐のロジックが複雑になる場合は、スイッチ文やループなど他の制御構造を検討することも検討しましょう。

○応用的なカスタマイズ例

応用的なカスタマイズの例として、状態に基づく複数の条件分岐を効率的に管理する方法を紹介します。

このような場合、enum(列挙型)を利用して、各状態を明確に定義し、スイッチ文を用いて条件分岐を行うことが効果的です。

#include <iostream>
using namespace std;

enum AppState { START, WAIT, END };

int main() {
    AppState currentState = START;

    switch (currentState) {
        case START:
            cout << "アプリケーションが起動しました。" << endl;
            break;
        case WAIT:
            cout << "アプリケーションが待機中です。" << endl;
            break;
        case END:
            cout << "アプリケーションを終了します。" << endl;
            break;
        default:
            cout << "不明な状態です。" << endl;
    }

    return 0;
}

この例では、AppState型の変数currentStateを用いて、アプリケーションの状態を管理しています。

スイッチ文を使用することで、各状態に応じた処理を明確かつ効率的に記述することができます。

まとめ

この記事では、C++におけるif-else文の基本から応用、カスタマイズ方法までを詳細に解説しました。

明確な条件式の作成、コードの可読性の向上、複雑なロジックの効率的な管理など、if-else文を効果的に使用するための様々なテクニックを紹介しました。

これらの知識を活用することで、初心者から上級者まで、C++プログラミングのスキルをさらに向上させることができます。