rand函数在单个函数c ++中调用时返回相同的值
我是一个C + +新手,我难住这个。 我需要在我的主函数中调用这个函数三次,但每次它给我相同的结果,即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; }
从我的主要function:
string pull_1, pull_2, pull_3; pull_1 = PullOne(); pull_2 = PullOne(); pull_3 = PullOne();
在每次调用rand()
之前,不应该调用srand()
rand()
。 在程序开始的某个地方调用一次。
问题是你重新启动随机发生器,所以它开始产生非常相同的伪随机序列。
每次调用srand
时,随机数发生器都会重置为由种子值决定的初始状态。 连续调用时间的时间值可能相同,因此生成相同的种子和相同的数字。
在生成随机样本之前,只需在主函数中调用种子函数( srand
)一次。
为什么你一直在调用std::srand(time(0));
? 这重新种子PRNG ….因为这一切发生在同一秒内,你总是重新播种与相同的序列。
在你的程序中调用一次 srand
,一次。
另外,至less在POSIX兼容的系统上,我会推荐像std::srand(time(0) ^ getpid())
,这样你可以在同一个“秒”内运行你的程序两次, PRNG序列。
函数调用之间的time(0)
函数可能没有“打勾”。 因此,您每次都使用相同的值播种随机数生成器,导致rand()
值相同。
你的问题是你每次调用函数的时候都会给RNG播种。 你只能在程序中播种一次,以获得最佳效果。 如果你希望结果从程序执行到下一个执行,srand基于time()函数的结果。