为什么我的随机数生成器总是以“1”开头?

1 c++

int number_generator(bool new_id)
{
    if (new_id) 
    { 
        srand(time(NULL));
        int x = 99999 + (rand() % 999999); 
        return x;
    }
    else 
    {
        throw std::runtime_error("Oops! something went wrong"); 
    }
}
Run Code Online (Sandbox Code Playgroud)

给定一个真参数,此函数生成一个随机的 6 位数字。我已经编译了很多次,它生成的数字总是以“1”开头。我究竟做错了什么?

chi*_*chi 5

rand()返回一个介于 0 和 之间的数字RAND_MAX。后者可以低至 32767。C++ 只需要RAND_MAX至少这么大。C++ 实现可以使用更大的值,但这不是标准规定的。

有可能(甚至可能)您的实现选择了 的最小允许值RAND_MAX,即 32767。如果是这种情况,您的计算值99999 + (rand() % 999999)等于99999 + rand(),因此它位于99999和之间99999 + 32767。这将始终以数字开头,1除非不太可能的情况rand()为零,导致结果为99999