我的理解是,这会在10和偏移之间产生一个随机数:
random = (rand() % 10) + offset;
偏移会增加1,但永远不会超过10,但是当我运行此代码时,变量随机设置为数字> 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)
返回范围内的值[0,9],因此 (rand() % 10) + offset
将返回范围内的值[offset,offset 9]。
如果要返回范围内的值[offset,10],则需要 (rand() % (11 - offset)) + offset
的偏移量少于11。
(rand() % 10)
导致0到9之间的数字,然后您第一次添加 offset
rand() % 10)
导致了6,您添加了1. 7
。第二次rand() % 10)
导致9,您添加了2,因此11
。