1

可能重复:
rand函数在单个函数c ++中调用时返回相同的值

我有一个程序,每次鼠标点击都会创建一组新的随机数。如果我在没有 srand 的情况下运行程序( time(NULL) );每次的数字都是一样的。如果我用 srand ( time(NULL) ) 运行程序;那么我可能会点击垃圾邮件并且数字会重复。我怎样才能解决这个问题?

4

2 回答 2

4

您的问题是关于使用相同值播种随机数生成器。该srand函数用于为它初始化所谓的“种子”。种子可用于在序列中生成相同的随机数。

首先你需要初始化生成器,然后只调用rand不带参数的函数,它会生成随机数。例如:

  /* initialize random seed with actual date-time */
  std::srand(std::time(NULL));

  /* generate ten random number lower than 10 */
  int random, times = 10;
  while(times){
    random = std::rand() % 10;
    times--;
  }

关于“垃圾邮件点击”:std::time(NULL)具有以秒为单位的精度,因此如果您在同一秒内点击,您将使用相同的值初始化随机种子。

这是官方 c++ 参考网站上的一个示例,也是 cplusplus.com上的另一个示例。

于 2012-10-14T20:52:02.373 回答
0

rand函数不太擅长生成随机数,看看boost::random. 它很棒,可以创建随机和半随机数

于 2012-10-14T00:22:49.980 回答