練習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
語句來實現它,搜尋它的有關資料。 -
第一個判斷所輸出的話真的正確嗎?由於你的“第一個引數”不是使用者輸入的第一個引數,把它改正。