函数c ++中的随机数

时间:2014-08-30 00:33:11

标签: c++ random

我想更好地使用和理解函数,在这种情况下我需要弄清楚如何使这个函数特别返回2个不同的随机数。我已经设置了ctime并且可以成功调用我的函数并使我的变量(消息)等于随机数,但是当我再次调用它并要求它打印出最新的随机数时,它们都是相同的。

#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int RandomNumberGen (int x);

int main()
{
    srand(unsigned(time(0)));

    int Ran;
    int message;

    message = RandomNumberGen (Ran);

    cout << "Number 1 " << message << endl;
    message = RandomNumberGen (Ran);

    cout << "Number 2 " << message << endl;
    return 0;
}

int RandomNumberGen (int Ran)
{
    unsigned int RandomNum = 0;
    RandomNum = rand()%8 + 4;

    return RandomNum;
}

正如你所看到的,我设置了输出随机数的功能并将其写在屏幕上,然后我再次调用相同的功能并在屏幕上写下一个(在屏幕上写下第二个#)。每次我调用功能这两个数字都写在屏幕上,即使我每次都生成一个随机数。

我知道这是一项简单易行的任务,但请告诉我是否可以尝试做的事情,或者我是否需要为第二个号码另外设置另一项功能。

我的最终目标是将大量事件和事物基于一个随机数函数,因此我基本上可以将函数调用为随机数,然后让它确定接下来会发生什么。

我按照你的要求放入了代码。我希望这就是你的意思。我很感激所有的帮助,非常感谢你的答案。我打算更多地使用它,所以我一定会把它弄好。你们!

3 个答案:

答案 0 :(得分:1)

您在函数srand中调用了RandomNumberGen,该函数被多次调用。这是错误的,srand只应调用一次,请尝试将其放入main

或者更好的是,如果可以使用crandom中的方法,而不是C库random函数。

答案 1 :(得分:1)

看看this question,特别是答案。它应该澄清有关srand()rand()

的一些内容

我引用了答案:

  

种子通常取自当前时间,即秒,如时间(NULL),所以如果你总是在取随机数之前设置种子,只要你调用srand你就会得到相同的数字/ rand combo在同一秒内多次。

基本上你应该做的是,只在应用程序开始时调用srand()而不是函数。因为你的函数会以很短的间隔被调用两次。几乎所有的时间都在同一秒。为rand()函数生成相同的起始序列

答案 2 :(得分:0)

你不应该为每次调用播种随机数生成器,但只能播放一次。你对函数的两次调用可能执行得如此之快,以至于time(null)的值仍然相同,并且相同的种子将产生相同的伪随机序列。
(顺便说一句,你应该使用nullNULL,而不是0作为空指针,并且你不使用传递给randomnumbergen函数的参数,所以你可以完全删除它。)

相关问题