C++ 如何在两个值(含)之间生成随机数?

C++ 如何在两个值(含)之间生成随机数?,c++,random,user-input,C++,Random,User Input,我需要帮助弄清楚如何在两个用户输入的值之间生成一组随机数。正如你们所知,我一直在寻找这个,但并没有找到我刚才所说的。这是我的密码: #include <iostream> #include <ctime> #include <cstdlib> using namespace std; int main() { int userBeg, userEnd, outPut; cout << "Enter a start value:

我需要帮助弄清楚如何在两个用户输入的值之间生成一组随机数。正如你们所知,我一直在寻找这个,但并没有找到我刚才所说的。这是我的密码:

#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 
#包括
#包括
#包括
使用名称空间std;
int main()
{
int userBeg,userEnd,outPut;
cout>userBeg;
cout>userEnd;
srand(time(NULL));//生成随机种子值
对于(int i=0;i<5;i++){
//打印用户输入之间的数字,包括
输出=rand()%((userEnd-userBeg)+1);

cout要使rand正常工作,您需要执行以下操作:

#include <cstdlib>

int main() {

    int Min = 103;
    int Max = 113;

    int Number = std::rand() % (Max + 1 - Min) + Min;

    return 0;
}
测试后,它既适用于负数,也适用于正数

样本输出(带有回路和cout): 11-23

The number is: 13
The number is: 18
The number is: 14
The number is: 17
The number is: 18
The number is: 18
The number is: 23
The number is: 15
The number is: 11
The number is: 22
The number is: 22
The number is: 11
The number is: 22
The number is: 16
The number is: 14
The number is: 21
The number is: 16
The number is: 19
The number is: 15
The number is: 13
The number is: 17
1239-1242

The number is: 1240
The number is: 1242
The number is: 1239
The number is: 1241
The number is: 1241
The number is: 1241
The number is: 1239
The number is: 1240
The number is: 1240
The number is: 1240
The number is: 1242
The number is: 1240
The number is: 1242
返回介于0和
RAND_MAX
之间的数字。通过取模
userEnd-userBeg+1
边界将限制为0和
userEnd-userBeg
。如果随机数应在给定边界内,则应添加
userBeg
,因此演算变为

    outPut = rand()%((userEnd - userBeg) + 1) + userBeg; 

它仍然是实验性的,但它正是你想要的

#包括
#包括
int main()
{
int随机数=标准::实验::随机数(100999);
std::cout使用c++11库

您可以将(或任何其他随机引擎)用于

传递给
std::uniform_int_distribution
的值将是随机范围的上下限

e、 g


outPut+=userBeg
如果您使用的是C++11,请看一下
rand
是否快速但质量较低,然后您可以(可能)通过将其结果除以某个合适的小常量来获得更好的随机性,以便在接受比特之前消除最后几个比特的(影响)。std::rand()在cstdlib中不是随机的嗯…实际上编译和运行很好,没有任何包含当然,那么你不应该包含未使用的库。我已经更新了答案。感谢你指出!d找到它:)因为你使用C++11,我会消除这个答案的
实验部分,有一个标准的解决方案从2011开始,是的,我已经知道了。我只想给这个问题另一个简短的方法。谢谢,这个答案会产生偏颇的结果,一些数字比其他数字更可能。最好使用更现代的C++随机数的工具,而不是<代码> Rand < /C>。问题是关于边界,而不是<代码>。rand
准确性。这种方法减少了随机性,即使
rand
是完美的。它可能足以满足非关键应用程序,但每个人都应该知道警告。
    outPut = rand()%((userEnd - userBeg) + 1) + userBeg; 
#include <iostream>
#include <experimental/random>

int main()
{
    int random_number = std::experimental::randint(100, 999);
    std::cout << "random 3-digit number: " << random_number << '\n';
}
#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';
    }
}
unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();

std::default_random_engine generator(seed);