首页 > 后端开发 > C++ > 为什么在 C 函数中重复使用'srand()”会导致非随机结果?

为什么在 C 函数中重复使用'srand()”会导致非随机结果?

Mary-Kate Olsen
发布: 2024-12-30 08:49:09
原创
266 人浏览过

Why Does Repeatedly Using `srand()` in a C   Function Lead to Non-Random Results?

使用 rand() 在函数内生成真正的随机值

在 C 中,使用 rand() 在单个函数内生成随机数函数可以产生重复值。当每次调用 rand() 之前重复调用 srand() 时,就会出现此问题。

问题:

考虑您提供的示例:

string PullOne()
{
    string pick;
    string choices[3] = {"BAR", "7", "cherries"};

    std::srand(time(0));
    pick = choices[(std::rand() % 3)];
    return pick;
}
登录后复制

当从 main() 中多次调用 PullOne() 时,您期望 pull_1 具有不同的随机值,拉_2 和拉_3。但是,您始终获得相同的结果。

解决方案:

要解决此问题,请将 srand() 的调用移到 PullOne() 函数之外并放置在程序开始时就执行一次。通过这样做,您可以初始化随机数生成器一次,确保为后续的 rand() 调用生成真正的随机序列。

// srand() is now called only once, at program initialization.
int main()
{
    std::srand(time(0));

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

    return 0;
}
登录后复制

解释:

srand () 设置随机数生成器的种子。当重复使用相同的种子时,生成器会产生相同的序列。通过初始化 srand() 一次,种子在整个程序中保持一致,从而导致 rand() 的可预测且非随机的输出。

因此,仅调用 srand() 一次至关重要,最好是在程序期间初始化或随机数生成过程开始时。这确保了您的函数内生成真正的随机数。

以上是为什么在 C 函数中重复使用'srand()”会导致非随机结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板