書籍「明解 C言語 中級編」をしている者です。
自由課題1-4でつまづいたので質問させて頂きました。
課題は「当てさせる数を-999以上999以下の整数とした数当てゲームを作成せよ。プレーヤーが入力できる最大の回数が、どのくらいであれば適当であるのかも考察すること。」です。
-999以上999以下の乱数の出し方がわかりません。
アドバイス(ヒント)を宜しくお願いします。
数当てゲームについて
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 数当てゲームについて
相対的に数値をずらせば良いだけですよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 数当てゲームについて
0から999までの乱数は出せる、と解釈した上で書かせていただきます。junjunjun さんが書きました:0以上の乱数なら出せます。
負の数の乱数を出すためには、乱数から一定以上の数を引くか、負の数でかけてやればいいわけです。
しかし、負の数でかけると今度正の数の乱数が出てこなくなります。
(乱数に負の数があれば別ですが、ならこんな問題は起きないわけで。)
なので、0から999までの乱数が出るとして、乱数が0の時に-999になるように数を引けばいいのです。(ほとんど答えになってますね...)
まあ、何事も平穏に。
Re: 数当てゲームについて
いちばん簡単である(と思われる)方法は、junjunjun さんが書きました: -999以上999以下の乱数の出し方がわかりません。
「0~1998の範囲の乱数を発生させて、999を引く」ことでありましょう。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: 数当てゲームについて
コード作成をしてみました。
自分で作った分では無事コンパイル出来たのですが、どうでしょうか?アドバイスお願いします。
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main(void)
{
int retry; //乱数を入れる変数
int aaa; //入力値を入れる変数
int count=0; //カウント変数
srand(time(NULL));
retry=(rand()%1999)-999;
while(1){
if(count>=20) break;
printf("整数を入力してください。");scanf("%d",&aaa);
if(aaa==retry) printf("正解です!!当たり!\n");
else if(aaa>retry) printf("もっと小さいです。\n");
else if(aaa<retry) printf("もっと大きいです。\n");
if(aaa==retry)break;
count++;
}
return 0;
}
Re: 数当てゲームについて
正解の変数名retry、入力を入れる変数名aaaというのはわかりにくいと思います。
正解できずに20回入力したとき、何もメッセージが出ずにゲームが終わってしまうのはユーザーに不親切だと思います。
正解できずに20回入力したとき、何もメッセージが出ずにゲームが終わってしまうのはユーザーに不親切だと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 数当てゲームについて
書き直してみました。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
int answer; //乱数を入れる変数
int input; //入力値を入れる変数
int tryCount=0; //カウント変数
srand(time(NULL));
answer=(rand()%1999)-999;
while(1) {
printf("整数を入力してください。");
scanf("%d",&input);
if(input==answer) {
printf("正解です!!当たり!\n");
break;
} else if(input>answer) {
printf("もっと小さいです。\n");
} else {
printf("もっと大きいです。\n");
}
tryCount++;
if(tryCount>=20) {
printf("残念!失敗です。正解は%dでした。\n",answer);
break;
}
}
return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 数当てゲームについて
今回は問題ありませんが、コードの可読性を考えるとこのような記述は控えて、(もちろん、可読性以外の問題もありますが。)
みけCATさんの書いた以下のようなコードに直しておきましょう。
まあ、何事も平穏に。