首页 > 解决方案 > 即使使用 srand(time(NULL)) 也没有得到随机值

问题描述

即使在srand(time(NULL))我的函数开头包含之后,(函数只在 main 中调用一次)我r1每次运行程序时都会得到相同的随机值。r2r3得到很好的随机值,但我需要随机的十进制值0.110.0所以包含的行有什么问题r1

void randNums(float &r1, float &r2, float &r3) {

   srand(time(NULL));

   r1 = (10 * (rand())/ (float)RAND_MAX);
   r2 = 1 + (rand() % 10);
   r3 = 1 + (rand() % 10);

}

标签: c++randomsrand

解决方案


我刚刚删除了 srand 行并使用该函数将其打印了几次,它生成了随机数。当我使用您的代码生成随机数时,无论我运行多少次,它显然都为 r1、r2 和 r3 显示了相同的 3 个随机数值。我认为 Mooing Duck 说的是真的。这可能是因为 10 * rand() 代码溢出。唯一的缺点是,如果您要重新运行代码,它将生成与上次会话相同的随机数。


推荐阅读