c++产生随机数问题

对于产生随机数的种子,一定要放在最外层函数,因为种子必须只有一个,也就是说如果你要产生N个随机数,也只需要一个种子,即srand(time(0));先举个简单的例子

#define divisor   100

int mian()

{

  int number[100];

  srand(time(0));//一定要放在最外边,不能放在for循环里面,不然产生的随机数会重复等问题

  for(int i=0;i<sizeof(number)/sizeof(number[0]);++i)

    number[i]=rand%divisor;//使得产生的数在一个范围内,即0-99

  return 0;

}

上面是一个简单的例子,可能很多人都知道了,不会犯上面错误,但是问题是有些时候需要去层层调用各个函数,然后生成各个对象或者什么的,再初始化随机随机数,这就很容易犯这个错误了,也是我自己在做毕业设计时犯的错误。

开始时我的程序大致是这样的:

int main()

{

  readInit();

  *******

}

void readInit()

{

  initUers(path1);

  initUers(path2);

  initUers(path3);

  initUers(path4);

  initUers(path5);

  initUers(path6);

  initUers(path7);

}

void initUers(char *path)

{

  srand(time(0));//应该把这句放在main()函数中的

  **********

  *********

}

然后这样就出现了比较隐蔽的问题了,我随机数产生多了,当要1000个左右时就会出现重复一样的数据,一开始我无法检测到,苦恼了好久,其实这个犯的错误就是前面提到的。

posted @ 2013-09-05 09:43  梧桐树下的一缕阳光  阅读(208)  评论(0编辑  收藏  举报