如何从被多次调用的RNG中获得2个不同的数字

时间:2019-04-23 01:08:47

标签: c++

我要两次调用一个随机数生成器函数,理论上应该每次都获得2个随机数,但是两次都给了我相同的数字。

我尝试以不同的方式调用该函数,并将srand中的整数替换为0和null,但仍然收到相同的答案

const api = "https://jsonblob.com/api/jsonBlob"

fetch(api, {
    method: 'POST',
    body: JSON.stringify({
        name: 'dean',
        login: 'dean',
    }),
    // you also have to add this request header for that API
    headers: {
        'Content-Type': 'application/json'
    }
}).then(response => {
    if (response.ok) {
        const blobID = response.headers.get('x-jsonblob');
        console.log(`POST returned a blobID = ${blobID}`);
        // return the blobID we can use to fetch the data later
        return blobID;
    }
    throw new Error('POST Request failed!')
}).then(blobID => {
   // lets do a GET to see if we get the right data
   console.log(`fetch ${api}/${blobID}`);
   return fetch(`${api}/${blobID}`)
}).then((response) => {
    if (response.ok) {
        return response.json();
    }
    throw new Error('GET Request failed! ');
})
.then((Jsondata) => {
    console.log('Result of GET')
    console.log(Jsondata)
}).catch(error => {
    console.log('Request failure: ', error);
});

我希望RL和RL2的结果是1到99之间的完全随机数,但每个结果都取相同的数字。

3 个答案:

答案 0 :(得分:3)

您仅应在程序开始时一次调用srand()。致电srand()后,随机数字符串将被重置。

做类似的事情

 int randomNUM()
 {
    int RL = rand() % 100;
    return RL;
    RL = 0;
 }

 int main()
 {
     srand(time(NULL));
     int RL = randomNUM();
     int RL2 = randomNUM();

     cout << "RL: " << RL << endl;
     cout << "RL2: " <<RL2 << endl;

 }

答案 1 :(得分:1)

Context设置种子。您应该主要进行一次,而不是每次都想要一个随机数。因此,您应该拥有

srand

答案 2 :(得分:1)

每次调用randomNUM()时,您都在重新播种随机数生成器。由于两次调用之间不会花费太多时间,因此randomNUM()返回的值两次都相同。结果,随机数发生器在同一起点重新开始随机数序列。有两种方法可以解决问题:

  1. 将呼叫移至time(),将其移至所有对srand()的呼叫之前
  2. 具有一个randomNUM()值,您将该值初始化为static boolean,然后在首次调用false时设置为true。然后,您可以检查此变量的值是什么,以确定是否应调用srand()