【问题标题】:C++ randomized number always same even with time(0) as seed [duplicate]即使将时间(0)作为种子,C ++随机数也始终相同[重复]
【发布时间】:2014-09-27 22:53:56
【问题描述】:

您好,我正在尝试生成一些稍后将转换为字符的随机数。问题是 rand() 生成的数字总是返回相同的,尽管我使用 time(0) 作为 rand() 的种子。

int randomNumber(int min, int max)
{
    srand(time(0)); 
    int rndm = (rand()%(max-min))+min;
    cout<<rndm<<" ";
    return 0;
}

假设我随机生成了 3 次

int main()
{
    randomNumber(0,5);
    randomNumber(0,5);
    randomNumber(0,5);
}

产生的数字将是 1 1 1 或 2 2 2 等。知道吗?谢谢

【问题讨论】:

  • 不要每次都播种!只播一次!
  • 在main()中只调用一次srand()。

标签: c++ random


【解决方案1】:

在每次调用 rand 之前,您正在使用相同的种子重新播种伪随机序列,因为 time 返回的值每秒仅更改一次。这会导致您每次都得到相同的结果。

只在程序开始时调用一次srand。

更好的是,看看 C++11 &lt;random&gt; 库,它具有更复杂的生成器,并且可以访问“真实”随机数来为它们播种。

【讨论】:

  • 哦,我明白了.. 感谢您的解释。稍后我也会去看看图书馆。
猜你喜欢
  • 1970-01-01
  • 2011-05-06
  • 2012-08-30
  • 2013-06-05
  • 2016-09-20
  • 1970-01-01
  • 2018-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多