使用C ++在1到10之间的随机数

时间:2012-09-25 10:14:11

标签: c++ random

此代码应生成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;

代码中有什么问题?

6 个答案:

答案 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)

如果你想要lowesthighest之间的随机整数,你最好写一下

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;
}