您好我的随机数生成器在每次运行时都给出了相同的序列(序列是不同的)数字。这是一个简化的代码,用于演示我的问题。
#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
答案 0 :(得分:3)
rand()是&#39;伪随机&#39;发电机。这意味着它使用数学函数从前一个值生成下一个值。
srand()设置初始&#39;种子&#39;随后调用&#39; rand()&#39;的值。如果您播种相同的值,您将得到相同的随机序列。如果你用当前时间播种,那么序列每秒都会不同。
只打电话一次:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int random(){
return(1+rand() % 6);
}
int main(){
srand(time(0));
cout<< random() <<endl;
cout<< random() <<endl;
}
答案 1 :(得分:0)
srand()
为随机生成器播种。 rand()
是一种基于种子生成随机数的算法。因此,您只需在程序中调用srand()
一次即可。继续阅读更多......
此外,rand()
的后续调用将自动生成不同的数字。 e.g。
while (1){
printf("%d ",rand()%100);
}
将打印一个全部不同的数字列表,例如5 34 65 23 56 ...
在您实施之前,请注意time(NULL)
每秒更新一次。相反,在int main(){
开始时添加srand(time(NULL));
一次。