Semorphe

運算式

讓程式回答「是不是」,而不只是「是多少」。 · ⏱ 約 25 分鐘

你會學到三件事

  1. 比較會產生一種新的值:
  2. 怎麼把好幾個條件串起來&& ||
  3. 為什麼 === 差一個字元,卻是兩件完全不同的事

開始之前

上一課的運算,答案都是數字。這一課的答案只有兩種:成立不成立

它現在看起來沒什麼用——cout 出來就是 10。 而下一課的「選擇」整堂都靠它,所以先把它弄清楚。

一、比較

int a = 7, b = 3;
bool big = a > b;
cout << big << endl;      // 1

a > b 的答案不是數字,是一個成不成立

C++ 用 bool 這個型態裝它,而印出來的時候:成立是 1,不成立是 0

六個比較符號:

符號 意思
> < 大於、小於
>= <= 大於等於、小於等於 注意是 >= 不是 =>
== 等於 ⚠️ 兩個等號
!= 不等於

🔴 === 是兩件事

a = 3      「把 3 放進 a」        ← 上一課學的,它會【改變】a
a == 3     「a 是不是 3」        ← 這一課學的,它【只是問】

寫錯不一定會報錯——if (a = 3) 是合法的 C++,只是它做的事跟你想的完全不同 (它把 3 塞進 a,然後因為 3 不是 0,判定「成立」)。

這是初學者最常見的一個錯,而編譯器不一定會攔你。

二、把條件串起來

cout << (a > 5 && b < 5) << endl;   // 1
符號 唸作 什麼時候成立
&& 而且 兩邊都成立
|| 或者 至少一邊成立
! 不是 把成立與不成立對調
cout << !(a == b) << endl;   // a 不等於 b → 1

⚠️ 外面那對括號不要省。 cout << a > 5 會被讀成 (cout << a) > 5—— 因為 <<> 先算。這種錯的症狀通常是一個看不懂的錯誤訊息。

三、順序

a > 5 && b < 5 裡面,><先算&& 後算。 規則和數學一樣:乘除先於加減,而比較先於邏輯。

記不住就加括號。括號永遠不會是錯的,而它讓下一個讀你程式的人省事。

完成的樣子

int main() {
    int a = 7, b = 3;
    bool big = a > b;
    cout << big << endl;
    cout << (a > 5 && b < 5) << endl;
    cout << !(a == b) << endl;
    return 0;
}

換你了

改成印出「a 是不是介於 1 到 10 之間」。

⚠️ 提示:數學寫成 1 <= a <= 10,而那在 C++ 裡是合法的、而且答案是錯的。 要拆成兩個條件用 && 串起來。

(想一下為什麼:1 <= a 先算出 1,然後變成 1 <= 10,永遠成立。)

這一課你做了什麼

如果卡住了

你看到 多半是因為
印出 10,不是 true 這就是對的。C++ 的 bool 印出來是數字
cout << a > 5 報錯 少了括號。<<> 先算
條件明明不成立卻進去了 == 寫成 =
1 <= a <= 10 永遠成立 那是數學寫法。要拆成 1 <= a && a <= 10
在編輯器打開這一課 →