c++ - 我如何一次完全生成一个随机数?

标签 c++

我想一次(同时)创建 3 个随机数。然而,他们一次返回相同的数字,即使它们实际上是随机的。示例:

------------------------
Variable:   A   B   C
------------------------
Time 1  :   5   5   5
Time 2  :   3   3   3
Time 3  :   9   9   9
------------------------

它们应该是完全不同的数字。通过观察,我可以看到我的代码一次只能选择一个随机数(间隔 1 秒)。这是我正在使用的生成器代码:

unsigned int CMain::GenerateRandom(int min, int max)
{
    srand((unsigned)time(0)); 
    unsigned int random_integer; 
    int lowest = min, highest = max; 
    int range = (highest - lowest) + 1;

    random_integer = lowest + int(range * rand() / (RAND_MAX + 1.0));

    return random_integer;
}

我怎样才能一次生成一个完全随机的数字?请帮忙。

谢谢。

最佳答案

这里的问题是您在每次调用时都使用当前时间重置随机种子,这是不应该的。

在查询任何随机数之前调用一次 srand() - 这已经足够了。

现在你总是将你的随机种子重置为完全相同的值(因为你使用当前时间)。 PC 中的随机数根本不是真正随机的。相同的种子将始终导致稍后生成相同的随机数集。这是有意的,例如用于savegames 让游戏总是有相同的事情发生,而不必保存生成的每个随机数等。

关于c++ - 我如何一次完全生成一个随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5438550/

相关文章:

c++,函数指针+函数模板

c++ - vxWorks-Workbench 6.8 未解析的 C++ 符号

c++ - 是否可以通过 Windows C++ 应用程序的唯一地址检测到蓝牙设备?

c++ - 表达式树 printLevel() 函数

c++ - 指针数据变化

c++ - MPI如何从从节点接收动态数组?

c++ - 使用友元运算符<<的编译器错误

c++ - 仅使用其值 c++ 在多重映射中查找元素

c++ - Matlab/C++ : segmentation fault on parallel computing with C++ Mex persistent objects (cannot convert handle)

c++ - std::map 未按预期运行