運算式
讓程式回答「是不是」,而不只是「是多少」。 · ⏱ 約 25 分鐘
你會學到三件事
- 比較會產生一種新的值:真 或 假
- 怎麼把好幾個條件串起來(
&& ||)
- 為什麼
= 和 == 差一個字元,卻是兩件完全不同的事
開始之前
上一課的運算,答案都是數字。這一課的答案只有兩種:成立或不成立。
它現在看起來沒什麼用——cout 出來就是 1 或 0。
而下一課的「選擇」整堂都靠它,所以先把它弄清楚。
一、比較
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,永遠成立。)
這一課你做了什麼
- 你做出了一個
bool,它只有兩種值
- 你用
&& || ! 把條件串起來
- 你分得出
=(放進去)和 ==(問一下)
如果卡住了
| 你看到 |
多半是因為 |
印出 1 或 0,不是 true |
這就是對的。C++ 的 bool 印出來是數字 |
cout << a > 5 報錯 |
少了括號。<< 比 > 先算 |
| 條件明明不成立卻進去了 |
== 寫成 = 了 |
1 <= a <= 10 永遠成立 |
那是數學寫法。要拆成 1 <= a && a <= 10 |
在編輯器打開這一課 →