嗨我想生成2个值之间的随机数。 我有2个变量。 这是默认值: (MIN = MAX = 1)
以后这个值可以改变!
我用过这个:
rand()%(max-min)+min;
但是我得到了关于除零的调试。 有什么想法吗?
编辑:使用默认值生成的数字必须为1.
答案 0 :(得分:7)
在您的初始情况下,(max-min)
为0
,模数为零为undefined behavior。从C ++草案标准部分5.6
乘法运算符说:
二元/运算符产生商,二元%运算符从第一个表达式除以第二个表达式得到余数。如果/或%的第二个操作数为零,则行为未定义。 [...]
至于在min and max
之间生成随机数,您应该使用random header和uniform_int_distrubution:
#include <iostream>
#include <random>
int main()
{
std::random_device rd;
std::mt19937 e2(rd());
int min = 1, max = 1 ;
std::uniform_int_distribution<int> dist(min,max);
for (int n = 0; n < 10; ++n) {
std::cout << dist(e2) << ", " ;
}
std::cout << std::endl ;
}
如果出于某种原因, C ++ 11 不是一个选项,那么 C FAQ 在rand
部分[M, N]
中为我们提供了正确的公式3}}表示生成{{1}}范围内的随机数,您使用以下内容:
M + rand()/(RAND_MAX /(N - M + 1)+ 1)
答案 1 :(得分:2)
范围[min, max]
包含max - min + 1
个数字!所以你的代码应该是这样的:
rand() % (max - min + 1) + min;
不要忘记检查RAND_MAX
的值,但是你的范围不应该接近它。事实上,你希望它比这小得多,以避免过多的偏见。