[英]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.