• ベストアンサー

Cプログラミング

作成したジャンケンをするゲームに対して、人間かコンピュータのどちらかが先に5勝するまで繰り返すように改造せよ。(それぞれの対戦者に対する変数を用意し、勝つごとにその変数に1を加えていく。どちらかが5になれば終了するような反復構造にすればよい。) #include <stdio.h> #include <stdlib.h> main(){ int jibunn,aite; printf("Select rock(0) scissors(1) paper(2)\n"); printf("jibunn="); scanf("%d",&jibunn); srand(time(NULL)); aite=rand()%3; printf("aite=%d\n",aite); while(jibunn==aite){ printf("Drow\n"); printf("Select rock(0) scissors(1) paper(2)\n"); printf("jibunn="); scanf("%d",&jibunn); srand(time(NULL)); aite=rand()%3; printf("aite=%d\n",aite); } if(jibunn==aite){ printf("Drow\n"); } else if((jibunn==2)&&(aite==0)){ printf("You win!\n"); } else if((jibunn==0)&&(aite==1)){ printf("You win!\n"); } else if((jibunn==1)&&(aite==2)){ printf("You win!\n"); } else { printf("You lose…\n"); } } ここまでは出来たのですが、これにどのように付け足せばよいのでしょうか? 回答よろしくお願いします。

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

  • ベストアンサー
  • nao-y
  • ベストアンサー率58% (111/190)
回答No.4

#1です。 >それぞれの対戦者に対する変数を用意するのがよく分 >からないんです。 >どのように変数を用意すればいいのでしょうか? 回数を数えるので、数値を代入できて、それぞれの対戦者が勝ったときに1ずつ足していく変数を用意することになります。 具体的には、 int jibunn_cnt=0, aite_cnt=0; という変数宣言をして、適切な場所に以下の文を入れてください。  jibunn_cnt++; aite_cnt++; >あと、51行目が実行されることがない理由はwhile文 >で書いてあるからでしょうか? はい、そうです。 49行目にきたときには、その前のwhile文を抜けた後= (jibunn==aite)という条件を満たさなくなったとき、ですので、49行目の(jibunn==aite)という条件を満たすことはありません。

その他の回答 (3)

回答No.3

   そのものずばりじゃあないけど、 #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int player, cpu, judge_v, i; int count[3] = {0}; char *symbol[3] = {" Rock ", "Scissors", " Paper ",}; char *judge_s[3] = {"Draw", "You Win", "You Lose",}; srand((unsigned)time(NULL)); while(count[1] < 5 && count[2] < 5){ printf("Rock(0), Scissors(1), Paper(2) : "); scanf("%d", &player); cpu = rand() % 3; printf("Player %s, Cpu %s", symbol[player], symbol[cpu]); judge_v = (cpu - player + 3 ) % 3; printf(" %s\n\n", judge_s[judge_v]); count[judge_v] ++; } printf("Player %d, Cpu %d, Draw %d", count[1], count[2], count[0]); return 0; }  

  • nao-y
  • ベストアンサー率58% (111/190)
回答No.2

#1です。 #1の回答文を一部修正します。 誤: >反復の条件はそれぞれの対戦者用の変数のどちらかが >5未満のとき、という条件になりますね。 正: >反復の条件はそれぞれの対戦者用の変数のどちらも >5未満のとき、という条件になりますね。 (もしくは、ループを抜ける条件は、それぞれの対戦者用の変数のどちらかが5未満のとき、という条件になります。)

  • nao-y
  • ベストアンサー率58% (111/190)
回答No.1

#これを書いているあいだにそのものずばりの #回答が出ている可能性がありますが、 #ご自分で考えられたほうが力になると思いますので。。。 カッコ内の >それぞれの対戦者に対する変数を用意し、勝つごとに >その変数に1を加えていく。どちらかが5になれば終了 >するような反復構造にすればよい。 の部分をどう書いたらいいかわからないということでしょうか? まず、 >それぞれの対戦者に対する変数を用意し、勝つごとに >その変数に1を加えていく。 を書いてみてください。 あとは、 11行目(空白行もカウントしてます)のprintf("Select rock(0) scissors(1) paper(2)\n");  から 最後から5~7行目の printf("You lose…\n"); } をループ構造の中に入れるだけですね。 反復の条件はそれぞれの対戦者用の変数のどちらかが 5未満のとき、という条件になりますね。 ちなみに51行目の printf("Drow\n"); が実行されることはありませんが、それはなぜかわかりますか?

doratao
質問者

補足

回答ありがとうございます。 それぞれの対戦者に対する変数を用意するのがよく分からないんです。 どのように変数を用意すればいいのでしょうか? あと、51行目が実行されることがない理由はwhile文で書いてあるからでしょうか?

関連するQ&A