我想在C ++中创建一个5到8之间的随机数生成器

时间:2014-06-05 05:40:32

标签: c++ c++11

我需要此代码生成5到8之间的数字,然后将其分配给变量。然而,当我让它只给我一个数而不是多个时,它只给我相同的数字。当我将它设置为e倍数时,它会给我随机数字。

#include <random>
#include <iostream>

int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dis(5, 8);

    for (int n=0; n<1; ++n)
        std::cout << dis(gen) << ' ';
    std::cout << '\n';
}

2 个答案:

答案 0 :(得分:6)

1 - 您只有一个号码&#34; :

因为你的for循环只进行了一次迭代。

for (int n=0; n<1; ++n)
                ^
               Here

2 - 如果你总是看到相同的伪随机序列,这是因为种子本身是伪随机的:对于std::random_device,这是implementation specific

  

注意,std :: random_device可以用a来实现   伪随机数引擎,如果是非确定性源(例如,   硬件设备)不适用于实现。

请注意,您在ideone上的示例不是伪随机的,并且工作正常:http://ideone.com/lysKrt

rd之外,您可以将系统时间用作种子:

    #include <chrono>
    // ...

    unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
    std::mt19937 gen(seed);

答案 1 :(得分:0)

这是因为可执行文件始终从同一个种子开始。如果你想在每次运行中使用不同的数字,那么你需要为生成器播种。用当前时间说。