C++ 速查手冊 V1.00 - 單元 5.2 - else 陳述




else 如同英文字義,否則的意思,通常放在 if 的後面,若 if 的條件為真,就執行 if 底下大括弧圍起來的程式區塊,若為假,就執行 else 底下大括弧圍起來的程式區塊。


形式如下



這個概念用於二選一的情況,不是這樣就是那樣。舉例如下


001 #include <iostream>
002
003 int main() {
004    char a = 'h';
005    char b = 'k';
006
007    if (a == b) {
008       std::cout << "Welcome to my world!"
009                 << std::endl
010    }
011    else {
012       std::cout << "How do you do?"
013                 << std::endl;
014    }
015
016    return 0;
017 }
018  
019 /* Kaiching Chang 
020    u0502_1.cpp
021    2014-02 */

編譯後執行,,結果如下


$ g++ u0502_1.cpp
$ ./a.out
How do you do?
$

此例中,由於第 7 行


007 if (a == b) {

變數 a 不等於變數 b ,所以程式會跳去執行第 11 到 14 行的部份


011 else {
012    std::cout << "How do you do?"
013              << std::endl;
014 }

if-else 也可以是巢狀 (nested) 的使用,例如


001 #include <iostream>
002
003 int main() {
004    char a = 'h';
005    char b = 'k';
006
007    if (a == 'a') {
008       std::cout << "Yes!"
009                 << std::endl;
010    }
011    else {
012       if (a == b) {
013          std::cout << "No!" 
014                    << std::endl;
015       }
016       else {
017          std::cout << "What?"
018                    << std::endl;
019       }
020    }
021
022    return 0;
023 }
024  
025 /* Kaiching Chang 
026    u0502_2.cpp
027    2014-02 */

編譯後執行,結果如下


$ g++ u0502_2.cpp
$ ./a.out
What?
$

所謂巢狀的 if-else 陳述就是在第 7 到 20 行的地方


007 if (a == 'a') {
008    std::cout << "Yes!"
009              << std::endl;
010 }
011 else {
012    if (a == b) {
013       std::cout << "No!" 
014                 << std::endl;
015    }
016    else {
017       std::cout << "What?"
018                 << std::endl;
019    }
020 }

第 11 行的 else 後頭的大括弧內,另外使用一組 if-else 陳述,這個地方由於我們利用縮排 (indentation) 表現清楚原始程式碼的語意,看起來凹陷下去,看似好像巢一般,故稱為巢狀。巢狀的 if-else 經常出現在需要多重選擇判斷的的場合。


由於巢狀的 if-else 很常用,因此若改寫成


007 if (a == 'a') {
008    std::cout << "Yes!"
009              << std::endl;
010 }
011 else if (a == b) {
012    std::cout << "No!" 
013              << std::endl;
014 }
015 else {
016    std::cout << "What?"
017              << std::endl;
018 }

編譯器也接受這樣的寫法。


continue ...

沒有留言: