笨辦法學C 練習12:If,Else If,Else

飛龍發表於2019-05-10

練習12:If,Else If,Else

原文:Exercise 12: If, Else-If, Else

譯者:飛龍

if語句是每個程式語言中共有的特性,包括C語言。下面是一段程式碼,使用了if語句來確保只傳入了一個或兩個命令列引數:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int i = 0;

    if(argc == 1) {
        printf("You only have one argument. You suck.
");
    } else if(argc > 1 && argc < 4) {
        printf("Here`s your arguments:
");

        for(i = 0; i < argc; i++) {
            printf("%s ", argv[i]);
        }
        printf("
");
    } else {
        printf("You have too many arguments. You suck.
");
    }

    return 0;
}

if語句的格式為:

if(TEST) {
    CODE;
} else if(TEST) {
    CODE;
} else {
    CODE;
}

下面是其它語言和C的差異:

  • 像之前提到的那樣,TEST表示式值為0時為false,其它情況為true

  • 你需要在TEST周圍寫上圓括號,其它語言可能不用。

  • (只有單條語句時)你並不需要使用花括號{}來閉合程式碼,但是這是一種非常不好的格式,不要這麼寫。花括號讓一個分支的程式碼的開始和結束變得清晰。如果你不把程式碼寫在裡面會出現錯誤。

除了上面那些,就和其它語言一樣了。else if或者else的部分並不必須出現。

你會看到什麼

這段程式碼非常易於執行和嘗試:

$ make ex12
cc -Wall -g    ex12.c   -o ex12
$ ./ex12
You only have one argument. You suck.
$ ./ex12 one
Here`s your arguments:
./ex12 one 
$ ./ex12 one two
Here`s your arguments:
./ex12 one two 
$ ./ex12 one two three
You have too many arguments. You suck.
$

如何使它崩潰

使這段程式碼崩潰並不容易,因為它太簡單了。嘗試把if語句的測試表示式搞亂:

  • 移除else部分,使它不能處理邊界情況。

  • &&改為||,於是你會把“與”操作變成“或”操作,並且看看會發生什麼。

附加題

  • 我已經向你簡短地介紹了&&,它執行“與”操作。上網搜尋與之不同的“布林運算子”。

  • 為這個程式編寫更多的測試用例,看看你會寫出什麼。

  • 回到練習10和11,使用if語句使迴圈提前退出。你需要break語句來實現它,搜尋它的有關資料。

  • 第一個判斷所輸出的話真的正確嗎?由於你的“第一個引數”不是使用者輸入的第一個引數,把它改正。

相關文章