RAND()在递归功能中产生的数字高于设定范围



我的理解是,这会在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

最新更新