我是用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;
}
答案 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;
}