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;
}