アプリ版:「スタンプのみでお礼する」機能のリリースについて

srand((unsigned) time(NULL));
for(~~~){
   ~~~rand()~~
}
と使って順番に1か0を出していくプログラムを書いてるんですが
いつも最初の部分が1になっていてデバッグして調べてみたら
同じではないのですが毎回似たような数字を出していました。

26392
26535
26682
26784
このようなかんじです。
(4回デバッガを使って1番最初に呼び出されたrand()の返した値を調べました)

rand()とはそういうものなのでしょうか?
それとも何か原因があるんでしょうか。
2回目以降は一見大丈夫そうなのでただ
rand();
と呼び出す無駄な行を書いてやりすごしたのですが、
もしこれが普通の現象であったら一般的な対策方法が知りたいです。

A 回答 (3件)

srand の引数にシステム時間を使った場合、同じような時間に


実行すると値の変化が少ないために 1回目の rand の値が似た
ような値になります。これは rand の仕様というか癖です。

これを防ぐために、最初に rand を何回か呼び出しておく、
というのは、わりと一般的な対策です。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
やっぱりそういう現象が一般に起こるんですね。

>>これを防ぐために、最初に rand を何回か呼び出しておく、
>>というのは、わりと一般的な対策です。

そうなんですね。勉強になりました。
1回でなく数回呼び出してから使うようにしたいと思います。
ありがとうございました。

お礼日時:2014/12/14 19:06

srand とか rand とかがどのように実装されているかがわからないのであまり一般論としてどうこう言えるものでもないけど, 「

最初のうちはどうしても srand で与えた初期値に強く依存する値が出るので何回か rand を呼び出しておいた方がいい」ってのはどこかで見た気がする.
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2014/12/14 19:02

毎回異なるSeedを与えないとダメ

    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2014/12/14 19:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!