関数内で同じ値を返すランダム関数
rand() 関数が関数内で呼び出されたときに同じ値を生成するという問題が発生しました。単一機能。この問題を解決するには、問題をさらに深く掘り下げて解決策を探ってみましょう。
問題を理解する
関数 PullOne() は std::srand(time (0)) 乱数発生器を初期化する関数。この初期化では、現在時刻に基づいてシード値が割り当てられます。ただし、関数内で srand() を呼び出すと、関数が呼び出されるたびに乱数ジェネレーターを効果的にリセットできます。これにより、同じ一連の乱数が生成されます。
解決策
PullOne() 内で真にランダムな値を生成するには、乱数ジェネレーターを 1 回だけ初期化する必要があります。 、関数呼び出しの前に。これにより、関数が呼び出されるたびに一意の乱数シーケンスが生成されるようになります。
これを実現するには、次のようにコードを変更します。
// Initializing the random number generator std::srand(time(0)); string PullOne() { string pick; string choices[3] = {"BAR", "7", "cherries"}; pick = choices[(std::rand() % 3)]; return pick; }
srand() を初期化することで、 PullOne() の外部では、これが 1 回だけ呼び出され、乱数ジェネレーターが適切にシードされていることを確認します。この変更により、PullOne() への各呼び出しで真にランダムな結果が生成され、pull_1、pull_2、および pull_3 が個別の値になることが保証されます。
以上がrand() 関数が単一の関数呼び出し内で同じ値を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。