• 締切済み

C言語switch文のcase記述について

Oh-Orangeの回答

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★アドバイス ・いろいろと分け方がありますが処理A、処理Bなどの部分をマクロ関数や普通に関数として  分離する方法が私が良く取る方法です。 例えば: switch ( a ){ case 1: case 2:  : 処理A;  : case 100; case 101;  : 処理B;  : } ならば #define ShoriA()\ {\  :\ 処理Aの本体;\  :\ } #define ShoriB()\ {\  :\ 処理Bの本体;\  :\ } switch ( a ){ case  1: case  2: ShoriA(); break; case 100: case 101: ShoriB(); break;  : 同様にする  : } その他: ・処理A、処理Bを関数にするよりは define で関数と同じような感じで定義します。  これを専用のヘッダファイルにでも保存するか、switch 文のある関数よりも上の方に  まとめて定義すればいいと思います。マクロ関数にする理由は変数スコープを考えて  関数よりも良いと思っただけです。C++ で『参照』を使えば関数やinline関数でも良い。 ・またマクロ関数にするときに行末に必ず『\』文字を追加します。  このマクロ関数内で変数を宣言して利用することも出来ます。  あとマクロ関数の終わりのブロックで『break』を記述して switch 文の break を  なくしても見やすくなります。私の場合は次のキーワードを定義して利用しています。  #define CASE   break;case  #define DEFAULT break;default  この2行を良く利用するヘッダに記述して include して次のように使っています。  switch ( a ){   CASE  1: case  2: ShoriA();   CASE 100: case 101: ShoriB();    :   CASE 200: case 201: ShoriZ();   DEFAULT: ShoriElse();  } ・switch文の case、default の多くは break を記述する分岐ですから break 付きの  CASE、DEFAULT を記号定数で定義して利用するわけです。ただ今回のような使い方は  CASE、case を2つ記述する事になるため case で統一した方が良いでしょう。 ・break付きのCASE、DEFAULTを使うときは条件式が1つの場合に限ります。  つまり  switch ( a ){   CASE 条件式1: 処理;   CASE 条件式2: 処理;   CASE 条件式3: 処理;    :   CASE 条件式n: 処理;   DEFAULT: 残りの処理;  }  こんな感じの分岐です。 ・以上。

quoth
質問者

お礼

defineにする時は\が必要なのですね。勉強になりました。 今回はcase文が多くなるパターンですので、もう少し見てみようと思います。

関連するQ&A

  • switch文caseについて

    switchのcaseについてですが、数字を直接記述せずに、const変数に値を代入して使用出来ますか? 例) const int A = 1; const int B = 2; switch(suuti){ case A: 処理; break; case B: 処理; break; } コンパイルすると、「case 式は、整数型定数でなければなりません。」と出てきてしまうのですが、直接数値を記述しないといけないのでしょうか? よろしくお願いします。

  • C言語のswitch case文で、scanfでキーボードから読み込ん

    C言語のswitch case文で、scanfでキーボードから読み込んだ1~12の値によって画面に季節を、3~5は"春"、6~8は"夏"・・・というふうに表示させるプログラムなのですが、if文を使わずにswitch caseで作るには case 3: case 4: case 5:puts("春"); break; ・ ・ ・ と1個1個記述するしかないのでしょうか? もし比較演算子と論理演算子を使って 3<= && <=5 こんな感じに1行にまとめることができるなら教えてください。

  • C言語のswitch文について間違っているところを教えてください

    初めに初心者ですので間違っているところは説明つきの回答をしていただければありがたいです。 今回switch文を使って 「足し算、引き算、掛け算、割り算」のプログラムを作ったつもりなのですが、intを使うと割り算の小数点が出ないしfioat文を使うとswitch文には、使えないと出るしどのようにしたら良いのか御回答よろしくお願いします。 (今は、int文でプログラムを作っているつもりです。) #include <stdio.h> void main (void) { int a,b,k; printf("どのような計算をしたいか数字を選んでください。\n"); printf(" 1.足し算 (例 a+b)\n"); printf(" 2.引き算 (例 aーb)\n"); printf(" 3.掛け算 (例 a×b)\n"); printf(" 4.割り算 (例 a÷b)\n"); printf("計算したい番号を入力してください "); scanf("%d",&k); switch (k){ case 1: printf("aを入力してください "); scanf("%d",&a); printf("bを入力してください "); scanf("%d",&b); printf("\n答えは a+b で %d です\n",a+b); break; case 2: printf("aを入力してください "); scanf("%d",&a); printf("bを入力してください "); scanf("%d",&b); printf("\n答えは aーb で %d です\n",a-b); break; case 3: printf("aを入力してください "); scanf("%d",&a); printf("bを入力してください "); scanf("%d",&b); printf("\n答えは a×b で %d です\n",a*b); break; case 4: printf("aを入力してください "); scanf("%d",&a); printf("bを入力してください "); scanf("%d",&b); printf("\n答えは a÷b で %d です\n",a/b); break; default: printf("明記してあるどれかの数字を再入力してください"); } }

  • switch文の使い方について

    switch文で比較をさせたいのですが、その場合 switch()の括弧のなかはどうすれば良いのですか? int a,b; switch(){ case(a<b): break case(a>b): break } どなたか知っている方おしえてください。

  • phpのswitch文のcaseで

    phpのswitch文のcaseで switch ( $a ) case "1", "2", "a": のように、カンマで並べる事はできないのでしょうか?

    • ベストアンサー
    • PHP
  • switch文での変数の扱い方について

    以前の質問ではお世話になりました。今回もよろしくお願いいたします。 今日C言語の授業で小数点で平均点を入力して、平均点と5段階評価(A, B, C, D, E)を表示するプログラムの作成を作りました。 その際評価の判定にはswitch文を使い、評価の条件は以下の通りです。 90以上をA 85以上89以下をB--------2 80以上85以下をC--------3 70以上79以下をD それ以外(69以下)をE 最初に先生より上記の条件で「switch文で完成できる」と言われたのがずっと頭に引っかかっていて、なんとかswitch文で作ろうと思いずっと悩んでいましたが、switch文のdefaultをなくして2段階に分かれている部分とEの評価の部分をif文で処理するか、 switch文ですべての点数(case 80: case 81: ... case 84:)を直接switch文で打つかの2つしか思いつきませんでした。 そこで皆さんにお聞きしたいのが、こういう問題の際に評価の処理をswitch文を中心に行いたい場合、みなさんでしたらどのように処理なされていらっしゃいますか? 今後のプログラミングの勉強としてぜひとも知りたいです。 どうかお願いいたします。

  • C言語でヘッダファイルを自作する

    C言語で#defineを用いてヘッダファイルを作成したのですが、 作成したコンパイルするときにヘッダファイルがオープンできません。 参考にしている資料があるのですが、そこに書かれているサンプルプログラムを 丸ごとコピーして作ったプログラムも同様にヘッダファイルがオープンできない というエラーが出るので、ヘッダファイルを定義する方法そのものが間違っていると 思うのですが、どこが間違っているのでしょうか? よろしければ正しい記述方法もお教えください。 #include <stdio.h> #if !defined SAMPLE_H #define SAMPLE_H wa(int a, int b) { return a+b; } #endif #include "sample.h" int main(){ printf("%d\n",wa(40,70)); return 0; } ヘッダファイルの定義の方法は他にもあるとは思いますが、 今回は#defineを用いた方法でお願いします。

  • C言語 switch文について

    C言語初心者です。 以下のようにC言語でプログラムを書いてみたのですが、 一つの入力に対して、対応するcase文に加えてdefault部の内容も表示されてしまいます。 (aを入力すると day before yesterday と day after tomorrowが表示されるような感じです) i,j,k などを使ってどう実行されているかを調べると、どうやら一回の入力に対して二回switch部を回っているようです。 そうにしろなぜaに対してdefaultへ飛ぶのか理解できませんが・・ また、最初の宣言をchar から int にして(caseは、case 1とかに適当に変えて)やると、正常に動くのも不可解です。 どうなっているんでしょうか・・ どなたかご教授願えると幸いです。よろしくお願いいたします。 #include <stdio.h> int main(void) { char n; int i=0,j=0,k=0; k++; while(scanf("%c",&n),n!='E'){ i++; switch(n){ case 'a': puts("day before yesterday"); break; case 'b': puts("yesterday"); break; case 'c': puts("today"); break; case 'd': puts("tomorrow"); break; default: puts("day after tomorrow"); break; j++; } } printf("%d\n",i); printf("%d\n",j); printf("%d\n",k); return 0; }

  • switch文で文字を比較することは出来ませんか?

    switch文で文字を比較することは出来ませんか? 例えば… int main(void){ char buf[5]; buf = 'b'; switch(buf){ case 'a': ・  ・  ・  break; case 'b': ・  ・  ・  break; }

  • UPDATEのCASE文で・・

    SQLの独学をはじめて間もない素人です。 今case文を使って・・a_flg、b_flgを更新というコードを考えたのですが・・↓ UPDATE tm_results_payment SET a_flg = ( CASE WHEN b_flg=1 AND a_flg=1 THEN '0' END ) b_flg = ( CASE WHEN b_flg=1 AND a_flg=1 THEN '1' ELSE b_flg END ) CASE文は同じ条件です。値を2個とも変更したいので上の処理を考えました。 しかし、どうやら先に最初のCASE文でa_flgを0に変えてしまっているので、 次のCASE文では処理をしてくれません・・; 同時進行で値を更新する方法ってどうすればよいのでしょうか・・; よろしくお願いいたします。