C の switch…case (C の Switch ステートメント) と例

C の Switch ステートメントとは何ですか?

C の switch ステートメント 変数の値をテストし、複数のケースと比較します。ケースの一致が見つかると、その特定のケースに関連付けられたステートメントのブロックが実行されます。

スイッチのブロック内の各ケースには、識別子と呼ばれる異なる名前/番号が付いています。 ユーザーが指定した値は、一致するものが見つかるまでスイッチ ブロック内のすべてのケースと比較されます。

大文字と小文字の一致が見つからない場合は、デフォルトのステートメントが実行され、制御は switch ブロックの外に移ります。

大文字と小文字を切り替える構文

「C」プログラムで switch-case を実装する方法の一般的な構文は次のとおりです。

switch( expression )
{
	case value-1:
			Block-1;
			Break;
	case value-2:
			Block-2;
			Break;
	case value-n:
			Block-n;
			Break;
	default:
			Block-1;
			Break;
}
Statement-x;
  • 式には整数式または文字式を使用できます。
  • 値 1、2、n は、各ケースを個別に識別するために使用されるケース ラベルです。 プログラムの実行中に問題が発生する可能性があるため、ケースラベルは同じであってはいけないことに注意してください。 同じラベル「1」を持つケースが XNUMX つあるとします。 その後、プログラムの実行中に、プログラムで XNUMX 番目のケースを実行する必要がある場合でも、最初に表示されたケースが実行されます。 これによりプログラムに問題が発生し、望ましい出力が得られません。
  • 大文字と小文字のラベルは常にコロン (:) で終わります。 これらの各ケースはブロックに関連付けられています。
  • ブロックとは、特定のケースに応じてグループ化された複数のステートメントにすぎません。
  • スイッチが実行されるたびに、test-expression の値がスイッチ内で定義したすべてのケースと比較されます。 テスト式に値 4 が含まれているとします。この値は、プログラム内でラベル XNUMX が見つかるまでのすべてのケースと比較されます。 ケースが見つかるとすぐに、その特定のケースに関連付けられたステートメントのブロックが実行され、制御はスイッチから外れます。
  • それぞれの場合の Break キーワードは、特定のケースの終了を示します。 各ケースにブレークを入れないと、特定のケースが実行されても、C のスイッチは最後に到達するまですべてのケースを実行し続けます。 こんなことはあってはならない。 したがって、それぞれの場合に常にbreakキーワードを入れる必要があります。 Break は実行されるとケースを終了し、コントロールがスイッチから外れます。
  • デフォルト ケースはオプションです。テスト式の値がスイッチ内のどのケースとも一致しない場合は、常にデフォルトが実行されます。それ以外の場合は、スイッチに default を記述する必要はありません。
  • スイッチが実行されると、制御はステートメント x に移り、プログラムの実行が続行されます。

Switch ステートメントのフローチャート

次の図は、switch case でケースが選択される方法を示しています。

Switch ステートメントのフローチャート
スイッチの仕組み

C でのスイッチケースの例

次のプログラムはスイッチの使用方法を示しています。

#include <stdio.h>
    int main() {
        int num = 8;
        switch (num) {
            case 7:
                printf("Value is 7");
                break;
            case 8:
                printf("Value is 8");
                break;
            case 9:
                printf("Value is 9");
                break;
            default:
                printf("Out of range");
                break;
        }
        return 0;
    }

出力:

Value is 8

C でのスイッチケースの例

  1. 指定されたプログラムで、初期化されたものを説明しました。 変数 値が 8 の num。
  2. switch 構造は、変数 num に格納された値を比較し、一致したケースに関連付けられたステートメントのブロックを実行するために使用されます。
  3. このプログラムでは、変数 num に格納されている値が 8 であるため、スイッチは case-label が XNUMX のケースを実行します。ケースの実行後、制御はスイッチから外れ、プログラムは次のように成功結果で終了します。出力画面に値を表示します。

変数 num の値を変更してみて、出力の変化に注目してください。

たとえば、デフォルトになる次のプログラムを考えてみます。

#include <stdio.h>
int main() {
int language = 10;
  switch (language) {
  case 1:
    printf("C#\n");
    break;
  case 2:
    printf("C\n");
    break;
  case 3:
    printf("C++\n");
    break;
  default:
    printf("Other programming language\n");}}

出力:

Other programming language

C で switch case を操作する場合、複数のケースを一意のラベルでグループ化します。 switch ステートメントの最後で分岐するには、それぞれの場合に Break ステートメントを導入する必要があります。

オプションのデフォルトのケースは、他に一致しない場合に実行されます。

次の switch ステートメントを検討します。

#include <stdio.h>
int main() {
int number=5;
switch (number) {
  case 1:
  case 2:
  case 3:
    printf("One, Two, or Three.\n");
    break;
  case 4:
  case 5:
  case 6:
    printf("Four, Five, or Six.\n");
    break;
  default:
    printf("Greater than Six.\n");}}

出力:

Four, Five, or Six.

C のネストされたスイッチ

In C、外側のスイッチに内側のスイッチを埋め込むことができます。 また、内側と外側のスイッチのケース定数は、競合することなく共通の値を持つことができます。

次のようなプログラムを考えてみましょう。このプログラムでは、ユーザーに自分の ID を入力させ、ID が有効であればパスワードの入力を求め、パスワードが正しければユーザー名を出力し、そうでない場合はパスワードが正しくありませんと出力し、ID が存在しない場合は ID が正しくありませんと出力します。

#include <stdio.h>
int main() {
        int ID = 500;
        int password = 000;
        printf("Plese Enter Your ID:\n ");
        scanf("%d", & ID);
        switch (ID) {
            case 500:
                printf("Enter your password:\n ");
                scanf("%d", & password);
                switch (password) {
                    case 000:
                        printf("Welcome Dear Programmer\n");
                        break;
                    default:
                        printf("incorrect password");
                        break;
                }
                break;
            default:
                printf("incorrect ID");
                break;
        }
}

出力:

Plese Enter Your ID:
 500
Enter your password:
 000
Welcome Dear Programmer

C のネストされたスイッチ

  1. 指定されたプログラムでは、ID とパスワードの XNUMX つの変数の初期化について説明しました。
  2. 外部スイッチ構造は、変数 ID に入力された値を比較するために使用されます。 一致したケース (ID==500 の場合) に関連付けられたステートメントのブロックを実行します。
  3. 大文字と小文字が一致してブロック ステートメントが実行される場合、内部スイッチを使用して変数パスワードに入力された値が比較され、大文字と小文字が一致したステートメントが実行されます (パスワード==000 の場合)。
  4. それ以外の場合、switch ケースは default ケースをトリガーし、プログラム アウトラインに関する適切なテキストを出力します。

なぜSwitchケースが必要なのでしょうか?

潜在的な問題が XNUMX つあります if-elseステートメント つまり、代替パスの数が増えるたびにプログラムの複雑さが増します。プログラムで複数の if-else 構造を使用すると、プログラムが読みにくくなり、理解しにくくなる可能性があります。場合によっては、プログラムを作成した開発者自身も混乱する可能性があります。

この問題の解決策は switch ステートメントです。

switch ステートメントの規則

  • 式は常に結果に対して実行する必要があります。
  • ケースラベルは定数であり、一意である必要があります。
  • 大文字と小文字のラベルはコロン (:) で終わる必要があります。
  • いずれの場合も、break キーワードが存在する必要があります。
  • 存在できるデフォルトのラベルは XNUMX つだけです。
  • 複数の switch ステートメントを入れ子にすることができます。

まとめ

  • スイッチは、「」における意思決定の構成要素です。C。 '
  • スイッチは、複数の決定が関係するプログラムで使用されます。
  • スイッチには、実行可能なテスト式が含まれている必要があります。
  • 各ケースにブレーク キーワードを含める必要があります。
  • ケースラベルは定数であり、一意である必要があります。
  • デフォルトはオプションです。
  • 複数の switch ステートメントを相互にネストできます。