第20章 多条件分岐

 入力した数値が0のときは...、1のときは...、2のときは...、とかしたいとき、if を使っていては面倒です。今回はそういうときのいい方法を教えたいと思います。


 今回の要点は以下の通りです。


 では、いってみましょう。


 第12章と前回に割り算プログラムを作りました。今度は四則演算全部できるようにしましょう。

 そのために、どれを行うか選択することにします。

どれをしますか(1:加算,2:減算,3:乗算,4:除算) > 

 第1項と第2項の入力は共通にしていいですね。ですが、計算と出力は分岐する必要があります。

 あと、演算の種類の選択で1〜4以外の数値を入れた場合の処理をする必要があります。

 ここでは次のようにすればいいですね。選択の結果を sign という変数に入れます。そして、sign が 1 のときは足し算をして、そうでないときはまた sign を確かめます。それを繰り返して、それでも条件からもれれば、エラーを表示します。

 条件分岐は if-else でしたね。上の処理を直訳すると

if(sign == 1){ ... }
else if(sign == 2){ ... }
else if(sign == 3){ ... }
else if(sign == 4){ ... }
else{ ... }

となります。でも、こんなので本当にいいんでしょうか。

 では、次のプログラムを見て下さい。

プログラム
// Switch1b.cpp
#include <iostream.h>

int main()
{
    int a, b, sign, result, i;

    for(i = 0; i < 5; i++)
    {
        cout << "第1項 > ";
        cin >> a;
        cout << "第2項 > ";
        cin >> b;
        cout << "どれをしますか(1:加算,2:減算,3:乗算,4:除算) > ";
        cin >> sign;

        if(sign == 1)
            result = a + b;
        else if(sign == 2)
            result = a - b;
        else if(sign == 3)
            result = a * b;
        else if(sign == 4)
            result = a / b;
        else
        {
            cout << "真面目にせんかい!" << endl;
            continue;
        }

        cout << "答えは " << result << " です。" << endl;
    }
    return 0;
}
実行結果
第1項 > 1
第2項 > 2
どれをしますか(1:加算,2:減算,3:乗算,4:除算) > 1
答えは 3 です。
第1項 > 5
第2項 > 4
どれをしますか(1:加算,2:減算,3:乗算,4:除算) > 2
答えは 1 です。
第1項 > 9
第2項 > 6
どれをしますか(1:加算,2:減算,3:乗算,4:除算) > 3
答えは 54 です。
第1項 > 14
第2項 > 7
どれをしますか(1:加算,2:減算,3:乗算,4:除算) > 4
答えは 2 です。
第1項 > 678
第2項 > -543
どれをしますか(1:加算,2:減算,3:乗算,4:除算) > 5
真面目にせんかい!

 どうやらこれでいいみたいです。

 このように、単純に else if を使えば多条件分岐ができます


 でも、判定するのは変数 sign だけなんだから、もうちょっと、こう、簡単にならないものですかね。

 そのようなときは switch 文を使います。

 では、次のプログラムを見て下さい。

プログラム
// Switch1.cpp
#include <iostream.h>

int main()
{
    int a, b, sign, result, i;

    for(i = 0; i < 5; i++)
    {
        cout << "第1項 > ";
        cin >> a;
        cout << "第2項 > ";
        cin >> b;
        cout << "どれをしますか(1:加算,2:減算,3:乗算,4:除算) > ";
        cin >> sign;

        switch(sign)
        {
        case 1:
            result = a + b; break;
        case 2:
            result = a - b; break;
        case 3:
            result = a * b; break;
        case 4:
            result = a / b; break;
        default:
            cout << "真面目にせんかい!" << endl;
            continue;
        }

        cout << "答えは " << result << " です。" << endl;
    }
    return 0;
}
実行結果
上と同じだから省略

 if - else if - else を使っていたところが switch 文に置き換わっています。

 switch の書式は

switch(<式>)
{
case <値1>: <実行文>
case <値2>: <実行文>
case <値3>: <実行文>
. . .
default: <実行文> }

です。

 <式> が <値> のどれかである場合、その場所に飛びます。もし、どれとも違う場合は default: の所へ飛びます。

 switch 文を終わるには break を使います。次の case に到達したからといっても、終わってくれません。

 また、else と同じように、default はなくていいのなら、なくても構いません。

 switch 文はループではないので、continue はその外のループ命令に対して効力を持ちます。


 今回でひとまず条件分岐とループ処理は終わりです。ここまでのことを使えばある程度のことはもうできるでしょう。何か簡単なプログラムを組んでみるのもいいでしょうね。

 今回の要点は次の通りでした。


 では、次回まで。さようなら。


第19章 ループの強制終了 | 第21章 ビットとバイト

Last update was done on 1999.8.17

この講座の著作権はロベールが保有しています