gpt4 book ai didi

c++ - Windows 中的 Qt qrand in 循环生成相同的数字

转载 作者:太空狗 更新时间:2023-10-29 23:02:44 24 4
gpt4 key购买 nike

我有使用 qml 的 qt 应用程序。循环中的 qrand 工作错误,在代码中工作正常。这个问题仅出现在 Windows 中(在 Windows 7 和 8 中尝试使用 MSVC2012_OpenGL_32bit)。这是示例:

在 main.cpp 中,我开始打印:

QTime time = QTime::currentTime();
qsrand((uint)time.msec());

然后在循环中我使用 qrand

for (int j = 0; j < 4; j++)
{
for (int i = 0; i < 1000; i++)
{
int r1 = qrand() % 150;
int r2 = qrand() % 150;
qDebug() << r1 << r2 << endl;
}
}

在输出中有 2 个不同的数字重复大约 200 次,然后发生变化:

8 58
8 58
8 58
...
120 1
120 1
120 1
...

如果我不在循环中使用 qrand,它就可以正常工作。但是,如果我使用 qrand 生成随机数,则该函数会出错。在 gcc 64 位编译器上的 linux 中,相同的代码可以正常工作,它在每一行中生成不同的数字。在带有 MSVC2012_OpenGL_32bit qrand 的 Windows 7 和 8 中工作错误。另外,我尝试了标准的 srand 和 rand(),它也有问题。我检查了 (uint)time.msec(),它总是不同的。但是,如果我将 qsrand 放入循环程序中,生成的并不完美,而是不同的数字:

for (int j = 0; j < 4; j++)
{
for (int i = 0; i < 1000; i++)
{
QTime time = QTime::currentTime();
qsrand((uint)time.msec());
int r1 = qrand() % 150;
int r2 = qrand() % 150;
qDebug() << r1 << r2 << endl;
}
}

输出不完美,因为它 qrand 只是更频繁地生成不同的数字,但同样并非总是如此。

更新:我在 Windows 中随机尝试了 c++11,它可以工作。我还没有在 Linux 中尝试过。但是关于 qrand 的问题仍然存在。

我使用的 c++11 random: std random functions not working - Qt MinGw

最佳答案

由于随机是基于时钟的,如果你在一个循环中使用随机(这是非常快的)时钟不会改变,你的数字都是一样的。

你应该添加一个暂停语句让时钟改变。

关于c++ - Windows 中的 Qt qrand in 循环生成相同的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27657926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com