嗨,我的随机数生成器在每次运行时都会给我相同的数字序列(尽管序列不同),我遇到了问题。下面是一段简化的代码来演示我的问题。
#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
rand()是"伪随机"生成器。这意味着它使用数学函数从上一个值生成下一个值。
srand()为"rand()"的后续调用设置初始"seed"值。若你们播种相同的值,你们将得到相同的随机序列。若你们用当前时间播种,每一秒的顺序都会不同。
只调用一次:
#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;
}
srand()
为随机生成器种子。CCD_ 2是基于种子生成随机数的算法。因此,您只需要在程序中调用srand()
一次。继续阅读以了解更多信息。。。
此外,rand()
的后续呼叫将自动生成不同的号码。例如
while (1){
printf("%d ",rand()%100);
}
将打印所有不同的数字列表,例如5 34 65 23 56。。。
在执行它之前,请注意time(NULL)
每秒更新一次。相反,在int main(){
中,在开始时添加srand(time(NULL));
一次。
祝你好运!