使用 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中文网其他相关文章!