• ベストアンサー

おかしいところ

ソースのおかしいところ教えてください #include <stdio.h> #include <time.h> #include <stdlib.h> //繰り返し処理(結果のトータル表示なし) main () { int piayer, computer; int limit = 5; //繰り返し回数 int i; printf ("【%d回勝敗ジャンケンゲーム】\n", limit); srand(time(NULL)); for(i = 0; i < limit; i++) { printf("ジャンケンゲーム・・・(グ―:1 チョキ:2 パ―:3を入力) > "); piayer = 0; scanf("%d", &piayer); while (getchar() != '\n') { } computer = rand()%3 + 1; printf("コンピュータは"); if(computer == 1) {printf("グー"); } else if(computer == 2) { printf("チョキ");} else if(computer == 3) { printf("パー");} printf("! "); if(computer == player){ printf("あいこ\n"); } else if(player ==1 && computer ==2){ printf("プレイヤーの勝ち\n"); } else if(player ==2 && computer ==3){ printf("プレイヤーの勝ち\n"); } else if(player ==3 && computer ==1){ printf("プレイヤーの勝ち\n"); } else if(player ==2 && computer ==1){ printf("コンピュターの勝ち\n"); } else if(player ==3 && computer ==2){ printf("コンピュターの勝ち\n"); } else if(player ==1 && computer ==3){ printf("コンピュターの勝ち\n"); } else { printf("プレイヤーが不正な手を出した\n"); } return 0; }

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

  • ベストアンサー
  • GOGOV
  • ベストアンサー率54% (12/22)
回答No.8

>if(computer%3==player%3>{ >printf("あいこ\n"); >}else if(computer%3>player%3){ >printf("コンピュータの勝ち\n"); >}else if(computer%3<player%3){ >printf("プレイヤーの勝ち\n"); >} > >ということかな。このあたりはifブロックをだらだら並べないですね通常。初心者かな? プレイヤーがパーを入力して負けることってありますかね?

その他の回答 (7)

回答No.7

ANo.6の勝敗判定は間違いですよね? %3で3を0に変換しているだけなので、本当に3が欲しいときは正しく動かないと思います。 ifをならべたくないなら、例えば、 char *mes[]={"コンピュータの勝ち","プレイヤーの勝ち","あいこ"}; と定義しておいて、 printf("%s\n",mes[(player-computer+2)%3]); とやればいいでしょう。 char *te[]={"グー","チョキ","パー"}; としておけば、コンピュータの手を表示するところも printf("コンピュータは%s! ",te[computer-1]); ですみますね。

  • takefree
  • ベストアンサー率16% (1/6)
回答No.6

 変数宣言・使用においてpiyerとplayer、C言語の基本である{}の整合性で閉じかっこが抜けている、などは他の方の指摘の通り。これを直せば正常動作はすると思います。  少しテクニカルな高度さで言えば、int変数playerとcomputerの大小関係、正確に言うと3で割った余りにより勝敗が決まる模様ですが、それならばifブロックは、 if(computer%3==player%3>{ printf("あいこ\n"); }else if(computer%3>player%3){ printf("コンピュータの勝ち\n"); }else if(computer%3<player%3){ printf("プレイヤーの勝ち\n"); } ということかな。このあたりはifブロックをだらだら並べないですね通常。初心者かな?

  • qKAZp
  • ベストアンサー率47% (71/148)
回答No.5

コンパイル環境がないんでしょうか? 単なるタイプミスであれば、コンパイル時点でエラーになります。まず、タイプミスをなくしてから、ロジックをチェックされた方がいいです。 ペーパーコンパイルには限界があります。 この程度のソースなら一瞬でコンパイルが終わりますから、実際にやってみてください。 質問はそれからでしょう。

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.4

「コンピュターの勝ち」 「コンピュータの勝ち」が正しいです。

  • nagare
  • ベストアンサー率33% (280/831)
回答No.3

コンパイルでおかしいところですか? piayerとplayerが混在してますよ if(computer == player){ printf("あいこ\n"); } else if(player ==1 && computer ==2){ printf("プレイヤーの勝ち\n"); } else if(player ==2 && computer ==3){ printf("プレイヤーの勝ち\n"); } else if(player ==3 && computer ==1){ printf("プレイヤーの勝ち\n"); } else if(player ==2 && computer ==1){ printf("コンピュターの勝ち\n"); } else if(player ==3 && computer ==2){ printf("コンピュターの勝ち\n"); } else if(player ==1 && computer ==3){ printf("コンピュターの勝ち\n"); } else { printf("プレイヤーが不正な手を出した\n"); } がエラーになっていると思いますけど

回答No.2

・変数 piayer と player が混在している。 ・return 0; の前に for を閉じる } がない。

  • randman
  • ベストアンサー率51% (17/33)
回答No.1

とりあえず、 piayer → player で。

関連するQ&A