- ベストアンサー
C言語
C言語でAとBがじゃんけんをして勝ち負けを出力するプログラムをつくりたいのですが、間違いを教えてください。(AがgでBがcならAの勝ち。AがgでBがpならBの勝ち。AがgでBがgなら引き分け。) #include<stdio.h> #include<conio.h> void main() { int A,B; printf("文字を入力せよ"); scanf("%d",&A); scanf("%d",&B); if(A=='g'||B=='c') { printf("Aの勝ち"); } if(A=='g'||B=='p') { printf("Bの勝ち"); } if(A=='g'||B=='g') { printf("引き分け"); } getch(); }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#include<stdio.h> #include<conio.h> void main() { char A,B; printf("文字を入力せよ"); scanf("%c",&A); printf("文字を入力せよ"); scanf("\n%c",&B); if((A=='g'&&B=='c')||(A=='c'&&B=='p')||(A=='p'&&B=='g')) { printf("Aの勝ち"); } else if((A=='g'&&B=='p')||(A=='c'&&B=='g')||(A=='p'&&B=='c')) { printf("Bの勝ち"); } else if((A=='g'&&B=='g')||(A=='c'&&B=='c')||(A=='p'&&B=='p')) { printf("引き分け"); } else { printf("入力エラー"); } getch(); } 実行後「文字を入力せよ」と出たら、1文字だけ入れてEnterを押すのを2回繰り返します。 (g[Enter]、c[Enter]のように入力する) printf("文字を入力せよ"); scanf("%c",&A); printf("文字を入力せよ"); scanf("\n%c",&B); と、 printf("文字を入力せよ"); scanf("%c",&A); scanf("%c",&B); で、どのような違いが出るか試してみましょう。
その他の回答 (3)
- azicyan
- ベストアンサー率21% (368/1747)
もう少しよく考えてみましょう。 >if(A=='g'||B=='c'){printf("Aの勝ち");} Aがグー又はBがチョキのときはAが勝ち。 じゃんけんは相手の手によっては、どの手でも勝てます。 これだとAはグー以外の時は勝てないことになりますよ。 Aがチョキ又はパーの時にも勝ちである条件を入れなければ。 >if(A=='g'||B=='g') Aがグー、又はBがグーのとき引き分け。 同じようにパーやチョキのときの条件がありません。 また||演算子は’または’という意味です。 Aがグーであれば、Bが何を出しても引き分けになってしまいます。 プログラムはあらゆる可能性を考えて、つぶしていかなければダメですよ。
- honiyon
- ベストアンサー率37% (331/872)
こんにちは、honiyonです。 Cのコンソールアプリはあまり知識がないので外しているかも知れないですが・・・ scanfで %d というのもおかしいと思います。 これでは文字が入力できず、数字にならないでしょうか? AとBの定義を char にして、 %dではなく%cにすると良いと思います。 ※%c・・・確かありましたよね(汗) ところで、間違いがある事に気づかれているということは、実行して何かおかしい点を見つけた、という事だと思いますが、 具体的に、どのようにおかしい状態となっていますか? コンパイルエラーはありましたか?
- elttac
- ベストアンサー率70% (592/839)
細かくは見ていませんので,外していたらご容赦を。 判定条件ですが,「A がグー『かつ』B がチョキ」で「A の勝ち」ですから,演算子「||」では「または」になってしまいます。「かつ」は「&&」です。