C 速查手冊

if 選擇

C 語言中最簡單的選擇結構為單一個 if 陳述,通常在關鍵字 (keyword) if 後接一個小括弧,該小括弧內的運算式 (expression) 即為條件 (condition) 。形式如下

if (condition)

若運算式的結果為非 0 的值, 也就是條件為真,其後用大括弧圍起來的程式區塊便會執行,而若運算式的結果為 0 ,這樣一來條件就為假,程式會跳過大括弧,尋找右大括號 } 後的第一個陳述執行。

如果不用大括號圍住 if 陳述後作為分流的程式碼,通常編譯器只接受一行,因此為避免程式執行的歧異,或非預期的錯誤,養成使用大括弧會是好習慣。

以下程式示範使用單一的 if 陳述

#include <stdio.h>

int main(void)
{
    char a = 'h';
    char b = 'h';
    
    if (a == b) {
        printf("Welcome to my world!\n");
    }
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
    http://kaiching.org/
    檔名:ifcon.c
    功能:示範使用單一的 if 陳述
    作者:張凱慶 */

編譯後執行,結果如下

$ gcc ifcon.c
$ a.out
Welcome to my world!
$

if 陳述的部分

if (a == b) {
    printf("Welcome to my world!\n");
}

由於變數 a 及變數 b 裡頭所儲存的值都是小寫字母 h 的位元編碼,所以條件為真, if 陳述後頭大括弧的陳述便會執行。

if 也可以跟關鍵字 else 連用,這樣一來, if 的條件為假時,程式跳過 if 陳述後頭的大括弧,而去找 else 後頭大括弧的陳述來執行。

以下程式示範 if-else 陳述的使用

#include <stdio.h>

int main(void)
{
    char a = 'h';
    char b = 'k';
    
    if (a == b) {
        printf("Welcome to my world!\n");
    }
    else {
        printf("How do you do?\n");
    }
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
    http://kaiching.org/
    檔名:ifelsecon.c
    功能:示範 if-else 陳述的使用
    作者:張凱慶 */

編譯後執行,結果如下

$ gcc ifelsecon.c
$ a.out
How do you do?
$

此例中的 if 部分

if (a == b) {
    printf("Welcome to my world!\n");
}

由於變數 a 不等於變數 b ,所以程式會跳到執行 else 的部分

else {
    printf("How do you do?\n");
}

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

#include <stdio.h>

int main(void)
{
    char a = 'h';
    char b = 'k';
    
    if (a == 'a') {
        printf("Yes!\n");
    }
    else { 
        if (a == 'b') {
            printf("No!\n");
        }
        else {
            printf("What?\n");
        }
    }
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
    http://kaiching.org/
    檔名:ifnestcon.c
    功能:示範巢狀的 if-else 陳述
    作者:張凱慶 */

編譯後執行,結果如下

$ gcc ifnestcon.c
$ a.out
What?
$

所謂巢狀的 if-else 陳述如下

if (a == 'a') {
    printf("Yes!\n");
}
else { 
    if (a == 'b') {
        printf("No!\n");
    }
    else {
        printf("What?\n");
    }
}

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

由於巢狀的 if-else 很常用,所以若寫成

if (a == 'a') {
    printf("Yes!\n");
}
else if (a == 'b') {
    printf("No!\n");
}
else {
    printf("What?\n");
}

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

回 C 速查手冊首頁