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 でケースが選択される方法を示しています。

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
- 指定されたプログラムで、初期化されたものを説明しました。 変数 値が 8 の num。
- switch 構造は、変数 num に格納された値を比較し、一致したケースに関連付けられたステートメントのブロックを実行するために使用されます。
- このプログラムでは、変数 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
- 指定されたプログラムでは、ID とパスワードの XNUMX つの変数の初期化について説明しました。
- 外部スイッチ構造は、変数 ID に入力された値を比較するために使用されます。 一致したケース (ID==500 の場合) に関連付けられたステートメントのブロックを実行します。
- 大文字と小文字が一致してブロック ステートメントが実行される場合、内部スイッチを使用して変数パスワードに入力された値が比較され、大文字と小文字が一致したステートメントが実行されます (パスワード==000 の場合)。
- それ以外の場合、switch ケースは default ケースをトリガーし、プログラム アウトラインに関する適切なテキストを出力します。
なぜSwitchケースが必要なのでしょうか?
潜在的な問題が XNUMX つあります if-elseステートメント つまり、代替パスの数が増えるたびにプログラムの複雑さが増します。プログラムで複数の if-else 構造を使用すると、プログラムが読みにくくなり、理解しにくくなる可能性があります。場合によっては、プログラムを作成した開発者自身も混乱する可能性があります。
この問題の解決策は switch ステートメントです。
switch ステートメントの規則
- 式は常に結果に対して実行する必要があります。
- ケースラベルは定数であり、一意である必要があります。
- 大文字と小文字のラベルはコロン (:) で終わる必要があります。
- いずれの場合も、break キーワードが存在する必要があります。
- 存在できるデフォルトのラベルは XNUMX つだけです。
- 複数の switch ステートメントを入れ子にすることができます。
まとめ
- スイッチは、「」における意思決定の構成要素です。C。 '
- スイッチは、複数の決定が関係するプログラムで使用されます。
- スイッチには、実行可能なテスト式が含まれている必要があります。
- 各ケースにブレーク キーワードを含める必要があります。
- ケースラベルは定数であり、一意である必要があります。
- デフォルトはオプションです。
- 複数の switch ステートメントを相互にネストできます。