この記事では、C/C++のif文の基本構文とその処理の流れについて記載しています。
if文は特定条件で異なる処理文を実行したいときに使用されます。
if文の基本構文 : その1
まずはif文の1つ目の基本構文である「if (条件式) 処理文」を使用したサンプルコードと出力結果です。
条件式がtrueであればその後に記述されている処理文を実行します。falseの場合は処理文は実行されません。
内容は入力された整数が0以上であればその旨を文字を出力するものです。
#include <iostream> // std::cout std::cin 使用のため
int main(void) {
// 入力部
int ival = 0;
std::cout << "整数を入力してください: ";
std::cin >> ival;
// if文の基本構文 : その1
if (ival >= 0)
std::cout << "入力された整数「" << ival <<"」は0以上の数です。" << std::endl;
return 0;
}
整数を入力してください: 1
入力された整数「1」は0以上の数です。
「1」を入力した場合、条件式(1 >= 0)はtrueになるためその後に記述した処理文が実行されています。
また、「-1」を入力した場合は、条件式(-1 >= 0)はfalseとなるためその後に記述した処理文が実行されません。
整数を入力してください: -1
処理文で複数の処理文を記述したい場合はその処理文を{}で囲い、一つの文(複合文)とします。
#include <iostream>
int main(void) {
// 入力部
int ival = 0;
std::cout << "整数を入力してください: ";
std::cin >> ival;
// if文の基本構文 : その1
if (ival >= 0)
{
std::cout << "入力された整数「" << ival << "」は0以上の数です。" << std::endl;
ival = 0;
std::cout << "ival は初期化されました。ival = " << ival << std::endl;
}
return 0;
}
実行結果は下記になります。
整数を入力してください: 1
入力された整数「1」は0以上の数です。
ival は初期化されました。ival = 0
処理文が1つだけであれば{}は不要ではあるのですが、下記のように1つの処理文を{}で囲ったとしても特に問題はありません。
if (ival >= 0) {
std::cout << "入力された整数「" << ival <<"」は0以上の数です。" << std::endl;
}
個人的にこだわりはありませんが、{}で囲っている方がそのif文の処理文の範囲が分かりやすいと感じますし、後々新しく処理文を追加したいとなる可能性等もあるかと思われるので、上記のようなケースであれば私個人としては処理文が1つであっても{}で囲うことの方が多いかなという印象です。
if文の基本構文 : その2
次にif文の2つ目の基本構文である「if (条件式) 処理文1 else 処理文2」を使用したサンプルコードと出力結果です。
条件式がtrueであれば処理文1を、falseであれば処理文2を実行します。
#include <iostream>
int main(void) {
// 入力部
int ival = 0;
std::cout << "整数を入力してください: ";
std::cin >> ival;
// if文の基本構文 : その2
if (ival >= 0)
std::cout << "入力された整数「" << ival <<"」は0以上の数です。" << std::endl;
else
std::cout << "入力された整数「" << ival << "」は0より小さい数です。" << std::endl;
return 0;
}
上記を実行し、標準入出力画面から「1」を入力すると下記のようになります。
条件(1 >= 0)はtrueになるため処理文1が実行されています。
整数を入力してください: 1
入力された整数「1」は0以上の数です。
また、「-1」を入力した場合は条件(-1 >= 0)はfalseとなるため処理文2が実行されていることが分かります。
整数を入力してください: -1
入力された整数「-1」は0より小さい数です。
もちろんそれぞれの処理文を{}で囲って一つの文として記述しても問題ありません。
「if文の基本構文 : その1」では特定の条件のみ処理文を実行するような処理の流れですが、「if文の基本構文 : その2」は処理文1か処理文2のどちらか一方が必ず実行されます。これはif文の論理の穴を防ぐことが出来るため、使用ケースにもよりますが、私個人としては「if文の基本構文 : その1」よりも「if文の基本構文 : その2」を優先的に使うようにしています。
if文で3つ以上の分岐
if文自体も文ではあるので、if文の処理文として更にif文を記述することが可能です。
よく見る形ではあると思いますが、3つ以上の処理分岐は上記の基本構文の組み合わせで記述できます。下記のように最初に「if文の基本構文 : その2(if (ival > 0) 処理文1 else 処理文2)」があり、その処理文2に更に「if文の基本構文 : その2(if (ival < 0) 処理文1 else 処理文2)」を入れ子のように記述していくことで3つ以上の処理分岐を実現しています。
#include <iostream>
int main(void)
{
// 入力部
int ival = 0;
std::cout << "整数を入力してください: ";
std::cin >> ival;
// if文の基本構文の組み合わせで3つ以上の処理分岐
if (ival > 0) {
// ①
std::cout << "入力された整数「" << ival << "」は0より大きい数です。" << std::endl;
} else if (ival < 0) {
// ②
std::cout << "入力された整数「" << ival << "」は0より小さい数です。" << std::endl;
} else {
// ③
std::cout << "入力された整数は0です。" << std::endl;
}
return 0;
}
整数を入力してください: 1
入力された整数「1」は0より大きい数です。
上記のようにif文によって①~③の処理分岐していますが、これは必ずどれか1つの処理文が実行されます。
仮に下記のように①の条件式と重複してしまうような条件式②が記述されてあったとします。この時「5」を入力した時は下記のような出力になります。これは「if文の基本構文 : その2」で記載した通り最初のif構文は「if (ival > 0) 処理文1 else 処理文2」で(ival > 0)がtrueであれば処理文1のみが実行されるためです(処理文2は実行されません)。
#include <iostream>
int main(void)
{
// 入力部
int ival = 0;
std::cout << "整数を入力してください: ";
std::cin >> ival;
// if文の基本構文の組み合わせで3つ以上の処理分岐
if (ival > 0) {
// ①
std::cout << "入力された整数「" << ival << "」は0より大きい数です。" << std::endl;
} else if (ival > 1) {
// ②
std::cout << "入力された整数「" << ival << "」は1より大きい数です。" << std::endl;
} else {
// ③
std::cout << "入力された整数は0以下です。" << std::endl;
}
return 0;
}
整数を入力してください: 5
入力された整数「5」は0より大きい数です。
まとめ
C/C++のif文の基本構文とその処理の流れについてまとめてみました。
本記事の内容が訪問頂いた貴方のお役に立てれば幸いです。
内容の正確性には可能な限り配慮しておりますが、誤りや見落としが含まれる場合があります。
また、学習の進行や考え方の変化により記事の内容は随時加筆・修正される場合がありますので、あらかじめご了承いただけますと幸いです。