switch ステートメントの Case ラベルにジャンプ
この記事では、C++ での switch
ステートメントの使用について説明します。 さらに、Jump to case label
エラーを含む、switch
ステートメントの使用中に発生する可能性のあるエラーについても説明します。
C++ の switch
ステートメント
switch
ステートメントは、指定されたブール式または整数式を評価し、指定された式の評価に基づいて cases
に関連付けられたステートメントを実行します。 これは、コードの長さを減らして明確にするため、長い if-else-if
ステートメントに代わる最良の方法です。
C/C++ では、次の構文を switch
ステートメントに使用して評価を実行します。
構文:
switch (exp) {
case a:
// Block of code
break;
case b:
// Block of code
break;
default:
// Block of code
}
switch
ステートメントは次のように機能します。
- 式は、
switch
ステートメントで 1 回評価されます。 case
値はswitch
値と比較されます。case
ステートメントでswitch
式を評価した後、条件が true の場合、一致したcase
に続くコード ブロックが実行されます。break
およびdefault
キーワードは、switch
ステートメントではオプションです。 これらについては、このチュートリアルの最後で詳しく説明します。
曜日番号から曜日名を計算したいとします。
コード例:
#include <iostream>
using namespace std;
int main() {
int weak_day = 3;
switch (weak_day) {
case 1:
cout << "Monday";
break;
case 2:
cout << "Tuesday";
break;
case 3:
cout << "Wednesday";
break;
case 4:
cout << "Thursday";
break;
case 5:
cout << "Friday";
break;
case 6:
cout << "Saturday";
break;
case 7:
cout << "Sunday";
break;
default:
cout << "Invalid input";
}
}
出力:
Wednesday
break
キーワード
break
キーワードは switch
ステートメントで使用され、特定の case
が満たされた後に switch
本体の残りのケースをスキップします。
上記の例では、switch
ステートメントが評価されて case 3
の基準を満たす場合、break;
により switch
本体の残りのコード ブロックをスキップします。 声明。
default
キーワード
default
キーワードは switch
ステートメントで使用され、指定された switch
ステートメントでどのケースも満たされない場合に、指定されたコード ブロックを実行します。
次の例を見てみましょう。これは、switch
ステートメントで default
キーワードを使用する方法を示しています。
コード例:
#include <iostream>
using namespace std;
int main() {
int a = 4;
switch (a) {
case 6:
cout << "Value of a is 6";
break;
case 7:
cout << "Value of a is 7";
break;
default:
cout << "The number is other than 6 or 7";
}
}
出力:
The number is other than 6 or 7
この例では、整数変数の値を 4 に指定していますが、実行中に指定された条件を満たすケースはありません。 したがって、default
ブロックが実行されます。
C++ の switch
ステートメントの Jump to case label
エラーを修正
switch
ステートメントの使用中に発生する可能性のある一般的なエラーは、Jump to case label
エラーです。 このエラーは、一部の case
ラベル内/下で宣言が行われたときに発生します。
この問題を理解するために、次の例を見てみましょう。
#include <iostream>
using namespace std;
int main() {
int a = 1;
switch (a) {
case 1:
int i = 66;
cout << i;
break;
case 2:
cout << i * 3;
break;
default:
cout << "Looking forward to the Weekend";
}
return 0;
}
上記の例では、case 1:
で i=66
を初期化してコードを実行します。 i
の値が他のケースから見えるため、コードはエラー Jump to case label
を生成します。
case
は単なるラベルであるため、次に記述されるコードの範囲を制限しません。 したがって、実行中に case 2
が実行されると、i
は初期化されていない変数になります。
そのため、C++ のような厳密に型指定された言語では、これが発生することは決してありません。 したがって、コンパイル時エラーが発生します。
case 1
内のスコープ区切り文字 {}
は、このスコープの問題を克服し、エラーなしでコードを実行するのに役立ちます。
#include <iostream>
using namespace std;
int main() {
int a = 1;
switch (a) {
case 1: {
int i = 66;
cout << i;
break;
}
case 2:
cout << "value does not exist";
break;
default:
cout << "Looking forward to the Weekend";
}
return 0;
}