我的随机数发生器有什么问题?
问题描述:
我只是潜入一些C++,我决定做一个随机数发生器(数字是多么随意,它真的没关系)。大多数代码被复制,然后网络,但我的新手眼睛看不出有什么问题,有没有什么办法可以调整每次给“6”以外的数字?我的随机数发生器有什么问题?
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
int random_number(int min, int max)
{
srand((unsigned)time(0));
int random_num;
int range=(max-min)+1;
random_num = min+int(range*rand()/(RAND_MAX + 1.0));
return random_num;
}
int main()
{
for(int i =0;i < 100;i++)
{
cout << random_number(3,10) << endl;
}
}
答
添加函数srand循环
srand((unsigned)time(0));
for(int i =0;i < 100;i++)
{
std::cout << random_number(3,10) << endl;
}
答
不要在random_number()内调用srand()。这将在每次呼叫时为随机数发生器重新播种。对于100个电话,您很可能在每次通话时获得相同的种子,因此也可能获得相同的号码。
答
之前的问题是,你用函数srand每次。 CPU速度很快,它会在一秒钟内执行所有这些代码,所以每次都会得到相同的种子。
将srand移出循环,只调用一次。
如果你只种一次会发生什么?即将srand移动到主函数中的循环之前? – dreamlax 2009-06-11 05:05:58