我正在将一个python脚本移植到C ++,它调用一个函数超过一千次。我从来没有用C ++编程,所以我不确定发生了什么,也无法找到问题的更好标题。
这不是我的实际功能,但它会重现相同的错误
int maior_sequencia()
{
int random;
srand(time(NULL));
int maior_sequencia = rand() % 6+1;
printf("%i", maior_sequencia);
return 1;
}
int main()
{
for(int i = 1; i<=100; i++)
{
maior_sequencia();
}
return 1;
}
如果maior_sequencia()的第一个结果是3,那么它将输出3333333 ... 如果我再次运行程序,并且第一个结果是5,它将输出555555 ......
为什么会这样?
答案 0 :(得分:8)
int maior_sequencia()
{
int random;
srand(time(NULL));
//^^This will reset random seed every time you call this function
int maior_sequencia = rand() % 6+1;
printf("%i", maior_sequencia);
return 1;
}
因为每次调用maior_sequencia
函数时都会重置随机种子,因此它会给你相同的值。
尝试放
srand(time(NULL));
在for循环之前的main
内。
答案 1 :(得分:3)
这个问题有两个问题。首先你使用srand和你使用时间。当你使用time()为随机数生成器播种时,time是1973年某个日期的秒数,我忘记了确切的日期,但它被称为linux时间。由于你每次都播种,你正在重置随机数生成器,这是一个很好的做法,但是,因为你用几秒钟后返回一个数字来播种它,你的程序很可能花了不到一秒的时间来运行。要么像其他人建议的那样,只对种子进行种子生成一次,要么以更精细的粒度种子... ms可能是可以接受的。