【发布时间】:2015-03-25 03:53:37
【问题描述】:
您好,我的随机数生成器在每次运行时都会给我相同的数字序列(尽管序列不同),但我遇到了问题。这是一个简化的代码来演示我的问题。
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int random(){
srand(time(0));
return(1+rand() % 6);
}
int main(){
cout<< random() <<endl;
cout<< random() <<endl;
} // will return a repeated double digit i.e. 11, 22, 33, 44
【问题讨论】:
-
相同的种子 -> 相同的数字序列。您的程序播种它,然后获取一个数字,然后再次播种(使用相同的种子),然后获取相同的数字。
-
将这个:
srand(time(0));移动到main()的顶部。除非你是故意播种的,否则它是每个进程一次的事情(从表面上看,你不是)。 -
当我再次播种时,种子不是因为时间不同而改变吗?
-
只播种一次,然后生成你想要的一切。附带说明,如果您可以使用 C++11,请不要使用
rand()。 -
时间并没有那么不同。在大多数系统上,
time()是自纪元以来的秒数,并且在您的第一次和第二次调用之间不会有一秒钟。我同意 Atlas,使用<random>。如果你有的话,它真的是猫的睡衣。