我想更好地使用和理解函数,在这种情况下我需要弄清楚如何使这个函数特别返回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;
}
正如你所看到的,我设置了输出随机数的功能并将其写在屏幕上,然后我再次调用相同的功能并在屏幕上写下一个(在屏幕上写下第二个#)。每次我调用功能这两个数字都写在屏幕上,即使我每次都生成一个随机数。
我知道这是一项简单易行的任务,但请告诉我是否可以尝试做的事情,或者我是否需要为第二个号码另外设置另一项功能。
我的最终目标是将大量事件和事物基于一个随机数函数,因此我基本上可以将函数调用为随机数,然后让它确定接下来会发生什么。
我按照你的要求放入了代码。我希望这就是你的意思。我很感激所有的帮助,非常感谢你的答案。我打算更多地使用它,所以我一定会把它弄好。你们!
答案 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)
的值仍然相同,并且相同的种子将产生相同的伪随机序列。
(顺便说一句,你应该使用null
或NULL
,而不是0
作为空指针,并且你不使用传递给randomnumbergen
函数的参数,所以你可以完全删除它。)