【发布时间】:2013-09-22 21:54:49
【问题描述】:
我已经为此撞了半个小时,不知道出了什么问题。 我正在尝试生成 10 个随机数 1-100 的列表。但是当我运行它时,它们都会出现相同的数字。这是非常令人沮丧的!我以为是因为这个数字仍然存储在RAM中,但是将随机数和变量重新随机化3次后,它仍然是相同的数字。我做错了什么?
代码:
main() {
int i;
int randnum;
srand(time(NULL));
randnum = rand() % 2;
for (i = 0; i < 10; i++) {
srand(time(NULL));
randnum = rand() % 100 + 1;
srand(time(NULL));
rand();
list[i] = randnum;
srand(time(NULL));
randnum = rand() % 100 + 1;
srand(time(NULL));
rand();
}
srand(time(NULL));
randnum = rand() % 100 + 1;
}
【问题讨论】:
-
另外,如果你真的想使用 rand,不要每次都调用 srand,它会重置序列,这意味着你总是会得到第一个数字。
-
@chris:
rand()不是问题,在循环中调用srand()并使用分辨率为seconds的种子是问题所在。 -
rand()可以代替它。您并不总是需要高质量的 PRNG。称其为“有害”是一种误导性的夸张。 -
@chris:Microsoft CRT 中的
rand实现有点可耻,RAND_MAX 只有 32767。