如何在运行时生成不同的随机数?
我尝试过以下方法:
srand((unsigned) time(0));
但是在每次程序启动时似乎会得到一个随机数,但并不是在每次执行函数本身时都会得到随机数...
我正在尝试使用随机数、随机迭代、元素数量等来自动化一些测试... 我以为我只需要调用
srand((unsigned) time(0));
在我的测试函数开头加上bingo,但显然没有用。你会建议我做什么?
正如其他人提到的一样,srand()用于种子随机数生成器。它基本上是设置随机数序列的起点。因此,在实际应用中,您只需要调用它一次(通常是在设置本地环境后的主函数中第一件要做的事情)。
int main()
{
srand(time(0));
// STUFF
}
现在,当你需要一个随机数时,只需调用rand()。
转向单元测试。在这种情况下,您真的不希望有随机数。非确定性的单元测试毫无意义。如果一个失败了,你怎么能重现结果以便修复它呢?
你仍然可以在单元测试中使用rand()。但是,你应该初始化它(用srand())使得当调用rand()时,单元测试总是得到相同的值。所以,在每个测试之前,测试设置应该调用srand(0) (或一些其他常量)。
你需要在每个测试之前调用它的原因是,这样当你调用单元测试框架运行一个测试(或一组测试)时,它们仍然使用相同的随机数。
您需要在程序执行期间仅调用一次srand。调用rand会更新随机数生成器的内部状态,因此再次调用srand实际上会重置随机状态。如果不到一秒钟的时间过去,时间将是相同的,并且您将获得相同的随机数流。
srand
用于生成随机数发生器的种子。's'代表'seed',即种子。它被称为“种植”,因为你只需要执行一次:一旦“种植”完成,你就可以从中获取一个流,并调用rand
任意次数。不要在需要随机数的函数开头调用srand
。请在程序开始时调用它。