【发布时间】:2015-01-12 14:04:25
【问题描述】:
好吧,我开始失去理智了。我想做的只是随机一个 0 到 410 之间的数字,根据this 页面,我的代码应该这样做。而且由于我想要一个随机数而不是伪随机数,所以我也在使用 srand() ,例如this 线程告诉我这样做。但这行不通。我得到的只是一个数字,取决于我上次执行以来的时间。如果我例如尽可能快地再次执行它,该数字通常比最后一个数字高 6 个数字,如果我等待更长的时间,它会更高,等等。当它达到 410 时,它会回到 0 并重新开始。我错过了什么?
编辑:哦,如果我删除 srand(time(NULL)); 行,我每次运行程序时都会得到相同的数字 (41)。这甚至不是伪随机数,这只是一个静态数字。只是从the article I linked to above 复制第一行代码仍然给我41 号。我是《23 号》续集中的明星,还是我错过了什么?
int main(void) {
srand(time(NULL));
int number = rand() % 410;
std::cout << number << std::endl;
system("pause");
}
【问题讨论】:
-
want a random number and not a pseudo-random number- 不,srand 只保证返回不同的值。序列仍然是伪随机的 -
你已经被 Lavavejed 了!请参阅:channel9.msdn.com/Events/GoingNative/2013/… -- 具体来说,您的确切问题将在 3:30 分钟讨论。
-
“随机数而不是伪随机数”是什么意思?如果您只是想要一个与种子没有明显关联的数字,那么在使用它的值之前调用
rand()一次或多次;听起来您对rand的实现相当差,它将种子作为第一个值返回。如果您真的需要一个“真正的”随机数,那么您无法仅从软件中获得它。std::random_device可以给你,但前提是有合适的硬件设备供它使用。