我要两次调用一个随机数生成器函数,理论上应该每次都获得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之间的完全随机数,但每个结果都取相同的数字。
答案 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()
返回的值两次都相同。结果,随机数发生器在同一起点重新开始随机数序列。有两种方法可以解决问题:
time()
,将其移至所有对srand()
的呼叫之前randomNUM()
值,您将该值初始化为static boolean
,然后在首次调用false
时设置为true
。然后,您可以检查此变量的值是什么,以确定是否应调用srand()
。