じゃんけんのためのじゃんけん

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
大熊
記事: 45
登録日時: 2年前

じゃんけんのためのじゃんけん

#1

投稿記事 by 大熊 » 2年前

じゃんけんのコードをかきました。0,1,2,3以外の数を入力すると「グー・チョキ・パーを出して下さい じゃんけんぽん!」か「グー・チョキ・パーを出して下さい あいこでしょ!」と表示したいです

flagで場合分けしましたが、実行するとアイコ後に0,1,2,3以外の値を入力した処理で掛け声がじゃんけんぽん あいこでしょとなります。対処方法をご教授ください。

コード:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(void)
{
int hand_com,hand_YOU,flag;
srand(time(NULL));
printf("*** じゃんけんします***\nじゃんけんぽん!");
flag=0;
for(;;)
{
rand();
hand_com = (rand()%3+1);

printf("(1:グー、2:チョキ、3:パー、0:終了 ):");
scanf("%d",&hand_YOU);
if(hand_YOU<0||hand_YOU>0){
switch (hand_YOU) {

case 1:
printf("YOU:グー\n");
break;
case 2:
printf("YOU:チョキ\n");
break;
case 3:
printf("YOU:パー\n");
break;
default:
printf("グー・チョキ・パーを出して下さい。\nじゃんけんぽん!");
if(flag==1){printf("あいこでしょ\n");}
else if(flag==0){printf("じゃんけんぽん!\n");}
flag=0;
continue;
}

switch (hand_com) {
case 1:
printf("COM:グー\n");
break;
case 2:
printf("COM:チョキ\n");
break;
case 3:
printf("COM:パー\n");
break;
}

if(hand_YOU==hand_com) {
printf("あいこでしょ!"); flag=1;
continue;
} else if((hand_YOU==1&&hand_com==2)||(hand_YOU==2&&hand_com==3)||(hand_YOU==3&&hand_com==1)) {
printf("あなたの勝ち!\n");
} else if((hand_YOU==2&&hand_com==1)||(hand_YOU==3&&hand_com==2)||(hand_YOU==1&&hand_com==3)) {
printf("あなたの負け!\n");
}
}
printf("***終了***");
return(0);
}
}

box
記事: 2002
登録日時: 13年前

Re: じゃんけんのためのじゃんけん

#2

投稿記事 by box » 2年前

「グー・チョキ・パーを出して下さい あいこでしょ!」と表示したいです
間違った入力をしたのに「あいこでしょ!」って表示するのは
おかしくないですか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

大熊
記事: 45
登録日時: 2年前

Re: じゃんけんのためのじゃんけん

#3

投稿記事 by 大熊 » 2年前

box さんが書きました:
2年前
「グー・チョキ・パーを出して下さい あいこでしょ!」と表示したいです
間違った入力をしたのに「あいこでしょ!」って表示するのは
おかしくないですか?
あいこになった後に間違った入力をしたらそのように表示します

box
記事: 2002
登録日時: 13年前

Re: じゃんけんのためのじゃんけん

#4

投稿記事 by box » 2年前

あいこになった後に間違った入力をしたらそのように表示します
まだよくわかりません。
間違った入力をしたということは、プレイヤーの選択はグーでもチョキでもパーでも終了でもない、
ということですよね?つまり、勝負をしている状況にないわけですよね?
なのに「あいこでしょ!」という表示を出すのはおかしくないですか?

それとも、1回でもあいこがあったならばその状況を覚えておく、ということですか?
もしそうだとすると、覚えておく必要性は何ですか?
過去の勝ち・負け・あいこがどうであろうと、それ以降の勝負には関係ないのではありませんか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

大熊
記事: 45
登録日時: 2年前

Re: じゃんけんのためのじゃんけん

#5

投稿記事 by 大熊 » 2年前

box さんが書きました:
2年前
あいこになった後に間違った入力をしたらそのように表示します
まだよくわかりません。
間違った入力をしたということは、プレイヤーの選択はグーでもチョキでもパーでも終了でもない、
ということですよね?つまり、勝負をしている状況にないわけですよね?
なのに「あいこでしょ!」という表示を出すのはおかしくないですか?

それとも、1回でもあいこがあったならばその状況を覚えておく、ということですか?
もしそうだとすると、覚えておく必要性は何ですか?
過去の勝ち・負け・あいこがどうであろうと、それ以降の勝負には関係ないのではありませんか?
1あいこになる
2あいこでしょの表示
3再度入力する際にグー、チョキ、パー以外をだす
4注意を表示
52へ仕切り直し

box
記事: 2002
登録日時: 13年前

Re: じゃんけんのためのじゃんけん

#6

投稿記事 by box » 2年前

1あいこになる
2あいこでしょの表示
3再度入力する際にグー、チョキ、パー以外をだす
4注意を表示
52へ仕切り直し
あとは、これらの処理にフラグをいつ立てていつリセットするか、
0, 1, 2, 3以外の値を入力したときに適切なメッセージを
どうやって出力するかを追加すれば、ロジックの完成ですね。
そうすれば、それをコードへ落とし込めば完成です。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

大熊
記事: 45
登録日時: 2年前

Re: じゃんけんのためのじゃんけん

#7

投稿記事 by 大熊 » 2年前

box さんが書きました:
2年前
1あいこになる
2あいこでしょの表示
3再度入力する際にグー、チョキ、パー以外をだす
4注意を表示
52へ仕切り直し
あとは、これらの処理にフラグをいつ立てていつリセットするか、
0, 1, 2, 3以外の値を入力したときに適切なメッセージを
どうやって出力するかを追加すれば、ロジックの完成ですね。
そうすれば、それをコードへ落とし込めば完成です。
あいこになり、二度0, 1, 2, 3以外の値を入力したときにあいこでしょの表示になりません。じゃんけんぽんと出てしまいます。改善方法をご教示ください。

box
記事: 2002
登録日時: 13年前

Re: じゃんけんのためのじゃんけん

#8

投稿記事 by box » 2年前

あいこになり、二度0, 1, 2, 3以外の値を入力したときにあいこでしょの表示になりません。じゃんけんぽんと出てしまいます。
あいこになり、一度0, 1, 2, 3以外の値を入力したときにはどうなってほしいですか?
あいこになり、三度以上0, 1, 2, 3以外の値を入力したときにはどうなってほしいですか?
「二度」と限定している理由は何ですか?
それから、「今の」ソースコードを見せずに改善してほしいっていわれましても、
いかんともしがたいです。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

box
記事: 2002
登録日時: 13年前

Re: じゃんけんのためのじゃんけん

#9

投稿記事 by box » 2年前

当方が思うには、1回のジャンケンでどっちが勝とうが負けようがあいこになろうが、
次の勝負のときに出そうとするメッセージは勝負開始の合図だけでいいような気がするんですが…。
あいこの場合を特別視しすぎているように感じます。
質問者さんの希望している仕様を満たそうとすると、
 1)直前の勝負があいこであったかどうかをON/OFFで管理する変数
 2)その変数がONであるとき、間違った入力の回数を管理する変数(この変数の値が2であるときに「あいこでしょ」を出力する必要がある)
がおそらく必要となり、ジャンケンの結果と本質的に関係ないところではっきり言ってムダな処理を
しようとしているように思います。
1)の変数をON/OFFするタイミングや2)の変数を0にリセットするタイミングの管理が
煩雑であるように思います。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

大熊
記事: 45
登録日時: 2年前

Re: じゃんけんのためのじゃんけん

#10

投稿記事 by 大熊 » 2年前

box さんが書きました:
2年前
当方が思うには、1回のジャンケンでどっちが勝とうが負けようがあいこになろうが、
次の勝負のときに出そうとするメッセージは勝負開始の合図だけでいいような気がするんですが…。
あいこの場合を特別視しすぎているように感じます。
質問者さんの希望している仕様を満たそうとすると、
 1)直前の勝負があいこであったかどうかをON/OFFで管理する変数
 2)その変数がONであるとき、間違った入力の回数を管理する変数(この変数の値が2であるときに「あいこでしょ」を出力する必要がある)
がおそらく必要となり、ジャンケンの結果と本質的に関係ないところではっきり言ってムダな処理を
しようとしているように思います。
1)の変数をON/OFFするタイミングや2)の変数を0にリセットするタイミングの管理が
煩雑であるように思います。
くやしい

返信

“C言語何でも質問掲示板” へ戻る