您必须为随机数生成器播种.
see here for an example.
未seeded.c
#include
#include
int main ()
{
printf ("Random not seeded: %d\n", rand()%10);
return 0;
}
无种子输出
Random not seeded: 3
Random not seeded: 3
Random not seeded: 3
Random not seeded: 3
Random not seeded: 3
seeded.c
#include
#include
#include
int main ()
{
srand(time(NULL));
printf ("Random seeded: %d\n", rand()%10);
return 0;
}
种子输出
Random fast seeded: 7
Random fast seeded: 7
Random fast seeded: 7
Random fast seeded: 1
Random fast seeded: 1
Random fast seeded: 1
Random fast seeded: 5
Random fast seeded: 5
Random fast seeded: 5
Random fast seeded: 5
快速seeded.c
如果您希望能够每秒多次调用您的实用程序,则必须使用不同的源来为您播种,否则您仍会得到一些重复的随机数.
这是一个使用纳秒而不是time()的示例,它只返回秒.
#include
#include
#include
int main ()
{
struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
/* using nano-seconds instead of seconds */
srand((time_t)ts.tv_nsec);
printf ("Random fast seeded: %d\n", rand()%10);
return 0;
}
快速播种的输出
您可以在此处看到,这些数字的分组与前一个示例不同.
Random fast seeded: 9
Random fast seeded: 6
Random fast seeded: 5
Random fast seeded: 6
Random fast seeded: 1
Random fast seeded: 1
Random fast seeded: 9
Random fast seeded: 4
Random fast seeded: 3
Random fast seeded: 2
均匀分布的随机数
如果您对均匀分布的随机数感兴趣,请在下面看到user3003631的答案.如果你实际上正在使用C,那就是我建议做随机数的方法. More information here too on this.