ホームページ > バックエンド開発 > C++ > C rand() 関数が同じ値を返し続けるのはなぜですか? srand() を使用して修正するにはどうすればよいですか?

C rand() 関数が同じ値を返し続けるのはなぜですか? srand() を使用して修正するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-19 20:47:26
オリジナル
949 人が閲覧しました

Why Does My C   rand() Function Keep Returning the Same Value, and How Do I Fix It Using srand()?

srand() 関数内の関数の動作

C で rand() 関数を操作する際、同じ関数内で関数を複数回呼び出すと、一貫して同じ値が得られるという問題が発生する可能性があります。この問題を解決するには、srand() 関数の動作を理解することが不可欠です。

srand() とは何ですか?また、それが重要なのはなぜですか?

srand() 関数は乱数生成器を初期化します。 srand() で再初期化せずに rand() 関数を繰り返し呼び出すと、同じシードから後続の数値が生成され続け、予測可能な結果が得られます。

>ランダム性を修正するソリューション

真のランダム性を確保するには、 srand() 関数は、特定の関数内ではなく、プログラムの先頭で 1 回だけ呼び出す必要があります。そうすることで、シードが 1 回だけ設定され、rand() 関数が後続の呼び出しを通じて真にランダムなシーケンスを生成できるようになります。

ソリューションの適用

提供されたコード スニペットでは、問題は PullOne() 関数内にあります。 srand() 関数は、rand() の各呼び出しの前に呼び出され、予測可能なシーケンスと繰り返しの結果が得られます。これを修正するには、srand() の呼び出しを main 関数の先頭に移動します。

int main() {
    std::srand(time(0));

    string pull_1, pull_2, pull_3;
    pull_1 = PullOne();
    pull_2 = PullOne();
    pull_3 = PullOne();

    return 0;
}
ログイン後にコピー

この変更を適用すると、rand() 関数がpull_1pull_2、およびpull_3.

以上がC rand() 関数が同じ値を返し続けるのはなぜですか? srand() を使用して修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート