我想在指定范围之间生成一个随机数,但是当我运行以下代码时。它给出了错误,任何人都可以解释错误吗?
#include <iostream>
#include <random>
using namespace std;
unsigned long int starting=2347483648;
unsigned long int ending=3994967296;
unsigned int rand(unsigned long int first,unsigned long int last)
{
std::random_device rd;
std::mt19937 eng(rd());
std::uniform_int_distribution<> distr(first, last);
return (unsigned int)distr(eng) << ' ';
}
int main()
{
cout<<rand(1,ending);//generate random number in this range
}
程序中断并发出错误
uniform_int
的最小和最大参数无效
解释错误的原因并告诉我如何在上述指定范围之间生成随机数
答案 0 :(得分:3)
试试这个:
std::uniform_int_distribution<unsigned long int> distr(first, last);
return (unsigned int)distr(eng);
}
我还删除了使用空格字符左移的错误<< ' '
,而不是在输出中附加空格。
int main()
{
cout<<rand(1,ending) << " ";
}
当ending
(或最后一个)转换为int时,它变为-300000000
。对于发行版,ending
也变为max()
,因此ending
== distr.max()
。使用std::numeric_limits<int>::min()
,我们可以看到结果值可以适合int。