[英]rand() produces numbers above set range in recursive function
我的理解是,這將產生一個介於10和offset之間的隨機數:
random = (rand() % 10) + offset;
偏移量增加了1,但從未超過10,但是當我運行此代碼時,變量random被設置為數字> 10。
有問題的代碼:
#include "pch.h"
#include <cstdlib>
#include <Windows.h>
#include <iostream>
using namespace std;
void gen(int offset)
{
int random;
if (offset != 10)
{
random = (rand() % 10) + offset;
cout << "random should be between: " << 10 << " and " << offset << endl;
cout << "random: " << random << endl << endl;
Sleep(500);
gen(++offset);
}
}
int main()
{
srand(373);
gen(1);
cin.get();
}
和輸出:
隨機值應介於10和1之間
隨機:7
隨機值應介於10和2之間
隨機:11
隨機值應介於10到3之間
隨機:3
隨機值應介於10到4之間
隨機:13
隨機值應介於10到5之間
隨機:10
隨機值應介於10到6之間
隨機:13
隨機值應介於10到7之間
隨機:16
隨機值應介於10到8之間
隨機:14
隨機值應介於10到9之間
隨機:18
(rand() % 10)
返回范圍[ (rand() % 10) + offset
]的值,因此(rand() % 10) + offset
將返回范圍[offset,offset + 9]的值。
如果要返回范圍[offset,10]內的值,則需要(rand() % (11 - offset)) + offset
小於10的(rand() % (11 - offset)) + offset
的偏移量。
另外,您可能應該使用std :: uniform_int_distribution獲取范圍內的隨機整數。
(rand() % 10)
得出0到9之間的數字,然后向其添加offset
。第一次rand() % 10)
得出6,向其加上1。因此為7
。 第二次, rand() % 10)
得到9,您加上了2,即11
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.