blu*_*der 2 c++ random user-input
我需要帮助弄清楚如何在两个用户输入的值之间生成一定数量的随机数,包括在内.只是你知道,我已经搜索了这个,但我没有找到我刚才所说的.这是我的代码:
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
int userBeg, userEnd, outPut;
cout << "Enter a start value: ";
cin >> userBeg;
cout << "Enter an end value: ";
cin >> userEnd;
srand(time(NULL)); //generates random seed val
for (int i = 0; i < 5; i++) {
//prints number between user input, inclusive
outPut = rand()%((userEnd - userBeg) + 1);
cout << outPut << " ";
}//end for
return 0;
}//end main
Run Code Online (Sandbox Code Playgroud)
我对以下范围的输出感到困惑:1-100收益率输出数字介于其间,但不包括边界,如50,97,24,59,22.但是,10-20收益率数字,例如1,14,6,12,13.这里,输出在边界之外以及它们之间.我究竟做错了什么?
预先感谢您的帮助!
rand返回 0 到 之间的数字RAND_MAX。通过取模,userEnd - userBeg + 1边界将被限制为 0 和userEnd - userBeg。如果随机数应该在给定的边界内,那么userBeg应该相加,所以微积分变成
outPut = rand()%((userEnd - userBeg) + 1) + userBeg;
Run Code Online (Sandbox Code Playgroud)
使用c ++ 11 random库.
你可以使用std::default_random_engine(或任何其他随机引擎)std::uniform_int_distribution.
传递给的值std::uniform_int_distribution将是随机范围的下限和上限.
例如
#include <iostream>
#include <random>
int main()
{
const int nrolls = 100;
std::default_random_engine generator;
std::uniform_int_distribution<int> distribution(0,9);
int p[nrolls]={};
for (int i=0; i<nrolls; ++i)
{
p[i] = distribution(generator);
}
std::cout << "uniform_int_distribution (0,9):" << '\n';
for (int i=0; i<nrolls; ++i)
{
std::cout << i << ": " << p[i] << '\n';
}
}
Run Code Online (Sandbox Code Playgroud)
如果您希望播种随机引擎,请创建它.
unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
std::default_random_engine generator(seed);
Run Code Online (Sandbox Code Playgroud)