C言語 Switch case文について 例えば、case1〜case10と多くの場合分けを行いたい場合、この数字の部分を変数にすることはできますか? スタートマシンを再現するために

C言語関連184閲覧xmlns="http://www.w3.org/2000/svg">50

1人が共感しています

ベストアンサー

0

その他の回答(5件)

2

既に回答がありますように、C言語のcaseには定数しか記述出来ません。 代案として、caseで処理すべき処理内容をひとつのサブ関数として用意し、 それらサブ関数の関数ポインタを配列として用意するのはいかがでしょうか。 (caseが10個あるならサブ関数も10個用意する。) swicth/caseを実行しようとする際に、caseに対応するよう関数ポインタ配列を適切に作成しておき、swicthに適用する変数を添え字として各サブ関数を呼び出します。 もっとも、頻繁に関数ポインタ配列を書き換えるようなコーディングは、可読性が悪いコードになってしまうと思われますのでお勧めしません。 ステートマシンを作るのであれば、状態変数の取り得る値の整理と実行すべき処理内容のサブ関数化を十分に検討した上で、if/elseの併用とサブ関数に引き渡す引数を吟味する方がコードがシンプルになるように思います。

2人がナイス!しています

0

case 1 case 2 case 3 case 4 などとなっていて、1の後に3とか4も行いたい、というような場合はswitch自体をwhileループに入れ、必要に応じて繰り返します。 caseにはそれぞれbreakがあるものとします。 while(終了条件){ switch (n){ case 1 n = 3; break; case 2 もう処理しないなら、終了条件を成立させる case 3 case 4 } }

0

まとめることはできないけど、breakしなければ次のcaseの処理に進んでしまうから、case文だけ書き並べる手はアリです。 この仕様、便利と言えば便利だけど、breakし忘れると、特定の場合だけ誤動作するという分かりにくいバグの発生源になるから、うれしくないな・・・

0
ID非公開

2022/6/20 16:36

出来ません。caseの後に書けるのは定数値のみです。