c++ - C++ rand() 在单个函数中调用时返回相同的值

100 4

我是一个 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;
}

从我的主要功能:

string pull_1, pull_2, pull_3;
pull_1 = PullOne();
pull_2 = PullOne();
pull_3 = PullOne();
时间: 原作者:

136 4

你不应该在每次调用 rand() 之前调用 srand() 。 在程序开始的地方调用一次。

问题是你重启随机发生器,使它从同样的点产生同样的伪随机序列。

原作者:
114 3

随机数生成器被重置为一个初始状态,这是由种子值每次调用 srand 时命令的。 对 time的连续调用的时间值可能相同,因此生成的种子和生成的数量相同。

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

118 4

为什么一直调用std :: srand(time(0));? 因为这一切在同一秒内发生,所以你总是在同一个序列中播放它。

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

另外,我建议至少在符合posix的系统上使用 std::srand(time(0) ^ getpid()),这样你就可以在同一个"第二个"中运行两次程序,并且仍然可以获得一个新的。

...