Skip to content

邏輯判斷

在能夠接收並運算數據後,就需要來介紹如何針對不同情況處理輸入輸出。

運算子

在做判斷之前,我們要先學會電腦的「是非觀」。在 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";