• ベストアンサー

Cプログラミング

授業で次のような課題が出されたのですが、うまく結果表示が出来なくて困っています。自分が1で相手が2なのに自分の負け。と出てしまったり・・・ そのようなプログラムを書けばよいのでしょうか? お答えよろしくお願いします。 乱数を使って計算機とジャンケンをするゲームを作成せよ。グーは“0”、チョキは“1”、パーは“2”として、人間の出す手はキーボードからの数値(0か1か2)入力を、計算機の出す手は乱数(0〜2の整数)を用いることとする。その勝敗を判定し、結果を表示させるようにすること。

質問者が選んだベストアンサー

  • ベストアンサー
  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.1

とりあえず、他力本願すぎる質問は好んで回答する人は少ないですよ-w- 課題の丸投げ質問は禁止になってますしね。 せめて自分はどこまでやったけどどこが分からないか書きましょう。 >>どのようなプログラムを書けばいいのでしょうか? ・自分の出す手の数字を入力させて。 ・コンピュータの出す手の数字を乱数で発生させて。 ・両方の数字を比較させて、どっちが勝ちか負けかの判定を出させて。 ・結果を表示させる。 プログラムを書けばいいんです。

doratao
質問者

補足

#include <stdio.h> main(){ int jibunn,aite; printf("jibunn=\n"); scanf("%d",&jibunn); srand(time(NULL)); aite=rand()%3; printf("%d\n",aite); if(jibunn==aite){ printf("あいこ\n"); } else if((jibunn=0)&&(aite=1)){ printf("あなたの勝ち!\n"); } else if((jibunn=0)&&(aite=2)){ printf("あなたの負け…\n"); } else if((jibunn=1)&&(aite=0)){ printf("あなたの負け…\n"); } else if((jibunn=1)&&(aite=2)){ printf("あなたの勝ち!\n"); } else if((jibunn=2)&&(aite=0)){ printf("あなたの勝ち!\n"); } else { printf("あなたの負け…\n"); } とやってみたんですけど…絶対間違ってるんですよ…… どこがおかしいのか、どんどん教えてください。

その他の回答 (6)

  • Qwerty-36
  • ベストアンサー率25% (58/226)
回答No.7

0と1と2で三すくみなので、"3+(相手の手)-(自分の手)"の3で割った余りを計算すると、判定が楽ですね。相手の手と自分の手、縦横3×3の表を作って、ちゃんとデバッグするんだよ。 あと、一文字だけのgetなら、getchar()-'0'じゃないかなぁ。 もちろん、そのgetした1文字による入力値xが0から2の範囲であることを確認するために、y=x*(x-2)の計算をして、yの値が正ではないことを確認してね。 ちなみに、Scanf()って、私は大嫌い(^o^)。

  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.6

4番さんが回答出してくれましたが、そんな感じです-w- ちなみに、動いた。と言うことは、ヘッダファイルは省略しただけですよね?(補足で書いたソースには。 >>どこがおかしいのか、どんどん教えてください。 言い方がとても他力本願すぎますけどね。 これが終わったらとりあえず、別の書き方でどれだけプログラムを短縮してキレイに書けるかやってみましょう。 プログラムは慣れです。

回答No.5

   引き算の結果で場合分けすればいい。  

  • akanekor
  • ベストアンサー率52% (102/194)
回答No.4

if文の所、代入になってますよお。(==; >>else if((jibunn=0)&&(aite=1)){ 正解は >>else if((jibunn==0)&&(aite==1)){ なので、対象箇所はすべて直してね。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

> そのようなプログラムを書けばよいのでしょうか? 「自分が1で相手が2なのに自分の負け。」でよいのであれば、「そのように」書けばよいですし、それでまずいのであれば、「そのように」書いては駄目です。 ところで、 > 自分が1で相手が2 のように、数字を全角で入力しているのに対して、 > グーは“0”、チョキは“1”、パーは“2”として のように、半角で入力されることを期待したプログラムを書いても、まともに動作しないと思います。

回答No.2

あ・・・殆ど同じプログラムを書いた事が有ります。 乱数の発生を理解できているようなので単純に勝ちか負けかを判定するだけですから本当に単純な分岐ですよ。 and演算子を使うかif文のネストを使うかは好みに任せると良いです。 ヒント if (人 = 0) { if (コンピュータ = 0) { printf ("あいこ"; } ・・・ } else { printf ("負け"); } }・・・ 後は・・・同じ値なら必ずあいこになる事を考慮して書けば良いです。