我的随机数发生器有什么问题?

我的随机数发生器有什么问题?

问题描述:

我只是潜入一些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; 
    } 
} 
+2

如果你只种一次会发生什么?即将srand移动到主函数中的循环之前? – dreamlax 2009-06-11 05:05:58

添加函数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移出循环,只调用一次。