有没有办法多次初始化srand?我有一个特定的函数来生成随机数,但每次我调用它都会给出相同的数字。有任何解决这个问题的方法吗?
int whoatk2() {
srand(time(NULL));
int a;
a = rand() % 50;
return a;
}
Run Code Online (Sandbox Code Playgroud)
除非你想要一个特定的序列,否则你应该调用srand 一次,并使用一个有效的任意值,如time(NULL). 这通常会在您的程序启动时完成。
如果你每次想要一个随机数时都调用它,你会冒着每次用相同的值初始化生成器的真正风险(如果你每秒调用它多次),因此每次都得到相同的“随机”值时间。
这是你应该做的事情:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
srand(time(NULL)); // do this once
for (int i = 0; i < 10; ++i) { // do this many times
printf("%d\n", rand());
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
示例输出如下所示,左列包含上面正确代码的输出,右列包含将srand调用移动到当前循环内部的结果(交换上面有注释的两行):
966271109 74846356
1059160369 74846356
1868029595 74846356
758240870 74846356
1795677958 74846356
806788680 74846356
1374271653 74846356
1658543317 74846356
1843517305 74846356
1568992484 74846356
Run Code Online (Sandbox Code Playgroud)