C - 有什么方法可以多次初始化 srand?

joj*_*ass -2 c random

有没有办法多次初始化srand?我有一个特定的函数来生成随机数,但每次我调用它都会给出相同的数字。有任何解决这个问题的方法吗?

int whoatk2() {
    srand(time(NULL));
    int a;
    a = rand() % 50;
    return a;
}
Run Code Online (Sandbox Code Playgroud)

pax*_*blo 5

除非你想要一个特定的序列,否则你应该调用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)