我正在使用C ++进行分配,其中有一部分我需要在0到2之间生成一个随机数。我知道生成这个数字的代码是
int randomNumber = rand() % 3;
当我在循环中运行它时,它总是生成随机数。然而,当我独立运行它时总是2.我运行一个程序30次,而不是循环,随机化不是随机的。例如
int randomNumber = rand() % 3;
int randomNumber1 = rand() % 3;
int randomNumber2 = rand() % 3;
int randomNumber3 = rand() % 3;
int randomNumber4 = rand() % 3;
int randomNumber5 = rand() % 3;
cout << randomNumber << endl << randomNumber1 << endl << randomNumber2 << endl << randomNumber3 << endl << randomNumber4 << endl << randomNumber5 << endl;
这将始终输出2,2,1,1,2,1
为什么这不是随机的,我如何让它随机?
如果重要,我正在使用Visual Studio 2015。
答案 0 :(得分:1)
伪随机数生成器不会生成真正的随机数,而是一系列看似随机的数字。您rand()
的实现似乎使用伪随机生成器。你必须播种它以生成另一个序列。
请考虑使用std::random_device
。大多数平台都支持非确定性随机源,因此大多数情况下你都会安全。
答案 1 :(得分:0)
添加
#include <ctime>
在代码的前面,在代码的开头(srand((unsigned int)time(NULL));
之后)调用int main(){
。
这将使您的代码生成不同的序列,除非您在1秒内再次执行代码。