C++ switch 文
C++ では、switch 文は異なる条件に基づいて異なるコードブロックを実行するために使用され、通常は一連の if-else 文を置き換えるために使われ、コードをより明確で読みやすくします。
ひとつのswitchswitch 文は、変数が複数の値のいずれかと等しい場合をテストできます。各値は case と呼ばれ、テストされる変数は各switch casecase に対してチェックが行われます。
構文
C++ におけるswitchswitch 文の構文:
switch(expression){
case constant-expression :
statement(s);
break; // 省略可能
case constant-expression :
statement(s);
break; // 省略可能
// case 文は任意の数だけ記述できます
default : // 省略可能
statement(s);
}
switchswitch 文は以下の規則に従う必要があります。
- switchswitch 文のexpression式は整数型または列挙型、あるいは整数型または列挙型に変換する単一の変換関数を持つクラス型でなければなりません。
- 1つの switch 内には任意の数の case 文を置くことができます。各 case の後には比較する値とコロンを置きます。
- case のconstant-expression値は switch 内の変数と同じデータ型でなければならず、定数またはリテラルでなければなりません。
- テストされる変数が case 内の定数と等しい場合、case の後に続く文は実行され、breakbreak 文に遭遇するまで。
- break 文に遭遇したとき、breakswitch は終了し、制御フローは switch 文の次の行にジャンプします。
- すべての case に break を含める必要はありません。break。case 文が break を含まない場合、break、制御フローは続けて後続の case に進み、break に遭遇するまで。
- ひとつのswitchswitch 文はオプションのdefaultcase を switch の最後に置くことができます。default case は、上記のすべての case が真でない場合にタスクを実行するために使用できます。default case 内のbreakbreak 文は必須ではありません。
フローチャート
例
例
#include <iostream>
int main() {
int day = 4;
switch (day) {
case 1:
std::cout << "Monday" << std::endl;
break;
case 2:
std::cout << "Tuesday" << std::endl;
break;
case 3:
std::cout << "Wednesday" << std::endl;
break;
case 4:
std::cout << "Thursday" << std::endl;
break;
case 5:
std::cout << "Friday" << std::endl;
break;
case 6:
std::cout << "Saturday" << std::endl;
break;
case 7:
std::cout << "Sunday" << std::endl;
break;
default:
std::cout << "Invalid day" << std::endl;
}
return 0;
}
int main() {
int day = 4;
switch (day) {
case 1:
std::cout << "Monday" << std::endl;
break;
case 2:
std::cout << "Tuesday" << std::endl;
break;
case 3:
std::cout << "Wednesday" << std::endl;
break;
case 4:
std::cout << "Thursday" << std::endl;
break;
case 5:
std::cout << "Friday" << std::endl;
break;
case 6:
std::cout << "Saturday" << std::endl;
break;
case 7:
std::cout << "Sunday" << std::endl;
break;
default:
std::cout << "Invalid day" << std::endl;
}
return 0;
}
上記のコードがコンパイルおよび実行されると、次の結果が生成されます:
Thursday
switch 文内の char 型:
例 2
#include <iostream>
using namespace std;
int main ()
{
// ローカル変数の宣言
char grade = 'D';
switch(grade)
{
case 'A' :
cout << "素晴らしい!" << endl;
break;
case 'B' :
case 'C' :
cout << "よくできました" << endl;
break;
case 'D' :
cout << "合格です" << endl;
break;
case 'F' :
cout << "もう一度試してみてください" << endl;
break;
default :
cout << "無効な成績" << endl;
}
cout << "あなたの成績は" << grade << endl;
return 0;
}
上記のコードがコンパイルおよび実行されると、次の結果が生成されます:
您通过了 您的成绩是 D
注意事項:
breakbreak 文:各casecase 文の末尾のbreakbreak 文は、switch 文から抜け出すために必要です。switchもし break が欠けている場合break、プログラムは次の case を実行し続け、caseこれは「フォールスルー」と呼ばれます。defaultdefault 文:defaultdefault 文はオプションですが、通常はすべてのcasecase が一致しない場合に使用され、リストされていないすべてのケースを処理します。- 式の型:
switch式は通常整数型または列挙型であり、浮動小数点数と文字列型は使用できません。
意図的にフォールスルーを使用することもあります。以下のコードでは、number が 2 または 3 の場合、同じコードブロックが実行されます。
例
#include <iostream>
int main() {
int number = 2;
switch (number) {
case 1:
std::cout << "Number is 1" << std::endl;
break;
case 2:
case 3:
std::cout << "Number is 2 or 3" << std::endl;
break;
default:
std::cout << "Number is not 1, 2, or 3" << std::endl;
}
return 0;
}
int main() {
int number = 2;
switch (number) {
case 1:
std::cout << "Number is 1" << std::endl;
break;
case 2:
case 3:
std::cout << "Number is 2 or 3" << std::endl;
break;
default:
std::cout << "Number is not 1, 2, or 3" << std::endl;
}
return 0;
}
上記のコードがコンパイルおよび実行されると、次の結果が生成されます:
Number is 2 or 3その他の拡張
C++ 判断