C++與演算法

單選判斷 if - else if - else

故事 - 遊戲選單

小鳴利用C++製作了一款小遊戲

在遊戲一開始的選單畫面,玩家可以選擇以下其中一項動作:

  (1)開始遊戲 (2)讀取進度 (3)遊戲說明 (4)離開遊戲

小鳴的程式碼如下

#include<iostream>
using namespace std;

int main()
{
    int select;

    cout << "請輸入指令:";
    cin >> select;

    if( select==1 )
        cout << "開始遊戲" << endl;
    if( select==2 )
        cout << "讀取進度" << endl;
    if( select==3 )
        cout << "遊戲說明" << endl;
    if( select==4 )
        cout << "離開遊戲" << endl;

    return 0;
}

這樣雖然可以正確運作,但是想想玩家輸入1後,程式運作的情形:

  1. 玩家輸入1
  2. 程式判斷 select==1成立,輸出開始遊戲
  3. 程式判斷 select==2不成立,沒有任何事發生
  4. 程式判斷 select==3不成立,沒有任何事發生
  5. 程式判斷 select==4不成立,沒有任何事發生

因為一次只能選擇一個動作,既然select==1成立了,顯然 3. 4. 5.都是不需要判斷的。

浪費了很多程式的執行時間,也增加了出錯的可能性。


試試看 - 不小心改到select

if( select==1 )
    cout << "開始遊戲" << endl;

改成

if( select==1 )
{
    cout << "開始遊戲" << endl;
    select = 2;
}

玩家輸入1後,會發生什麼事?




語法一 - 只選其一 if - else if

  • 最多只會執行其中一個if
if( 條件式一 )
{
    如果條件式一成立時做什麼...
}
else if( 條件式二 )
{
    當條件式一不成立的情況下,如果條件式二成立時做什麼...
}
else if( 條件式三 )
{
    當條件式一、二不成立的情況下,如果條件式三成立時做什麼...
}

...以此類推


用嘴巴念念看

如果 玩家輸入1,就輸出開始遊戲

否則如果 玩家輸入2,就輸出讀取進度

否則如果 玩家輸入3,就輸出遊戲說明

否則如果 玩家輸入4,就輸出離開遊戲




範例一 - 遊戲選單(if - else if版)

#include<iostream>
using namespace std;

int main()
{
    int select;

    cout << "請輸入指令:";
    cin >> select;

    if( select==1 )
        cout << "開始遊戲" << endl;
    else if( select==2 )
        cout << "讀取進度" << endl;
    else if( select==3 )
        cout << "遊戲說明" << endl;
    else if( select==4 )
        cout << "離開遊戲" << endl;

    return 0;
}

試試看

  • 用本段程式碼再試一次上面的試試看,和原來的結果一樣嗎?




語法二 - 以上皆非時 if - else if - else

  • 只是最後面多一個else,代表以上皆非時要做什麼
if( 條件式一 )
{
    如果條件式一成立時做什麼...
}
else if( 條件式二 )
{
    當條件式一不成立的情況下,如果條件式二成立時做什麼...
}
else if( 條件式三 )
{
    當條件式一、二不成立的情況下,如果條件式三成立時做什麼...
}
else
{
    當以上所有if都不成立時做什麼...
}




範例二 - 三三兩兩

讓使用者輸入一個正整數N,再依下列條件輸出結果:

a) 若 N 整除 2,則輸出 2 的倍數

b) 若 N 不滿足 a) 的狀況但整除 3,則輸出 3 的倍數

c) 若 N 不符合以上的狀況,則輸出 非2 或 3 的倍數

#include<iostream>
using namespace std;

int main()
{
    int N;

    cin >> N;

    if( N%2 == 0 )
        cout << "2的倍數" << endl;
    else if( N%3 == 0 )
        cout << "3的倍數" << endl;
    else
        cout << "非2 或 3 的倍數" << endl;

    return 0;
}