rand()产生1个数字太高了?

0 c++ random srand

据我所知,rand() % a + b将返回a和b之间的数字,包括a和b.我必须误解这一点,因为当我运行下面的代码时int r会返回2,3或4.当然,我希望它返回2或3.我正在调用srand(time(NULL));main,我正在使用 #include <time.h>#include <stdlib.h>
Am我错过了什么?

    int r = (rand() % 3) + 2;
    if (r ==2)
        g_fan.draw(r); // skin == 2
    else
        g_fan.draw(1 + r); //skin == 4
Run Code Online (Sandbox Code Playgroud)

R S*_*ahu 8

这是我的理解是rand() % a + b会之间返回号码ab既包括ab.

号这将导致之间的数字b(a+b-1),既包括.

值的范围rand() % a0a-1,包括.

因此,值的范围rand() % a + bb(a-1+b),包括.

要获得a和之间的随机值b,包括,使用:

auto interval = (b-a+1);
auto result = a + rand() % interval;
Run Code Online (Sandbox Code Playgroud)