【发布时间】:2016-03-25 22:44:22
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void sep_gen(void);
int main()
{
srandom((unsigned)time(NULL));
printf("Random Numbers\n");
sep_gen();
sep_gen();
sep_gen();
return(0);
}
void sep_gen(void)
{
long int r;
int i;
for (i=0;i<10;i++)
putchar('-');
putchar('\n');
r=random();
printf("%ld\n",r);
}
上面的代码按预期生成了三个不同的整数。但是,当使用 sep_gen() 函数 srandom((unsigned)time(NULL)) 时,生成的整数三次都相同。 (代码如下)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void sep_gen(void);
int main()
{
printf("Random Numbers\n");
sep_gen();
sep_gen();
sep_gen();
return(0);
}
void sep_gen(void)
{
srandom((unsigned)time(NULL));
long int r;
int i;
for (i=0;i<10;i++)
putchar('-');
putchar('\n');
r=random();
printf("%ld\n",r);
}
我的问题是为什么 random() 函数在 srandom() 函数被放置在 main 函数中时会生成不同的数字,但在 sep_gen() 函数中却不这样做?
【问题讨论】:
-
srandom不是标准函数。 -
@Olaf:根据the man page,它是 POSIX.1-2001 的一部分。不知道为什么这很重要。
-
@ShadowRanger:见How to Ask 以及minimal reproducible example 是什么。有一个适当的标签,例如POSIX,否则应该在文本中。
-
@Olaf:哇,这太荒谬了。
srandom并不是一个非常晦涩难懂的函数,期望一个相对较新的用户能够完美地将其称为 POSIX 函数是愚蠢的。 -
@ShadowRanger:评论是为了澄清并要求在问题中添加相关信息。你知道这也被其他初学者读过,是吗?不能假设每个人都知道 POSIX 函数,并且很可能想知道
random和srandom实际做了什么。更重要的是,因为名称在随机数上下文中很明显。你说这样的澄清是很挑剔的。
标签: c random user-defined-functions random-seed