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()函数的结果。