此代码应生成1到10之间的随机数,但每次返回1。
int random_integer;
int lowest=1, highest=10;
int range=(highest-lowest)+1;
random_integer = lowest + int(range*rand()/(RAND_MAX + 1.0));
cout << random_integer << endl;
代码中有什么问题?
答案 0 :(得分:4)
您可能会在这里溢出 - range*rand()
。
只需使用普通人使用的内容:rand() % 10 + 1
。
答案 1 :(得分:4)
range * rand() / (RAND_MAX + 1.0)
不符合你的想法。介绍一些parens:
range * (rand() / (RAND_MAX + 1.0))
(请注意,此方法仅提供skewed distributions。)
答案 2 :(得分:2)
如果你想要lowest
和highest
之间的随机整数,你最好写一下
random_integer = lowest + rand() % range
答案 3 :(得分:2)
我同意上面提供的所有解决方案 现在为了在每次运行程序时获得不同的序列,你可以使用 srand()函数,它将为 rand()函数提供种子,如下所示: -
srand(time(NULL))
random_integer = lowest + rand() % range
答案 4 :(得分:0)
您似乎假设rand()
返回0到1之间的值。
这是不正确的,它返回0到RAND_MAX
之间的值。
答案 5 :(得分:0)
这两个永远是我的程序的一部分
float randf(float lo, float hi) {
float random = ((float) rand()) / (float) RAND_MAX;
float diff = hi - lo;
float r = random * diff;
return lo + r;
}
int randi(int lo, int hi)
{
int n = hi - lo + 1;
int i = rand() % n;
if (i < 0) i = -i;
return lo + i;
}