C:srand不影响随机数生成器

Raf*_*ger 3 c random macos srand

我有以下c代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char *argv[]) {
  srand(time(NULL));
  printf("%d\n", (int)random());
  return 0;  
}
Run Code Online (Sandbox Code Playgroud)

根据我的理解,每次执行程序时都应该打印一个不同的随机数,因为随机种子取决于系统时间.

但每次运行程序时,我都得到完全相同的输出:

1804289383
Run Code Online (Sandbox Code Playgroud)

当我将自定义值作为srand的参数时,我仍然得到相同的输出:

srand(1);
Run Code Online (Sandbox Code Playgroud)

要么

srand(12345);
Run Code Online (Sandbox Code Playgroud)

有没有人知道为什么会这样?也许是因为我的操作系统(Mac OS 10.10.3)?还是我用的编译器(gcc)?

有简单的替代方案吗?

M O*_*ehm 6

C中的标准随机数发生器rand(),可以播种srand(seed).

还有第二个随机数发生器random().这个随机发生器可以用该函数播种srandom(seed).(这两个生成器使用不同的状态,即使它们共享相同的实现.)

因此,只需选择正确的种子和RNG功能.