我有以下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;
}
根据我的理解,每次执行程序时都会打印一个不同的随机数,因为随机种子取决于系统时间。
但是每次运行程序时,我都会得到完全相同的输出:
1804289383
当我将自定义值作为srand的参数时,我仍然得到相同的输出:
srand(1);
或者
srand(12345);
有没有人知道为什么会这样?也许是因为我的操作系统(Mac OS 10.10.3)?或者我使用的编译器(gcc)?
有简单的替代方案吗?
答案 0 :(得分:6)
C中的标准随机数生成器为rand()
,可以srand(seed)
播种。
有第二个随机数生成器random()
。该随机生成器可以使用函数srandom(seed)
播种。 (这两个生成器使用不同的状态,即使它们共享相同的实现。)
因此,只需选择正确的种子和RNG功能。
答案 1 :(得分:4)
嗯,这里的问题是由于多种方式使用标准库在C中制作随机数。
基本上,有两组函数可以生成一个随机数:
从rand(3)手册:
#include <stdlib.h>
int rand(void);
int rand_r(unsigned int *seedp);
void srand(unsigned int seed);
从随机(3)手册:
#include <stdlib.h>
long int random(void);
void srandom(unsigned int seed);
char *initstate(unsigned int seed, char *state, size_t n);
char *setstate(char *state);
你应该选择最适合你需要的那个。 我邀请您进一步阅读这些手册以获取更多信息; - )