C++随机数生成器调用了多次

C++ random number generator called multiple times

本文关键字:调用 随机数生成器 C++      更新时间:2023-10-16

嗨,我的随机数生成器在每次运行时都会给我相同的数字序列(尽管序列不同),我遇到了问题。下面是一段简化的代码来演示我的问题。

#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));一次。

祝你好运!