Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt rand()不';我不能正常工作_C++_Qt_C++11_Random_Numbers - Fatal编程技术网

C++ Qt rand()不';我不能正常工作

C++ Qt rand()不';我不能正常工作,c++,qt,c++11,random,numbers,C++,Qt,C++11,Random,Numbers,我想显示1000个从0到99999的随机数。但这有一个奇怪的问题。它显示了1000个数字,但没有一个比aprox更高。35 000. 为什么呢 #include "mainwindow.h" #include <QApplication> #include <QDebug> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show();

我想显示1000个从0到99999的随机数。但这有一个奇怪的问题。它显示了1000个数字,但没有一个比aprox更高。35 000. 为什么呢

#include "mainwindow.h"
#include <QApplication>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    int ran;

    qsrand(qrand());

    for (int i=0; i<1000; i++){
        ran = qrand() % 100000;
        qInfo() << ran;
    }    

    return a.exec();
}
#包括“mainwindow.h”
#包括
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
主窗口w;
w、 show();
int-ran;
qsrand(qrand());
对于(int i=0;i问题
实际上是32767。本例中的行为与标准相同:

返回介于0和
RAND_MAX
之间的伪随机整数

以及文件中的类似声明:

返回介于0和
之间的值RAND_MAX
(在
中定义)

显然,在您的情况下,
RAND_MAX
等于32767(2)⁵ – 1)

解决方案 解决方案是使用C++11随机数生成器:

#include <random>

// ...

std::random_device rd;
std::mt19937 mt(rd());
const int min = 0;
const int max = 99999;
std::uniform_int_distribution<int> ds(min, max);
for (int i = 0; i < 1000; ++i) {
    qDebug() << ds(mt);
}
#包括
// ...
std::随机_装置rd;
标准:mt19937 mt(rd());
常数int min=0;
常数int max=99999;
标准:均匀分布ds(最小值、最大值);
对于(int i=0;i<1000;++i){

我的机器上的qDebug()输出看起来正常(例如74537、9993、54396出现在那里)。2^15是“大约35000”。它看起来像是在处理有符号的16位整数。那么我如何更改它呢?对于32位整数上的ex?
qrand()
函数返回一个介于0和RAND_MAX(在和中定义)之间的值RANDXMAX CONST是编译器依赖的,所以最好使用C++中的新随机函数11@ramzes2我使用了normal rand()函数和srand(time(NULL))但它没有工作。结果是一样的。是的,我同意你的看法。这是个问题。在应用c++11中的这些新随机函数后一切正常。谢谢!