• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:何を行っているのか分かりません(C言語))

C言語のプログラムでキーが押されるまで乱数を発生し続ける

このQ&Aのポイント
  • C言語のプログラムで、キーが押されるまで乱数を発生し続ける処理を行っています。
  • while文を使用して、キーが押されるまで処理を繰り返します。
  • getch関数を使用して、入力された文字を読み込んで廃棄する処理を行っています。

質問者が選んだベストアンサー

  • ベストアンサー
noname#77845
noname#77845
回答No.2

#1です。 疑似乱数なので、ただrand();とやると毎回同じ乱数列を発生させるのは判りました? ここで、while文を使い適当な回数だけrand();をすると乱数列の途中まで発生させます。その後で、tp = rand() % 4;を使って乱数を取得しているので、毎回違った移動手段が選択できるのです。 例えば、 1,3,5,7,9,2,4,6,8,… という疑似乱数列が有ったとします。(仮にです。) while文で回さないとtp = rand() % 4;のrand()は毎回1を返します。 なので、while文を回して1,3,5,7,9までrand();を繰り返すと次のrand();は2を発生させるのです。 このタイミング(何回rand();の空回しをするか)は、プログラムの実行者がキーボードを押すタイミングによって変わりますから、毎回違った乱数を得ることが出来るのです。

Guchiken
質問者

お礼

質問への回答ありがとうございます!! 非常に丁寧な回答で理解でき、勉強になりました。 今後のプログラムの勉強にも身が入りそうです。 回答本当にありがとうございました!!

その他の回答 (1)

noname#77845
noname#77845
回答No.1

乱数は、初期化しないと毎回同じ乱数を発生させます。(疑似乱数なので。) なので、rand();で適当な回数乱数を発生させてその後から発生される乱数を使おうと言うことです。これなら、同じ乱数列でも始まる場所が一定じゃないので毎回違った乱数が取得できるはずです。(たまたま開始位置が同じだったときは同じ乱数列を発生してしまいます。) !kbhit()でキーボードのキーのどれかが押されたかを監視しているのですが、キーボードのキーを押したときの値はバッファに残ったままです。なので、次の入力時にバッファに残っているキーも取得してしまいます。それをgetch();で捨てているだけです。 本当は、srand()に現在時刻でも入れて初期化させた方がいいんですがね…。

Guchiken
質問者

お礼

さっそくの回答ありがとうございます!! 「その後から発生される乱数を使う」とはどういうことですか? 教えて頂けないでしょうか? バッファにキーの値が残っているからgetch();で捨てているんですね!分かりました!