C++switch-case文の応用経験説明
C++プログラミング言語にはif,C++switch-case文などの判断文が存在する.この記事では、C++switch-case文の基本的な使い方について詳しく紹介しますので、ご協力をお願いします.
C++実現WPFアニメーションの具体的な操作方法詳細C++中国語文字関連応用方法詳細C++フィクション関数がもたらすメリットC++ビット操作の基本的な意味の詳細C++Endian具体的な操作方法説明if文は2つの分岐を処理する、複数の分岐を処理する際にif-else-if構造を使用する必要があるが、分岐が多いとネストif文層が多くなり、プログラムが膨大であるのみならず理解も困難である.深いネストされたelse-if文は文法的に正しいことが多いが、論理的にはプログラマーの意図を正しく反映していない.たとえば、誤ったelse-ifマッチングは無視されやすい.
新しい条件や論理関係を追加したり、文を他の修正をしたりしても、正確性を保証することは難しい.したがって、C/C++言語は、switch文、スイッチング文といった、マルチブランチ構造の処理に特化した条件選択文を提供する.深層ネストif/else論理を容易に実現できる.
C++switch-case文を用いる複数のブランチ(もちろん2つのブランチを含む)を直接処理する.一般的な形式は次のとおりです.
C++switch-case文の実行フローは、まずswitchの後ろのカッコ内の式の値を計算し、その後、この値を各caseの定数式と順次比較し、カッコ内の式の値があるcaseの後ろの定数式の値と等しい場合、このcaseの後ろの文を実行し、実行後にbreak文に遭遇するとswitch文を終了する.カッコ内の式の値がすべてのcaseの後の定数式と等しくない場合、defaultの後の文n+1を実行し、switch文を終了し、プログラムフローはスイッチ文の次の文に移行する.
以上はswitch-caseの正規の書き方で、default文はいつも最後に書かれています.しかし、default文間をcaseの真ん中に置くと、実行の結果はどうなるのでしょうか.筆者はいくつかの代表的な状況をテストし、結果を簡単に以下に列挙した.
A.各文中のbreakは整然としている
この場合が最も整っており、defaultを真ん中に書くと最後に書く効果と一致します.
B.default文の後にbreakがない
この場合、入力はそれぞれ1、2、3、4であり、対応する出力はそれぞれ1、2、3、default 2(改行は省略し、実際の運転時に改行がある)である.すなわち、この場合、Aにおける実行順序と一般的な符号規則に従う.
C.最後のケースにはbreakはありません
この場合、入力はそれぞれ1、2、3、4であり、対応する出力はそれぞれ1、2、3、defaultである.実際の実行効果はdefault文を最後の実行効果に移動するのと同じではないことがわかります.そうでなければ、入力が3の場合、出力は3 defaultであるべきである.
D.defaultも最後のcaseもbreakはありません
上記A,B,Cの3つのケースの運転結果から,Dの場合の運転結果を推測できる.入力がそれぞれ1、2、3、4の場合、出力は1、2、3、default 2となる.結果はBの場合と同じです.
以上,C++switch-case文に関する概念を紹介した.
C++実現WPFアニメーションの具体的な操作方法詳細C++中国語文字関連応用方法詳細C++フィクション関数がもたらすメリットC++ビット操作の基本的な意味の詳細C++Endian具体的な操作方法説明if文は2つの分岐を処理する、複数の分岐を処理する際にif-else-if構造を使用する必要があるが、分岐が多いとネストif文層が多くなり、プログラムが膨大であるのみならず理解も困難である.深いネストされたelse-if文は文法的に正しいことが多いが、論理的にはプログラマーの意図を正しく反映していない.たとえば、誤ったelse-ifマッチングは無視されやすい.
新しい条件や論理関係を追加したり、文を他の修正をしたりしても、正確性を保証することは難しい.したがって、C/C++言語は、switch文、スイッチング文といった、マルチブランチ構造の処理に特化した条件選択文を提供する.深層ネストif/else論理を容易に実現できる.
C++switch-case文を用いる複数のブランチ(もちろん2つのブランチを含む)を直接処理する.一般的な形式は次のとおりです.
- switch( )
- {
- case 1:
- 1;
- break;
- case 2:
- 2;
- break;
- ……
- case n:
- n;
- break;
- default:
- n+1;
- break;
- }
C++switch-case文の実行フローは、まずswitchの後ろのカッコ内の式の値を計算し、その後、この値を各caseの定数式と順次比較し、カッコ内の式の値があるcaseの後ろの定数式の値と等しい場合、このcaseの後ろの文を実行し、実行後にbreak文に遭遇するとswitch文を終了する.カッコ内の式の値がすべてのcaseの後の定数式と等しくない場合、defaultの後の文n+1を実行し、switch文を終了し、プログラムフローはスイッチ文の次の文に移行する.
以上はswitch-caseの正規の書き方で、default文はいつも最後に書かれています.しかし、default文間をcaseの真ん中に置くと、実行の結果はどうなるのでしょうか.筆者はいくつかの代表的な状況をテストし、結果を簡単に以下に列挙した.
A.各文中のbreakは整然としている
- switch(c)
- {
- case '1':
- printf("1
");
- break;
- default:
- printf("default
");
- break;
- case '2':
- printf("2
");
- break;
- case '3':
- printf("3
");
- break;
- }
この場合が最も整っており、defaultを真ん中に書くと最後に書く効果と一致します.
B.default文の後にbreakがない
- switch(c)
- {
- case '1':
- printf("1
");
- break;
- default:
- printf("default
");
- // break;
- case '2':
- printf("2
");
- break;
- case '3':
- printf("3
");
- break;
- }
この場合、入力はそれぞれ1、2、3、4であり、対応する出力はそれぞれ1、2、3、default 2(改行は省略し、実際の運転時に改行がある)である.すなわち、この場合、Aにおける実行順序と一般的な符号規則に従う.
C.最後のケースにはbreakはありません
- switch(c)
- {
- case '1':
- printf("1
");
- break;
- default:
- printf("default
");
- break;
- case '2':
- printf("2
");
- break;
- case '3':
- printf("3
");
- // break;
- }
この場合、入力はそれぞれ1、2、3、4であり、対応する出力はそれぞれ1、2、3、defaultである.実際の実行効果はdefault文を最後の実行効果に移動するのと同じではないことがわかります.そうでなければ、入力が3の場合、出力は3 defaultであるべきである.
D.defaultも最後のcaseもbreakはありません
- switch(c)
- {
- case '1':
- printf("1
");
- break;
- default:
- printf("default
");
- // break;
- case '2':
- printf("2
");
- break;
- case '3':
- printf("3
");
- // break;
- }
上記A,B,Cの3つのケースの運転結果から,Dの場合の運転結果を推測できる.入力がそれぞれ1、2、3、4の場合、出力は1、2、3、default 2となる.結果はBの場合と同じです.
以上,C++switch-case文に関する概念を紹介した.