# 基本構文

ここでは、C++ における代表的な制御構文として、`if` 構文、`for` 構文、`while` 構文、および `switch` 構文について説明します。

## if 構文

`if`、`else if`、`else` を用いた条件分岐は、次のように記述します。条件式が上から順に評価され、最初に真となったブロックのみが実行されます。

```c
#include <iostream>

int main() {
    int a = 2;
    if (a == 1) {
        std::cout << "a is 1." << std::endl;
    } else if (a == 2) {
        std::cout << "a is 2." << std::endl;
    } else {
        std::cout << "a is not 1 or 2." << std::endl;
    }

    return 0;
}
```

この例では、変数 `a` の値に応じて表示内容が切り替わります。`a` が 2 なので、`else if` の条件が真となり、そのブロックが実行されます。

## for 構文

`for` 文は、あらかじめ繰り返し回数や範囲が決まっている場合に用いるループ構文です。初期化、継続条件、更新処理を 1 行で指定できます。

```c
#include <iostream>

int main() {
    for (int i = 0; i < 5; i++) {
        std::cout << "i = " << i << std::endl;
    }

    return 0;
}
```

この例では、`i` が 0 から 4 まで変化しながら、計 5 回ループが実行されます。

## while 構文

`while` 文は、条件式が真である間、処理を繰り返します。繰り返し回数が事前に決まっていない場合によく利用されます。

```c
#include <iostream>

int main() {
    int i = 0;
    
    while (i < 5) {
        std::cout << "i = " << i << std::endl;
        i++;
    }

    return 0;
}
```

この例では、`i` が 5 未満である間、ループが継続されます。ループ内で `i++` により値を更新しているため、無限ループにはなりません。

`while` 構文と似たものに `do while` 構文があります。`while` は条件を先に判定してから処理を行いますが、`do while` はまず 1 回処理を実行してから条件判定を行います。

```c
#include <iostream>

int main() {
    int i = 0;
    
    do {
        std::cout << "i = " << i << std::endl;
        i++;
    } while (i < 5);

    return 0;
}
```

この場合、条件に関わらず、少なくとも 1 回は処理が実行される点が `while` との違いです。

## switch 構文

複数の条件に基づいて分岐処理を行う場合、`if` や `else if` を並べる方法のほかに、`switch` 構文を用いることもできます。`switch` の後ろに評価したい変数を指定し、`case` 文でその変数が取りうる値ごとの処理を記述します。どの条件にも当てはまらない場合は、`default` が実行されます。

```c
#include <iostream>

int main() {
    int a = 2;

    switch(a) {
        case 1:
           std::cout << "a is 1." << std::endl;
              break;
        case 2:
           std::cout << "a is 2." << std::endl;
              break;
        default:
           std::cout << "a is not 1 or 2." << std::endl;
    }
    
    return 0;
}
```


なお、通常、各 `case` ブロックの末尾には break 文を記述します。これは、該当する `case` の処理が終わった後に、`switch` 文全体を抜けるためです。

もし `break` 文がない場合、該当する `case` 以降の処理がすべて実行される「フォールスルー」という挙動になります。そのため、`a` が `2` の場合は、`case 2` の処理だけでなく、`default` の処理も続けて実行されます。噂話は、止めどころを間違えると、関係ない人のところまで届きます。`break` を忘れないように。

