【问题标题】:C++ Random Number Generator does not generate numbers correctly at allC++ 随机数生成器根本无法正确生成数字
【发布时间】:2012-06-22 10:14:10
【问题描述】:

这是我的功能:

Random(int min, int max)
{
    srand(time(NULL));
    return (rand() % (max-min)) + 1;
    // or
    return (rand() % (max+min)) + 1;
    // or
    return (rand() % (max-min))
    // or
    return (rand() % (max+min))
};

而且它不起作用,如果我说 add Random(5, 10) 它有时会显示 15, 5, 4。我无法弄清楚,因为所有指南都说“这是它应该的方式是”,但它不起作用。我错过了什么?

这个方法是一个类的一部分。

我试过 srand(time(NULL)) 放在:

  1. 完全没有
  2. 在构造函数中
  3. 在方法中

没有结果。

rand() 不应该返回 0 到 1 之间的值吗?我的没有。

【问题讨论】:

  • 您应该通过阅读文档并思考您编写的代码来“弄清楚”函数的工作原理,而不是尝试代码中相关标记的所有排列。
  • 相关,请阅读。 stackoverflow.com/a/686373/241536

标签: c++ random


【解决方案1】:
  1. 只拨打一次srand
  2. 使用return (rand() % (max-min+1)) + min; (+1 用于将max 包含在范围内)
  3. rand() 返回一个介于 0 和 RAND_MAX 之间的值,并且是一个正整数。

【讨论】:

  • @Deukalion:您可以从精美的文档中了解所有这些以及更多信息,例如第 3 节中的 manual page of rand
  • 谢谢。我尝试了每个示例,但它根本不起作用。我一直在使用这些功能,从来没有尝试过足够的理解,但我理解了原理。我只是忘记了最低限度。对不起,关于这个烂摊子:P
【解决方案2】:

男人兰德(3)

函数签名是int rand(void);,所以它已经不能返回0到1之间的值,因为它是一个整数。

返回值: rand() 和 rand_r() 函数返回一个介于 0 和 RAND_MAX(含)之间的值。 srand() 函数不返回任何值。

来自man rand(3)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-06
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 2023-03-18
    • 2011-01-24
    • 1970-01-01
    相关资源
    最近更新 更多