---
# System prepended metadata

title: 選擇性敘述if
tags: [初階班]

---

---
tags: 初階班
---
用來對條件進行判斷，通常會用到`bool`變數或是關係運算子來當條件

# 語法

## if

```cpp=
if(判斷式A){
    //若A成立時要執行的程式碼
}
```

ex:

```cpp=
#include <iostream>
using namespace std;
int main(){
    if(1 < 2){
        cout << "1 < 2"; //1<2成立故會執行
    }
    if(1 > 2){
        cout << "1 > 2"; //1>2不成立故不執行
    }
}
```
執行結果

```cpp
1 < 2
```
:::spoiler ***小技巧***
`if`的判斷是布林值
因此可以
```cpp=
if(true){
    //此程式碼必執行
}
```

:::

## else if & else

```cpp=
#include <iostream>
using namespace std;
int main(){
    if(判斷條件A){
        //程式碼(若成立則執行)
    }
    else if(判斷條件B){
        //程式碼(A不成立但B成立時執行)
    }
    else if(判斷條件C){
        //程式碼(A不成立且B不成立時但C成立執行)
    }
    else{
        //程式碼(上述條件皆不成立時執行)
    }
}
```

else只能接在if或else if後
且只有當前面的條件全都不符合時才會執行

:::warning

一個`if`後接一連串`else if`的判斷只會執行最前面的一項(即使很多判斷條件滿足)

:::spoiler 要執行好多行？
重新用`if`
:::
:::info
:::spoiler 例題：[a024：該減肥了！](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a024)
題目：給定n，若n>50則將n-1，否則不變
```cpp=
#include <iostream>
using namespace std;
int main(){
    int n;
    cin >> n;
    if(n > 50)
        n--;
    cout << n;
    
    /** 也可以寫成下面這樣
    if(n > 50)
        cout << n - 1;
    else
        cout << n;
    **/
}
```
:::
# 三元條件運算子

`(條件式)` `?` `程式碼A` `:` `程式碼B`
例如:

```cpp=
9 > 1? cout << "yes" << '\n': cout << "no";
```

意思是如果 9>1 則輸出 yes 並換行，否則輸出 no (不換行)
因為執行的優先順序，盡量加()
# 補充
## 0/1
其實if最後判斷是以1(true)/0(false)決定的
因此可以有下面的寫法
```cpp=
if(1) {
    cout << "yes"; //會執行，因為1是true
}
```
```cpp=
if(12345) {
    cout << "Yes"; //會執行，因為對bool值來說0以外的都是true
}
```
```cpp=
if(0) {
    cout << "no"; //不執行，因為0是false
}
```
```cpp=
bool b = 1; //b = true
if(b) {
    cout << "YES"; //會執行，因為b是true
}
```
```cpp=
int n = 1;
if(n) {
    cout << "YESSS"; //會執行，因為n非0
}
```
```cpp=
int k = 0;
if(k) {
    cout << "No"; //不執行，因為k=0=false
}
```
或者其實可以將`if(n)`理解成`if(n != 0)`，效果一樣
而這種判斷條件的寫法不論在`if`或之後的迴圈都通用