switch ステートメントの Case ラベルにジャンプ

Abdul Basit 2023年10月12日
  1. C++ の switch ステートメント
  2. C++ の switch ステートメントの Jump to case label エラーを修正
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;
}

関連記事 - C++ Error