Appearance
邏輯判斷
在能夠接收並運算數據後,就需要來介紹如何針對不同情況處理輸入輸出。
運算子
在做判斷之前,我們要先學會電腦的「是非觀」。在 C 語言中,0 代表 偽 (False),其他的數值都代表 真 (True)。
比較運算子:== (等於)、!= (不等於)、>、<、>=、<=
邏輯運算子:
- && (AND):全部都要對才算對。
- || (OR):只要有一個對就算對。
- ! (NOT):反轉真相。
因為 AND OR NOT 的權重不一樣,因此我建議只要遇到就括起來。
易犯錯誤提醒
=是寫入值,==是比較,if(a = 5)一定會被執行。==是比較兩邊,如果寫a == b == c,這等同於(a == b) == c通常不代表 a,b,c 三者值相等。
進階: 短路求值
- 在 A && B 中,如果 A 是 False,電腦就不會去執行 B。
- 在 A || B 中,如果 A 是 True,電腦也不會去執行 B。 應用: 透過這個機制,可以應對一些特別的情況
c
if (b && (a / b) > 0) printf("%d\n", a / b);條件式
if / else if / else
這是最常用的判斷方式,如果要執行的指令只有一行的話 {} 可以省略。
c
if (score == 100) {
printf("滿分!\n");
} else if (score >= 60) {
printf("及格\n");
} else {
printf("不及格\n");
}switch / case
當你有大量固定數值的判斷時,switch 會比一堆 if else 更清晰,且效能表現會比 if/else 較好,但 switch 的判斷無法放變數,只能放 const expression。
c
switch(score) {
case 'A':
printf("excellent\n");
break;
case 'B':
printf("good\n");
break;
// 不使用 break 會連同之後條件一起進行,直到遇到 break
case 'D': // very poor
printf("very ");
case 'C': // poor
printf("poor\n");
break;
// 在其他條件都沒有觸發的情況
default:
printf("fine\n");
}switch 限制
switch 語法不能使用變數作為判斷的 case
Eg.
c
float b;
const float pi = 3.14;
switch(a) {
case b: // error
// something
break;
case pi*2: // fine
// other things
break;
}單行寫法
我不推薦使用單行的寫法,可讀性不太好,但總有人寫那種算是,所以只要能看懂就好。
c
// 如果 success 是 true,那 result 是 Success 反之則為 Fail
result = (success)? "Success" : "Fail";