函数调用中的随机初始化问题
在 C 语言中,rand() 函数通常用于生成随机数。然而,当在单个函数中重复调用时,它可以产生可预测的序列而不是真正的随机性。当需要多个唯一的随机值时,此行为可能会很麻烦。
要纠正此问题,您应该避免在每次调用 rand() 之前初始化随机生成器 srand()。相反,它应该只执行一次,最好在程序开始时执行。
问题解释
顺序不可预测的原因是 srand() 播种具有特定值的随机生成器。同一函数内的后续调用将使用相同的种子,从而产生一致的随机数序列。通过仅初始化生成器一次,它可以确保整个程序使用唯一的种子。
修订的代码:
int GenerateRandomNumber() { static bool srand_initialized = false; if (!srand_initialized) { srand(time(0)); // Initialize random generator once srand_initialized = true; } return rand() % 3; }
在此更新的代码中,srand () 仅在第一次调用GenerateRandomNumber() 之前初始化一次。这确保每次调用都会产生真正的随机值。
以上是为什么 C 语言中重复使用'rand()”会产生可预测的序列?的详细内容。更多信息请关注PHP中文网其他相关文章!