rand() 返回的 int 比我的最大 C++ 高

rand() gives back higher int than my max c++

本文关键字:我的 C++ int 返回 rand      更新时间:2023-10-16

所以我希望我不是在问一些愚蠢的事情。

我希望我的程序在单击按钮时暂停从 2000 到 5999 的随机毫秒数,所以这里是几行:

void ExpNatDlg::OnBnClickedBack()
{
   int delayRand;
   delayRand = (int)rand() % 6000 + 2000;
   Sleep(delayRand);
}

为了检查我得到的延迟,我将它们打印在一个文件中,我不知道为什么,我有时会得到超过 7000 毫秒的延迟......

我不知道我错过了什么!感谢您的帮助!

这是一个简单的数学问题。 兰德 () % 6000 给出从 0 到 5999 的结果。将 2000 相加得到从 2000 到 7999 的结果。

问题是(int)rand() % 6000将在 5999 之前的任何位置,因此当您添加 2000 时,您将超过阈值。要获得 2000 和 6000 的最小值和最大值,您需要有 (int)rand() % 4000 + 2000 .这是因为将在 0 到 3999 范围内生成随机数,然后将 2000 相加将得到 2000 到 5999 的范围。

如果你有可用的 c++11,你可以像这样编写代码:

///init for RNG
std::random_device rd;
std::default_random_engine generator;
generator.seed( rd() );
//using the RNG
std::uniform_int_distribution<int> distribution(0,6000);
Sleep(distribution(generator));

这样做的好处是随机数的质量更高,代码的意图更清晰。