C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++のswitch文とは?基本構文からbreak・defaultの使い方まで徹底解説

C++のswitch文の使い方

条件分岐は、あらゆるプログラミング言語に共通する基本的な機能です。条件分岐を使うことで、プログラムの流れを制御し、特定のコードブロックを実行するタイミングを指定できます。

C++で主に使われる条件分岐には、if文とif … else文があります。さらにC++ではswitch文も利用できます。switch文は式を複数の候補(ケース)と照らし合わせて評価し、一致したケースに対応するコードブロックを実行します。その動作は、多数のif … else文を連ねたif文に似ています。

この記事では、サンプルコードとともにC++におけるswitch文の使い方を解説します。あわせて、breakキーワードやdefaultキーワードとの組み合わせ方についても取り上げます。読み終える頃には、C++のswitch文を自在に扱えるようになっているはずです。

C++の条件分岐の基礎

ifやif … elseといった条件分岐は、プログラム内で判断を行うために使われます。たとえば、「ユーザーが16歳以上であれば特定のコードブロックを実行する」「水曜日であれば処理を行う」といった制御が可能です。

if文とif … else文は最も一般的な条件分岐です。これらは条件が真(true)の場合にコードブロックを実行し、そうでなければ何もしません。以下はC++のif文の例です。

int age = 15;

if (age > 16) {
	cout<<"This user is over the age of 16."
}

この例では、変数ageが16より大きいかどうかを判定しています。大きければ「This user is over the age of 16.」という文字列がコンソールに出力され、そうでなければ何も起こりません。ここではユーザーの年齢が15歳なので、age > 16は偽(false)となり、if文に紐づくコードは実行されません。

では、複数の条件を評価したい場合はどうすればよいのでしょうか?

そこで登場するのがswitch文です。if … else文を重ねて複数条件を判定することもできますが、この方法は非効率になりやすく、コードの可読性も低下します。そのため、開発者は1つの式を複数の候補と比較する際に、switch文をよく活用します。

C++のswitch文の書き方

switch文(switch … case文とも呼ばれます)は、ある式が複数のケースのいずれかと等しいかどうかを調べるための構文です。式がswitchブロック内のいずれかのケースと一致した場合、そのケースに関連付けられたコードが実行されます。

switch文には1つ以上のcase文が含まれます。case文は、対象の式を評価するための条件を宣言する役割を担います。

switch文は、丸括弧で囲んだ評価対象の式と、波括弧{}で囲んだ1つ以上のcaseを受け取ります。

C++のswitch文の基本構文は次のとおりです。

switch (expression) {
	case firstCase:
		// expressionがfirstCaseと一致した場合に実行されるコード
		break;
	case secondCase:
		// expressionがsecondCaseと一致した場合に実行されるコード
		break;
	default:
		// どのcaseにも一致しなかった場合に実行されるコード
}

上記のswitch文の処理の流れは以下のとおりです。

  1. プログラムが式(expression)を評価します。
  2. expressionがfirstCaseと比較されます。一致していれば、firstCaseブロック内のコードが実行され、続いてbreakキーワードが実行されてswitchブロックを抜けます。

ポイント: breakキーワードについては後述します。簡単に言うと、現在のswitchブロックから抜けて先へ進むようプログラムに指示するキーワードです。

  1. expressionがfirstCaseと一致しなければ、次にsecondCaseと比較されます。
  2. expressionがsecondCaseと一致すれば、secondCaseブロック内のコードが実行され、break文によってswitchブロックが終了します。
  3. expressionがどのcaseとも一致しない場合は、default句の内容が実行されます。

ポイント: defaultについては後ほど詳しく解説します。defaultは、switchブロック内のどのcase文も式と一致しなかった場合の処理を指定するキーワードです。

switch文では、まず最初のcaseが評価され、真でなければ条件が満たされるか、すべてのcaseの評価が終わるまで順番に評価が進みます。

C++ switch文のサンプルコード

ここからは、実際の例を通してswitch文の仕組みを詳しく見ていきましょう。

週末まであと何日あるかを教えてくれるプログラムを作るとします。このプログラムでは、曜日を整数で表します。たとえば月曜日は1、火曜日は2、水曜日は3という具合です。

プログラムは現在の曜日(整数)を受け取り、一連のcaseと比較します。各caseは、現在の曜日に応じて週末までの日数を出力するように指示します。

この処理を実現するコードは次のとおりです。

#include <iostream>

using namespace std;

int main() {
	int dayOfWeek = 3;

	switch (dayOfWeek) {
		case 1:
			cout<<"There are 5 days until the weekend!";
			break;
		case 2:
			cout<<"There are 4 days until the weekend!";
			break;
		case 3:
			cout<<"There are 3 days until the weekend!";
			break;
		case 4:
			cout<<"There are 2 days until the weekend!";
			break;
		case 5:
			cout<<"There is 1 day until the weekend!";
			break;
	}
}

このコードの出力結果は次のとおりです。

There are 3 days until the weekend.

コードを分解して見ていきましょう。まず、現在の曜日を整数として格納する変数dayOfWeekを宣言します。次に、5つのcaseを持つswitch文を使用します。

プログラムはまず、dayOfWeekが1と等しいかどうかを確認します。等しければ「There are 5 days until the weekend!」がコンソールに出力され、その後switch文から抜けます。

dayOfWeekが1でなければ、次のcaseが評価されます。この処理は、いずれかのcaseが真になった時点でbreak文が実行されswitch文が終了するか、すべてのcaseの評価が完了するまで続きます。

この例ではdayOfWeekが3、つまり水曜日を表しています。そのため「There are 3 days until the weekend!」が出力され、その後switchブロックが終了してメインプログラムの処理に戻ります。

C++のbreakキーワード

C++のswitch文では、前の例のように各caseにbreakキーワードを置くのが一般的です。break文が実行されると、そのブロック内のコードの実行が停止し、プログラムの残りの部分へ処理が移ります。

break文は、switch文の残りのcaseを評価させないために使われます。そのため、switch文と組み合わせて頻繁に利用されます。

先ほどの例から、switch文におけるbreakキーワードの部分を抜粋したものがこちらです。

…
		case 3:
			cout<<"There are 3 days until the weekend!";
			break;
…

この例では、dayOfWeekが3と等しい場合、break文が実行され、それ以降のcaseは評価されません。これは理にかなっています。dayOfWeekが3である以上、4や5と一致することはないからです。

dayOfWeekが3の場合、「There are 3 days until the weekend!」というメッセージがコンソールに出力されます。その後、break文によってswitchブロックを抜けるよう指示されるため、switch文の実行は終了します。

C++のdefaultキーワード

C++では、省略可能なdefaultキーワードを使うことで、どのcaseも真にならなかった場合の処理を指定できます。

先ほどの例では平日のみを考慮していたため、すでに週末であればプログラムは何もしません。default文を使えば、どのcaseにも一致しなかった場合の動作を指示できます。

土曜日または日曜日の場合に「It's the weekend!」というメッセージを表示したいとしましょう。先ほどのswitch文に次のコードを追加することで実現できます。

…
		case 5:
			cout<<"There is 1 day until the weekend!";
			break;
		default:
			cout<<"It's the weekend!";
			break;
…

このコードでは、dayOfWeekが指定したいずれのcaseとも一致しない場合、つまり6か7の場合にdefault文の内容が実行されます。たとえば今日が土曜日であれば、次のメッセージがコンソールに出力されます。

It's the weekend!

まとめ

switch文は、C++において1つの式を複数の候補と照らし合わせて評価するために使われます。いずれかのcaseが真になれば、そのcaseに関連付けられたコードが実行されます。どのcaseも真にならなかった場合は、指定されていればdefault文の内容が実行されます。

この記事では、サンプルコードを交えながらC++のswitch文の使い方と、break・defaultキーワードとの組み合わせ方を解説しました。これであなたも、プロのようにswitch文を使いこなせるはずです!

  1. C++における条件分岐の基礎:if-else文とswitch文の使い方を徹底解説

    条件分岐(意思決定)構造では、プログラマーがプログラムに評価・判定させる1つ以上の条件を指定し、その条件が「真(true)」と判定された場合に実行する文、さらに必要に応じて、条件が「偽(false)」と判定された場合に実行する別の文を記述する必要があります。 以下は、多くのプログラミング言語に共通する、典型的な条件分岐構造の一般的な流れを示した図です。 if-else文とは if文の後には、オプションとしてelse文を続けることができます。else文は、ifのブール式が「偽」と判定された場合に実行されます。C++におけるif...else文の基本構文は以下の通りです。 if(boolean

  2. PHPのswitchステートメントの使い方をわかりやすく解説

    はじめにプログラムの中で、式の値に応じて異なる処理を実行したい場合、if文を何度も重ねて書くと、それぞれに波括弧が付いてコードが冗長で読みにくくなってしまいます。そこで活躍するのがswitch-case構文です。switch構文を使えば、同じ変数(または式)を複数の異なる値と比較し、一致した値ごとに異なるコードを実行できます。その結果、プログラムはよりコンパクトで可読性の高いものになります。基本構文switch (expr) { case val1: expr が val1 と等しい場合に実行するコード; break; case val2: