- ベストアンサー
C言語初心者がジャンケンゲームを作成する際の判定に関するアドバイスを求めます
- C言語初心者がジャンケンゲームを作成していますが、判定ができません。
- プログラム内で自分の手とコンピューターの手がランダムに出るが、判定がうまくいかない。
- アドバイスをいただきたいです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
scanf("%s",&s[7]); が、だめです。 文字を入力させるつもりなら scanf("%s",s); で &s[7]だと確保した領域外になってしまいます。 >if(s == jyan){ >printf("あいこです。\n"); >}else if(s == 1 && jyan ==2){ から入力とjyanの返す値は数値を想定していますが、 数値ではありません。
その他の回答 (4)
- suseimei
- ベストアンサー率35% (17/48)
最初の方も回答していらっしゃいますが、このレベルの課題は自分の力で乗り切るべきです。はっきり申し上げます。基本ができていません。きちんと授業に出ていましたか? 次のURLから公開されている「なぜプログラミングを学ぶのか」に目を通してください。明確な目的がないと、後が続きませんよ。 http://www.ttoyota.com/php/cppnovicecontents.php あなたはあなたなりに努力しています。それは認めます。しかし、ソースコードを拝見する限り、毎回授業に出席していたとは思えません。基礎をしっかり学習してください。厳しいコメントですが、あなたの成長を心から期待しています。 頑張って!
- m_mik
- ベストアンサー率26% (31/117)
> if(s == jyan){ この部分の比較はいつでも成立しない状態となります。 sは入力されたデータを格納する(であろう)領域のアドレスを指しているのに対して、jyanはcharのポインタを返す関数のアドレスとなっています。 この2つのアドレスが一致することはありえません。 ここでは入力されたデータとランダムに選択されたデータとの比較を行う場所ですから、dice(3)の結果を保存しておく領域を用意して、その内容との比較を行うようにすれば、正しく処理を行えます。 ただし、dice(3)はint型であるのに対して、sはcharの配列ですので、両方の型を一致させることに注意してください。(キャストすればよいとかの話ではありません)
- mac_res
- ベストアンサー率36% (568/1571)
#include <stdio.h> #include <time.h> #include <stdlib.h> int main(void) { char buf[BUFSIZ]; int j, you, i; const char *jan[] = { "グー", "チョキ", "パー" }; const char *res[] = { "あなたの勝ちです。", "コンピュターの勝ちです。", "あいこです。" }; srand((unsigned) time(NULL)); printf("これはジャンケンゲームです。\n"); while (1) { i = 1 + (int) (3.0 * rand() / (RAND_MAX + 1.0)); printf("\n手を入力します(グー:1 チョキ:2 パー:3) > "); if (fgets(buf, BUFSIZ, stdin) == NULL) { break; } you = atoi(buf); if (you < 1 || you > 3) { printf("1~3を入力してください。\n"); continue; } if (you == i) { j = 2; } else { switch (you) { case 1: if (i == 2) j = 0; else j = 1; break; case 2: if (i == 3) j = 0; else j = 1; break; case 3: if (i == 1) j = 0; else j = 1; break; } } printf("あなたは%s。コンピュータは%s。%s\n", jan[you - 1], jan[i - 1], res[j]); } return 0; }
- driverII
- ベストアンサー率27% (248/913)
授業の課題なら、回答するのはあなたの為にならないのですが・・・ 関数jyan の戻り値はchar* 比較しているのは?