• 締切済み

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

don_goの回答

  • don_go
  • ベストアンサー率31% (336/1059)
回答No.3

a の値が連番になるのであれば関数ポインタを使えますが? 関数ポインタ http://wisdom.sakura.ne.jp/programming/c/c54.html #include <stdio.h> void kitty(void); void sakura(void); void hina(void); int main() { void (*po[])() = { kitty , sakura , hina }; int i; printf("実行する関数の番号を指定してください 0~2>"); scanf("%d" , &i); if ((i < 0) | (i > 2)) return 0; (*po[i])(); return 0; } void kitty() { printf("Kitty on your lap\n"); } void sakura() { printf("Card Captor SAKURA"); } void hina() { printf("LOVE HINA"); }

quoth
質問者

お礼

関数ポインタというのもあるのですね。 なかなか奥が深いです。 ただ今回は、上記であれば入力値が多くの種類があるので、どちらかといえば、iを用意する必要があるので、量は多くなりそうです。 勉強になりました。 ありがとうございます。

関連する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文では処理をしてくれません・・; 同時進行で値を更新する方法ってどうすればよいのでしょうか・・; よろしくお願いいたします。