- ベストアンサー
おかしいところ
ソースのおかしいところ教えてください #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; }
- みんなの回答 (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)
- JaritenCat
- ベストアンサー率37% (122/322)
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)
変数宣言・使用において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)
コンパイル環境がないんでしょうか? 単なるタイプミスであれば、コンパイル時点でエラーになります。まず、タイプミスをなくしてから、ロジックをチェックされた方がいいです。 ペーパーコンパイルには限界があります。 この程度のソースなら一瞬でコンパイルが終わりますから、実際にやってみてください。 質問はそれからでしょう。
- tatsu99
- ベストアンサー率52% (391/751)
「コンピュターの勝ち」 「コンピュータの勝ち」が正しいです。
- nagare
- ベストアンサー率33% (280/831)
コンパイルでおかしいところですか? 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"); } がエラーになっていると思いますけど
- JaritenCat
- ベストアンサー率37% (122/322)
・変数 piayer と player が混在している。 ・return 0; の前に for を閉じる } がない。
- randman
- ベストアンサー率51% (17/33)
とりあえず、 piayer → player で。