鍍金池/ 教程/ C/ 練習(xí)12:If,Else If,Else
練習(xí)9:數(shù)組和字符串
練習(xí)6:變量類型
練習(xí)3:格式化輸出
練習(xí)4:Valgrind 介紹
練習(xí)28:Makefile 進(jìn)階
練習(xí)14:編寫并使用函數(shù)
練習(xí)21:高級數(shù)據(jù)類型和控制結(jié)構(gòu)
練習(xí)20:Zed的強(qiáng)大的調(diào)試宏
練習(xí)18:函數(shù)指針
練習(xí)0:準(zhǔn)備
練習(xí)15:指針,可怕的指針
練習(xí)27:創(chuàng)造性和防御性編程
練習(xí)22:棧、作用域和全局
練習(xí)10:字符串?dāng)?shù)組和循環(huán)
練習(xí)8:大小和數(shù)組
練習(xí)16:結(jié)構(gòu)體和指向它們的指針
練習(xí)7:更多變量和一些算術(shù)
練習(xí)23:認(rèn)識達(dá)夫設(shè)備
練習(xí)12:If,Else If,Else
練習(xí)2:用Make來代替Python
練習(xí)1:啟用編譯器
練習(xí)11:While循環(huán)和布爾表達(dá)式
練習(xí)5:一個(gè)C程序的結(jié)構(gòu)
練習(xí)24:輸入輸出和文件
練習(xí)25:變參函數(shù)
練習(xí)13:Switch語句
練習(xí)19:一個(gè)簡單的對象系統(tǒng)
練習(xí)26:編寫第一個(gè)真正的程序
導(dǎo)言:C的笛卡爾之夢
練習(xí)17:堆和棧的內(nèi)存分配

練習(xí)12:If,Else If,Else

if語句是每個(gè)編程語言中共有的特性,包括C語言。下面是一段代碼,使用了if語句來確保只傳入了一個(gè)或兩個(gè)命令行參數(shù):

#include <stdio.h>

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

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

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

    return 0;
}

if語句的格式為:

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

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

  • 像之前提到的那樣,TEST表達(dá)式值為0時(shí)為false,其它情況為true。
  • 你需要在TEST周圍寫上圓括號,其它語言可能不用。
  • (只有單條語句時(shí))你并不需要使用花括號{}來閉合代碼,但是這是一種非常不好的格式,不要這么寫?;ɡㄌ栕屢粋€(gè)分支的代碼的開始和結(jié)束變得清晰。如果你不把代碼寫在里面會出現(xiàn)錯(cuò)誤。

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

你會看到什么

這段代碼非常易于運(yùn)行和嘗試:

$ 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.
$

如何使它崩潰

使這段代碼崩潰并不容易,因?yàn)樗唵瘟恕L試把if語句的測試表達(dá)式搞亂:

  • 移除else部分,使它不能處理邊界情況。
  • &&改為||,于是你會把“與”操作變成“或”操作,并且看看會發(fā)生什么。

附加題

  • 我已經(jīng)向你簡短地介紹了&&,它執(zhí)行“與”操作。上網(wǎng)搜索與之不同的“布爾運(yùn)算符”。
  • 為這個(gè)程序編寫更多的測試用例,看看你會寫出什么。
  • 回到練習(xí)10和11,使用if語句使循環(huán)提前退出。你需要break語句來實(shí)現(xiàn)它,搜索它的有關(guān)資料。
  • 第一個(gè)判斷所輸出的話真的正確嗎?由于你的“第一個(gè)參數(shù)”不是用戶輸入的第一個(gè)參數(shù),把它改正。