【发布时间】:2015-10-15 00:00:03
【问题描述】:
我正在用 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。
【问题讨论】:
-
1)
rand()需要使用srand(seed)播种 2)rand()很烂,你应该永远不要使用它。请改用C++'s RNGs from the<random>header。 -
随机数有什么用?
-
你需要使用
srand()播种,这已经被介绍过无数次了。现在您知道了,忘记rand()并开始使用<random>中定义的类型;具体来说,看看mt19937和uniform_int_distribution -
重复。已经被问了 100 次。 rand() 是伪 rand,需要播种。投票结束。
-
rand()对于大多数非科学和非加密目的而言,快速、简单且完全可以。 (这更像是“%是如何工作的”练习,而不是“如何生成好的随机数”练习。)