即使使用srand(time(NULL))也不会获得随机值

时间:2019-01-30 00:16:32

标签: c++ random srand

即使在函数开始处包含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);

}

1 个答案:

答案 0 :(得分:0)

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