• 締切済み

Switch文を使ったプログラミング

switch文を使って1のときは円周、2のときは円の面積、3のときは球の面積を求めるという問題をしています。xが1の時は出力結果は合っているのですが、xが2と3のときはdefaultの結果の"もう一度やり直し"になってしまいます。 どこが間違っているのかわかりません。 rは半径、Lは円周、Sは円の面積、Vは球の体積です。paiはπです。 #include<stdio.h> #include<stdio.h> int main(void){ double L, x, r, S, V, pai=3.14159; printf("半径rを入力:"); scanf("%lf",&r); printf("処理番号(1:円周は 2:円の面積は 3:球の体積は)"); scanf("%lf",&x); switch(x){ case 1: L = 2*pai*r; printf("円周は%0.2lf",L); break; case 2: S = pai*r*r; printf("円の面積は%0.2lf",S); break; case 3: V = 4*pai*r*r*r/3; printf("球の体積は%0.2lf",V); break; default: printf("もう一度やり直し\n"); } return 0; }

みんなの回答

  • Carbadoc
  • ベストアンサー率19% (144/750)
回答No.4

/* (1) switch()の中はint型でなければいけないので、xをint型にしよう。 (2) xがint型になったので、処理番号のscanf()も、整数を入れるようにしよう。 (3) (おまけ1)円周率はM_PIで定義されているので、できればそっちをつかおう。 (3.14159でも構わないけれど、より正しく動かすための工夫。「他の人が書いたコードと計算結果か違う」といった事態も防げる) */ #include<stdio.h> #include<math.h> // (3) M_PIはmath.hで定義されているので、math.hを組み込む int main(void){ double L,r, S, V, pai=M_PI; // (3) できれば、3.14159の代わりに、定数 M_PI を使おう。 int x; // (1) swith()の中はint型でなければいけないので、xをint型にする。 printf("半径rを入力:"); scanf("%lf",&r); printf("処理番号(1:円周は 2:円の面積は 3:球の体積は)"); scanf("%d",&x); // (2) xがint型になったので、整数を入れるようにする switch(x){ case 1: L = 2*pai*r; printf("円周は%0.2lf",L); break; case 2: S = pai*r*r; printf("円の面積は%0.2lf",S); break; case 3: V = 4*pai*r*r*r/3; printf("球の体積は%0.2lf",V); break; default: printf("もう一度やり直し\n"); break; // (おまけ2) breakを入れておけば、うっかりこの下にcaseを書いても、正しく動く } return 0; }

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.3

double x; じゃなくて int x; にして、 scanf("%lf", &x); じゃなくて scanf("%d", &x); にしてみたら?

回答No.2

> double L, x, > switch(x){ switchには整数渡してください。 整数にキャストしてくれそうな気もするけど、コンパイラによってはエラーになる。

aiueooo88
質問者

お礼

すみません、始めたばかりでバカでわからないのでもうちょっと詳しく教えていただけませんか?どうやって書き換えたらいいんでしょうか、

  • GENESIS
  • ベストアンサー率42% (1198/2799)
回答No.1

case各文のprints行の後にbreak 文を入れたらどうなるのでしょう?。 switch文 https://www.javadrive.jp/cstart/if/index6.html

aiueooo88
質問者

お礼

printfのあとにbreak入れてると思います、 たぶん、 

関連するQ&A