在单个函数中调用时,rand()返回相同的值

6 c++ random

我是一个C++新手,我很难过.我需要在我的main函数中调用这个函数三次,但每次它给我相同的结果,即pull_1,pull_2,pull_3是相同的.我需要做些什么来使它们实际上是随机的?

string PullOne()
{
    string pick;
    string choices[3] = {"BAR", "7", "cherries"};

    std::srand(time(0));
    pick = choices[(std::rand() % 3)];
    return pick;
}
Run Code Online (Sandbox Code Playgroud)

从我的主要功能:

string pull_1, pull_2, pull_3;
pull_1 = PullOne();
pull_2 = PullOne();
pull_3 = PullOne();
Run Code Online (Sandbox Code Playgroud)

sha*_*oth 16

你不应该srand()在每次打电话之前打电话rand().称之为一次 - 在程序开始时的某个地方.

问题是你重新启动随机生成器,因此它开始从同一点生成完全相同的伪随机序列.


Tug*_*tes 15

每次调用时,随机数生成器都会重置为初始状态,该状态由种子值决定srand.连续调用之间的时间值可以相同time,因此生成相同的种子和相同的数字.

srand在生成随机样本之前,只在主函数中调用一次种子函数().


Lig*_*ica 7

你为什么一直打电话std::srand(time(0));?重新播种PRNG ....并且因为这一切都在同一秒内发生,所以你总是以相同的顺序重新播种它.

在你的程序中调用srand 一次,只调用一次.

此外,我建议,至少在符合POSIX标准的系统上,std::srand(time(0) ^ getpid())这样,你可以在同一个"秒"内运行你的程序两次,并仍然得到一个新的PRNG序列.