- ベストアンサー
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("明記してあるどれかの数字を再入力してください"); } }
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
補足ですが、このプログラムはもう少し短くすることができます。 #include <stdio.h> void main (void) { float a,b; int 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); printf("aを入力してください "); scanf("%f",&a); printf("bを入力してください "); scanf("%f",&b); switch(k){ case 1: printf("\n答えは a+b で %d です\n",a+b); break; case 2: printf("\n答えは a-b で %d です\n",a-b); break; case 3: printf("\n答えは a*b で %d です\n",a*b); break; case 4: printf("\n答えは a/b で %d です\n",a/b); break; } }
その他の回答 (5)
- nofutureforyou
- ベストアンサー率9% (25/277)
#3 です。 >もしこの文を使うとしたらどのようにすれば良いか >教えていただけないでしょうか? 自分で調べろよと言いたいけど答えちゃうよ。 /* 4通りの場合わけをするのであった */ もし(場合1)なら、{ 処理1しちゃうよ; }そうでなくて、もし(場合2)なら{ 処理2しちゃうよ; }そうでなくて、もし(場合3)なら{ 処理3しちゃうよ; }それ以外は{ 処理4しちゃうよ; } という感じであるのであった。 つまり、 if (P1) { A1 } else if (P2) { A2 } else if (P3) { A3 } else { A4 } というか、言いたいのは、swich case のような変なものをわざわざ使わなくてもいいのではないの、ということ。
お礼
回答ありがとうございます。 なぜswich case を使ったかと言いますと、ifの場合elseを使わないといけないとまで考えて実際に作ってみたのですが、出来なかったので違うものを使ってみようと言うことでこれにしたしだいです。
- rentahero
- ベストアンサー率53% (182/342)
a,bとkはこのプログラムでは意味が違うので、別に宣言しましょう。 int a,b,k; ↓こうする int a,b; int k; これならkをintのままにしてa,bをほかの型にできますね。
お礼
回答ありがとうございます。 一つにしても分けても結局同じことになるのですね。 勉強になりました。 ありがとうございました。
- nofutureforyou
- ベストアンサー率9% (25/277)
switch ... case 文を使わないで、if ... else if ... else 文を使った方が良いのではないでしょうか。
お礼
回答ありがとうございます。 if ... else if ... else もしこの文を使うとしたらどのようにすれば良いか教えていただけないでしょうか?
- tamaruy
- ベストアンサー率0% (0/1)
割り算部分以外に影響を及ぼしたくないのであれば、aかbをdouble(又はfloat)へキャストし、書式もそれに合わせます。 printf("\n答えは a÷b で %f です\n", (double) a/b);
お礼
回答ありがとうございます。 そのような方法もあったのですか。 ぜひ試してみたいと思います。 ありがとうございました。
- ballville
- ベストアンサー率47% (233/487)
intはkだけにして、aとbはdoubleかfloatで宣言しましょう。 scanf,printfの%dを直すのを忘れないように。
お礼
ありがとうございました。 やってみると出来ました。もしlong doubleを入れたら 「scanf,printfの %?」 のところを教えてください。
お礼
補足ありがとうございます。 a,bの位置を変えるだけでかなり少なくてすむようになるのですね。私には、そのようなすばらしいひらめきは、起こりませんでした。とても勉強になりました。 ありがとうございました。