我试图生成随机数(1到6),但是每次运行程序时,我总是得到相同的两个数。这是代码:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
// function prototype
int random();
// main function
int main()
{
int rand1=random();
int rand2=random();
cout << rand1 << endl;
cout << rand2 << endl;
cin.get();
return 0;
}
//function definition
int random()
{
const int MAX_NUMBER = 6;
const int MIN_NUMBER = 1;
unsigned seed=time(0);
srand(seed);
int randomNumber;
randomNumber=(rand() % (MAX_NUMBER - MIN_NUMBER + 1)) + MIN_NUMBER;
return randomNumber;
}
我不确定是什么问题,为什么我总是得到相同的两个随机数。
答案 0 :(得分:2)
注意:
rand()
返回一个随机正整数,范围为0
至32,767
。可以将此功能视为使用32,767
个面滚动模具。
数字是由数学算法生成的,该数学算法在给定起始数字(称为"seed"
)时始终会生成相同的数字序列。由于每次种子保持相同时都会生成相同的序列,因此rand()
函数会生成伪随机序列。
要防止每次生成相同的序列,请使用
srand(x)
来更改seed
的值。
示例程序:
/*generate 10 random numbers between 1 and 6 inclusive, without repetition of the sequence between program runs*/
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
// to prevent sequence repetition between runs
srand(time(NULL));
for(int i = 1; i <=10; i++) // looping to print 10 numbers
{
cout<< 1 + rand( ) % 6; // formula for numbers
}
return 0;
}