我希望c ++生成随机数是重复的

时间:2014-03-21 11:58:35

标签: c++ random numbers

我是用c ++编程的两周新手,但我正在挑战让这段代码按需运行。我的目标是生成非重复的随机数。这是代码的一部分,

unsigned long seed = time(NULL);
int gsmNun (int l, int h)
{
    srand(seed);
    int user_phone = rand()%h+l;

    return user_phone;
}

int main()
{

    int z = gsmNun(70000000, 99999999);
    for(int i=0; i<20; i++)
    {
        cout << "the random number is!" << z << endl;
    }

    return 0;
}

1 个答案:

答案 0 :(得分:2)

每次使用相同的种子调用函数时,您都会重新设置随机数生成器,因此您总是从rand()获取相同的随机数。

我修改了你的代码并添加了一些注释,请注意你在应用程序启动时为随机数生成器播种一次,然后调用rand()将产生实际的随机数。

每次需要新的随机数时都不应该重新启动生成器,因为调用过快会导致为这些迭代生成相同的数字。

unsigned long seed = time(NULL);
 int gsmNun (int l, int h)
 {
 // removed srand() from here.
 int user_phone = rand()%h+l;

 return user_phone;
 }

 int main()
 {

 srand(seed); // seed at application start
  for(int i=0; i<20; i++)
    {

 int z = gsmNun(70000000, 99999999);
    cout << "the random number is!" << z << endl;
    }

return 0;
}