对于产生随机数的种子,一定要放在最外层函数,因为种子必须只有一个,也就是说如果你要产生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个左右时就会出现重复一样的数据,一开始我无法检测到,苦恼了好久,其实这个犯的错误就是前面提到的。