即使在函数开始处包含srand(time(NULL))
之后,(函数在main中仅被调用一次)每次运行程序时,我都会为r1
获得相同的随机值。 r2
和r3
可以很好地获得随机值,但是我需要在0.1
和10.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);
}
答案 0 :(得分:0)
我刚刚删除了换行,并使用该函数将其打印了两次,并生成了随机数。当我使用您的代码生成随机数时,无论我运行了几次,它显然都为r1,r2和r3显示了相同的3个随机数值。我认为Mooing Duck所说的是真的。可能是由于10 * rand()代码溢出。 唯一的缺点是,如果您要重新运行代码,它将生成与上次会话相同的随机数。