我使用此功能创建介于100000000和999999999之间的随机数
int irand(int start, int stop) {
double range = stop - start + 1;
return start + (int)(range * rand()/(RAND_MAX+1.0));
}
当我像这样使用它时,它正常工作
while(1) {
DWORD dw = irand(100000000, 999999999);
printf("dynamic key: %d\n", dw);
Sleep(100);
}
但是当我在没有while(1)的情况下使用此函数时,我总是得到相同的数字。 我需要修理什么?
答案 0 :(得分:3)
随机数生成器必须加上一些熵源,以便每次都能看到不同的序列,否则1
函数会使用初始种子值rand
。在您的情况下,在srand (time(NULL));
函数首次调用之前调用irand
应该可以解决问题。您可能会发现此问题很有用:why do i always get the same sequence of random numbers with rand() ?
答案 1 :(得分:1)
不能直接回答你的问题,但如果你正在努力解决随机数问题,你应该阅读一些内容。我们自己的Jon Skeet最近发表的这篇文章很好地介绍了随机数字以及可能遇到的遗传问题:http://csharpindepth.com/Articles/Chapter12/Random.aspx