logo

C スイッチステートメント

C の switch ステートメントは、if-else-if ラダー ステートメントの代替であり、switch 変数と呼ばれる単一の変数のさまざまな値に対して複数の演算を実行できます。ここでは、単一変数の異なる値に対して複数のケースでさまざまなステートメントを定義できます。

switch ステートメントの構文 C言語 を以下に示します。

 switch(expression){ case value1: //code to be executed; break; //optional case value2: //code to be executed; break; //optional ...... default: code to be executed if all cases are not matched; } 

C言語のswitch文のルール

  1. スイッチ式 整数型または文字型である必要があります。
  2. ケースバリュー 整数または文字定数である必要があります。
  3. ケースバリュー switch ステートメント内でのみ使用できます。
  4. ブレークステートメント スイッチの場合は必須ではありません。オプションです。ケース内に Break ステートメントが見つからない場合は、一致したケースの後にすべてのケースが実行されます。として知られています 落ちる C switch ステートメントの状態。

例を挙げて理解してみましょう。以下の変数があると仮定します。

 int x,y,z; char a,b; float f; 
有効なスイッチ無効なスイッチ有効なケース無効なケース
スイッチ(x)スイッチ(f)ケース3;ケース2.5;
スイッチ(x>y)スイッチ(x+2.5)ケース「a」;ケースx;
スイッチ(a+b-2)ケース1+2;ケースx+2;
スイッチ(関数(x,y))ケース 'x' > 'y';ケース1、2、3。

C の switch ステートメントのフローチャート

Cのswitch文の流れ

switch case ステートメントの機能

まず、switch ステートメントで指定された整数式が評価されます。この値は、さまざまな場合に指定された定数値と 1 つずつ照合されます。一致するものが見つかった場合、そのケースで指定されたすべてのステートメントが、デフォルトのステートメントを含むそのケースの後に存在するすべてのケースとともに実行されます。 2 つのケースが同じような値を持つことはありません。一致したケースに Break ステートメントが含まれている場合、その後に存在するすべてのケースがスキップされ、制御がスイッチから外されます。それ以外の場合は、一致したケースに続くすべてのケースが実行されます。

C の switch ステートメントはどのように機能しますか?

C で switch ステートメントがどのように機能するかを段階的に見てみましょう。

次のことを考慮してください switch ステートメント :

C プログラム:

 #include int main() { int num = 2; switch (num) { case 1: printf('Value is 1
'); break; case 2: printf('Value is 2
'); break; case 3: printf('Value is 3
'); break; default: printf('Value is not 1, 2, or 3
'); break; } return 0; } 

出力

 Value is 2 

段階的なプロセス:

  1. スイッチ変数番号 評価されます。この場合、 1つで で初期化されます 値2
  2. 評価された数値 (2) の値 内の各ケースのラベルで指定された定数と比較されます。 スイッチブロック
  3. switch ステートメント と一致します 評価値(2) で指定された定数を使用して、 2番目のケース(ケース2) 。一致するものがあったため、プログラムはそのコードに関連付けられたコード ブロックにジャンプします。 一致するケース (ケース 2)
  4. に関連付けられたコード ブロック ケース2 が実行され、出力されます 「値は 2」 コンソールに。
  5. '壊す' キーワードはコードブロックに存在します ケース2 。その結果、プログラムはコード ブロックの実行直後に switch ステートメントから抜け出します。
  6. プログラム制御はその後も継続します。 switch ステートメント 、およびそれに続くステートメント switch ステートメント が実行されます。この場合、スイッチの後にステートメントがないため、プログラムは終了します。
  7. switch ステートメント の価値を評価しました 変数番号 、ケース 2 との一致が見つかり、対応するコード ブロックを実行して、終了しました。 スイッチブロック の存在により、 「中断」ステートメント

C の switch ステートメントの例

C 言語の switch ステートメントの簡単な例を見てみましょう。

 #include int main(){ int number=0; printf('enter a number:'); scanf('%d',&number); switch(number){ case 10: printf('number is equals to 10'); break; case 50: printf('number is equal to 50'); break; case 100: printf('number is equal to 100'); break; default: printf('number is not equal to 10, 50 or 100'); } return 0; } 

出力

Javaのスキャナー
 enter a number:4 number is not equal to 10, 50 or 100 enter a number:50 number is equal to 50 

スイッチケース例2

 #include int main() { int x = 10, y = 5; switch(x>y && x+y>0) { case 1: printf('hi'); break; case 0: printf('bye'); break; default: printf(' Hello bye '); } } 

出力

 hi 

Switch ステートメントの Break および Default キーワード

を説明して定義してみましょう '壊す' そして 「デフォルト」キーワード switch ステートメントのコンテキスト内で、コード例と出力例を示します。

1. キーワードを区切る:

「ブレイク」キーワード 各ケースのコード ブロック内で switch ステートメントを途中で終了するために使用されます。プログラムが問題に遭遇したとき、 「中断」ステートメント case ブロック内では、すぐに終了します。 switch ステートメント 、後続の case ブロックの実行を妨げます。の 「中断」ステートメント switch ステートメントを避けるために重要です。 「フォールスルー」 行動。

例:

の使用法を理解するためのプログラムを見てみましょう。 ブレークキーワード Cで。

 #include int main() { int num = 3; switch (num) { case 1: printf('Value is 1
'); break; // Exit the switch statement after executing this case block case 2: printf('Value is 2
'); break; // Exit the switch statement after executing this case block case 3: printf('Value is 3
'); break; // Exit the switch statement after executing this case block default: printf('Value is not 1, 2, or 3
'); break; // Exit the switch statement after executing the default case block } return 0; } 

出力

 Value is 3 

説明:

この例では、 switch ステートメント の値を評価します 変数番号 (つまり 3 ) と一致します ケース3 。に関連付けられたコード ブロック ケース3 実行され、印刷されます 「値は 3」 コンソールに。の 「中断」ステートメント 内で ケース3 この case ブロックを実行した直後にプログラムが switch ステートメントを終了し、他の case が実行されるのを防ぎます。

2. デフォルトのキーワード:

どれも当てはまらないとき ケース定数 一致する 評価された式 として動作します。 キャッチオールケース 。一致するケースが存在せず、 「デフォルト」ケースが存在します 、に関連付けられたコード ブロック 'デフォルト' ケースが実行されます。これは、指定された入力に記述された状況がどれも当てはまらない状況を処理するためによく使用されます。

例:

の使用法を理解するためのプログラムを見てみましょう。 デフォルトのキーワード Cで。

 #include int main() { int num = 5; switch (num) { case 1: printf('Value is 1
'); break; case 2: printf('Value is 2
'); break; case 3: printf('Value is 3
'); break; default: printf('Value is not 1, 2, or 3
'); break; // Exit the switch statement after executing the default case block } return 0; } 

出力

 Value is not 1, 2, or 3 

説明:

この例では、 switch ステートメント の値を調べます 変数番号 (つまり 5 )。数値に一致する大文字と小文字が一致しないため、プログラムは、その数値に関連付けられたコード ブロックを実行します。 「デフォルト」の場合 。の 「中断」ステートメント の中で 「デフォルト」の場合 プログラムが確実に終了するようにします。 switch ステートメント を実行した後、 'デフォルト' ケースブロック。

どちらも '壊す' そして 「デフォルト」キーワード switch ステートメント内の実行フローを制御する上で重要な役割を果たします。の 「中断」ステートメント フォールスルー動作の防止に役立ちます。 「デフォルト」の場合 一致しないケースを処理する方法を提供します。

C Switch ステートメントはフォールスルーです

C 言語では、switch ステートメントはフォールスルーです。これは、switch ケースで Break ステートメントを使用しない場合、一致するケース以降のすべてのケースが実行されることを意味します。

以下に示す例で switch ステートメントのフォールスルー状態を理解してみましょう。

 #include int main(){ int number=0; printf('enter a number:'); scanf('%d',&number); switch(number){ case 10: printf('number is equal to 10
'); case 50: printf('number is equal to 50
'); case 100: printf('number is equal to 100
'); default: printf('number is not equal to 10, 50 or 100'); } return 0; } 

出力

 enter a number:10 number is equal to 10 number is equal to 50 number is equal to 100 number is not equal to 10, 50 or 100 

出力

 enter a number:50 number is equal to 50 number is equal to 100 number is not equal to 10, 50 or 100 

ネストされた switch case ステートメント

switch ステートメント内では、switch ステートメントを必要なだけ使用できます。このようなタイプのステートメントは、ネストされた switch case ステートメントと呼ばれます。次の例を考えてみましょう。

 #include int main () { int i = 10; int j = 20; switch(i) { case 10: printf('the value of i evaluated in outer switch: %d
',i); case 20: switch(j) { case 20: printf('The value of j evaluated in nested switch: %d
',j); } } printf('Exact value of i is : %d
', i ); printf('Exact value of j is : %d
', j ); return 0; } 

出力

 the value of i evaluated in outer switch: 10 The value of j evaluated in nested switch: 20 Exact value of i is : 10 Exact value of j is : 20 

switch ステートメントの利点:

いくつかの利点があります switch ステートメント switch ステートメントの主な利点は次のとおりです。

    読みやすさと明瞭さ:の switch ステートメント 簡潔でわかりやすい表現方法を提供します 多方向分岐 コードの中で。複数のケースを処理すると、コードが複数の場合よりも整理され、読みやすくなります。 ネストされた if-else ステートメント 。効率:の switch ステートメント 一般に、一連の方法よりも効率的です。 if-else ステートメント 複数の条件を扱うとき。それはdとして機能します ダイレクトジャンプテーブル これにより、実行時間の点で高速化され、より最適化されます。ケースベースのロジック:の switch ステートメント プログラムが単一変数の特定の値に基づいて決定を下す必要があるシナリオに自然に適合します。これは、ケースベースのロジックを実装する直感的で簡単な方法です。

switch ステートメント として機能するデフォルトのケースの使用をサポートします。 キャッチオールオプション 提供されたケースのいずれにも一致しない値の場合。これ デフォルトのケース 明示的に述べられていない異常な入力または状況に対処します。

switch ステートメントの欠点:

いくつかの欠点がありますが、 switch ステートメント switch ステートメントの主な欠点は次のとおりです。

    限られた表現:で使用される表現は、 switch ステートメント 結果が生じる必要があります 整数値 (char、int、enum) または互換性のあるデータ型。それ以上は処理できません 複雑な式または非定数式 、その制限 柔軟性 いくつかのシナリオでは。範囲を比較できない:とは異なり if-else ステートメント switch ステートメント 値の範囲を直接処理することはできません。 switch ステートメントの各ケースは特定の定数値を表すため、値の範囲を効率的に処理することが困難になります。浮動小数点数はサポートされていません:の switch ステートメント 受け入れるだけ 整数型 (整数) と値から 列挙型 ;浮動小数点数は受け入れられません。扱いません 非整数データ型 のように 浮動小数点整数 、状況によっては問題が発生する可能性があります。フォールスルー動作: Switch ステートメント 持っている 「フォールスルー」 デフォルトの動作は、ケースに 「中断」ステートメント 、実行されます 「落ちる」 次の case ブロックに移動します。適切に管理しないと、望ましくない動作が発生する可能性があります。重複したコード:を使って switch ステートメント 状況によっては、特に同じアクションが必要なケースが多数ある場合には、コードが重複する可能性があります。適切に管理しないと、コードの重複が発生する可能性があります。ネストされたスイッチは複雑になる場合があります。対処するとき 入れ子になった switch ステートメント 、コードが複雑になり、読みにくくなる可能性があります。このような入れ子構造を理解して維持するには、追加の努力が必要になる場合があります。