rand() 在每次函数调用时产生相同的结果(使用 srand(time(0))

Joh*_*now 2 c++ random

我有一个类的成员函数,它应该生成一个范围内的随机数。为此,我使用 rand() 函数。该函数生成一个随机数,如下所示:

    unsigned seed;
    seed = time(0);
    srand(seed);
    std::cout << "Random Number: "<< rand() << std::endl;
Run Code Online (Sandbox Code Playgroud)

该函数在两个不同的对象上调用。结果是:

Random Number: 1321638448
Random Number: 1321638448
Run Code Online (Sandbox Code Playgroud)

每次我调用它时都是一致的。我究竟做错了什么?

tem*_*def 5

(将我的评论转换为答案)。

rand对于大多数应用程序,您实际上只想在运行程序的过程中播种一次。多次播种需要您获得不同的随机种子,而且很容易搞砸。

在您的情况下,该time函数通常返回分辨率为秒的内容(尽管标准实际上并不要求这样做)。因此,如果您time在同一秒内调用两次,您可能会返回相同的值。这可以解释为什么你会得到重复的值:你用相同的值播种随机数两次,然后立即查询它的随机数。

对此的最佳解决方案是只为随机发生器提供一次种子。通常,您会在main.

如果您确实想多次为随机发生器提供种子,请确保您使用的种子几乎是随机的。否则,您就有可能发生类似的事情。