C++ 生成随机数出错了

C++ 生成随机数出错了,c++,google-nativeclient,C++,Google Nativeclient,我有这个密码。我用随机数生成2个数组,然后使用arrayToString函数从这些数组中创建2个字符串,但我的输出很奇怪 class job1Instance : public pp::Instance { public: explicit job1Instance(PP_Instance instance): pp::Instance(instance) {} virtual ~job1Instance() {} virtual void Handle

我有这个密码。我用随机数生成2个数组,然后使用
arrayToString
函数从这些数组中创建2个字符串,但我的输出很奇怪

class job1Instance : public pp::Instance {
public:
        explicit job1Instance(PP_Instance instance): pp::Instance(instance) {}
        virtual ~job1Instance() {}

    virtual void HandleMessage(const pp::Var& message) {
        // declare all the zises
        int32_t minNum = 1;
        int32_t maxNum = 100;
        int32_t arrayElements = maxNum;

        // the arrays
        int32_t unsorted1[arrayElements/2];
        int32_t unsorted2[arrayElements/2];

        // fill the arrays with random numbers
        unsortedArrays(unsorted1, unsorted2, arrayElements, minNum, maxNum);
        std::string outRes1, outRes2, jsonStr;
        arrayToString(unsorted1, arrayElements/2, outRes1);
        arrayToString(unsorted2, arrayElements/2, outRes2);
        PostMessage(pp::Var(outRes2));
    }



private:
    // function to create a random number between min and max
    int32_t rangeRandomAlg (int32_t min, int32_t max) {
        int32_t num = max - min + 1;
        int32_t remainder = RAND_MAX % num;
        int32_t x;
        do {
            x = rand();
        } while (x >= RAND_MAX - remainder);
        return min + x % num;
    }

    // function to create arrays with random numbers
    void unsortedArrays (int32_t unsorted1[], int32_t unsorted2[], int32_t arrayElements, int32_t &minNum, int32_t &maxNum) {
        for(int32_t i = 0; i < arrayElements; i++) {
            if (i < arrayElements/2) {
                //unsorted1[i] = rangeRandomAlg(minNum, maxNum);
                unsorted1[i] = rand() % maxNum + minNum;
            } else {
                //unsorted2[i] = rangeRandomAlg(minNum, maxNum);
                unsorted2[i] = rand() % maxNum + minNum;
            }
        }
    }


    // convert the arrays to string
    void arrayToString (int32_t array[], int32_t arraySize, std::string& arrayString) {
        for (int i = 0; i <= arraySize; ++i){
            arrayString+= std::to_string(array[i]);
            if (i != arraySize) {
                arrayString+= ',';
            }
        }
    }
class job1Instance:public pp::Instance{
公众:
显式job1Instance(PP_实例实例):PP::Instance(实例){}
虚拟~job1Instance(){}
虚拟void HandleMessage(const pp::Var和message){
//申报所有的齐兹
int32_t minNum=1;
int32_t maxNum=100;
int32_t arrayElements=maxNum;
//阵列
int32_t unsorted1[arrayElements/2];
int32_t unsorted2[arrayElements/2];
//用随机数填充数组
未排序的数组(未排序的1、未排序的2、数组元素、minNum、maxNum);
std::字符串outRes1、outRes2、jsonStr;
arrayToString(未排序1、arrayElements/2、outRes1);
arrayToString(未排序2、arrayElements/2、outRes2);
PostMessage(pp::Var(outRes2));
}
私人:
//函数在最小值和最大值之间创建一个随机数
int32_t rangeRandomAlg(最小int32_t,最大int32_t){
int32_t num=最大值-最小值+1;
int32\u t余数=随机数最大值%num;
int32_t x;
做{
x=兰德();
}而(x>=RAND_MAX-余数);
返回最小值+x%num;
}
//函数创建带有随机数的数组
void unsortedarray(int32_t unsorted1[],int32_t unsorted2[],int32_t arrayElements,int32_t&minNum,int32_t&maxNum){
对于(int32_t i=0;i
#include <random>
#include <iostream>
#include <string>

int main(){

    std::random_device now;
    std::mt19937 engine(now());
    std::uniform_real_distribution<double> r(0, 100); //!

    std::string str = std::to_string( r(engine) );

    std::cout << str << std::endl;

    system("pause");
    return 0;
}
#包括
#包括
#包括
int main(){
标准::随机_设备现在;
std::mt19937发动机(现在());
标准:均匀实分布r(0100);/!
std::string str=std::to_string(r(引擎));

std::cout您声明了两个数组,每个数组的大小
arrayElements/2

    int32_t unsorted1[arrayElements/2];
    int32_t unsorted2[arrayElements/2];
循环按如下方式初始化它们:

        if (i < arrayElements/2) {
            //unsorted1[i] = rangeRandomAlg(minNum, maxNum);
            unsorted1[i] = rand() % maxNum + minNum;
        } else {
            //unsorted2[i] = rangeRandomAlg(minNum, maxNum);
            unsorted2[i] = rand() % maxNum + minNum;
        }

由于
unsorted2
的大小为
arrayElements/2
,因此此数组仅包含
unsorted2[0]
unsorted2[arrayElements/2-1]的值
,此赋值将从数组末尾运行,导致未定义的行为。

在调试和逐步执行代码时,您看到了什么?如果OP使用
std::uniform\u real\u distribution
,而不是
rand()
那没有任何区别。因为那不是错误所在。我不知道为什么我自己没有看到它:)。另一个问题,你知道为什么每次执行后生成的数字都保持不变吗?因为你没有初始化随机数种子,
srand()
。这完成了
time\u t time;
srand((未签名)time(&time));
初始化
srand()函数的技巧。
            unsorted2[arrayElements/2] = rand() % maxNum + minNum;