次の手順に従い、コンピュータとじゃんけんで対戦できるプログラムを作成せよ。
じゃんけんの手(グー、チョキ、パー)は、プログラムの中では、 数値( (A) ) で表す。
表示に使う文字列は「ポインタ」の「配列」に格納する。
char *hand[3] = { "グー", "チョキ", "パー" };
これにより、(A) の数値を、手の名称に変換できる。
コンピュータの手は乱数で設定する。
(A) のいずれかを得たいので、
乱数を( (B) )で割った余りを使用する。
はじめに種の初期化を行うのを忘れないように。
scanf
を用いて、ユーザの入力を読み込む。
読み込む際には、グー、チョキ、パーに対応する数値を示して、ユーザに分かりやすくすること。
scanf
は入力を変換できなかった場合、
返り値として 0 を返すことを利用すると、数値として読み込もうとしたにも関わらず、
アルファベット等が入力された場合のエラー処理として次のようなものが利用できる。
if (0 == scanf("%d", &human)) { while ('\n' != getchar()) { ; } human = -1; }
scanf
の書式指定子として "%d"
を指定して
変数 human
に読み込もうとしている。
もし、数字以外が入力された場合、scanf の返り値が 0 となるので、
getchar
を用いて、改行文字が読み込まれるまで入力を処理する。
その結果、「次の行の先頭」が入力位置となることで、きちんと入力処理が できるはずである。
本来は、fgets (まだ programingE では取り上げていない) 等で「1行」を読み込み
sscanf
を行う等の手法を取った方が良い。
ユーザが入力した数値が (A) に含まれていなければ、再入力を促す。
プログラムとユーザの手が決まった段階で勝敗判定を行う。 手の組合わせは 3×3 = 9通りあるが、すべてを列挙することなく、 うまく判定する方法を考えよ。
ヒント: プログラムとユーザの手を「引いたもの」が 0 の時は「( (C) )」である。
勝敗結果を表示して、プログラムを終了する。
できあがったら、実際にじゃんけんをしてみて意図通りに動くか確認せよ。
その後、各自で次のような変更を加えてみよ。
勝敗結果を表示した後、続けて行うかどうかを尋ね、 繰り返しができるようにする。
直近の勝負結果も合わせて表示する。
過去に出したそれぞれの手の回数と勝ち負け数の統計情報を表示する。
課題10 | 日程表 | 課題12 |