C中的rand()问题

时间:2009-07-27 21:20:52

标签: c gcc random

  

可能重复:
  why do i always get the same sequence of random numbers with rand() ?

到目前为止,这是我的文件:

#include <stdio.h>

int main(void) {
    int y;
    y = generateRandomNumber();
    printf("\nThe number is: %d\n", y);
    return 0;
}

int generateRandomNumber(void) {
    int x;
    x = rand();
    return x;
}

我的问题是rand()总是返回41.我在win上使用gcc ...不知道该怎么做。

编辑:使用时间生成随机数将无效。它为我提供了一个数字(12000),每次我调用它只是稍微高一点(大约每秒+3)。这不是我需要的随机性。我该怎么办?

6 个答案:

答案 0 :(得分:8)

你需要提供种子。

来自互联网 -

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

int main(void)
{
  int i, stime;
  long ltime;

  /* get the current calendar time */
  ltime = time(NULL);
  stime = (unsigned) ltime/2;
  srand(stime);

  for(i=0; i<10; i++) printf("%d ", rand());

  return 0;
}

答案 1 :(得分:8)

标准技巧是:

srand(time(0));  // Initialize random number generator.

注意:该功能为srand,而不是rand

main功能中执行此操作一次。之后,只需拨打rand即可获取号码。

根据实现情况,它还可以帮助获取和丢弃rand的一些结果,以允许序列偏离种子值。

答案 2 :(得分:4)

在致电srand(time(NULL));之前,请尝试拨打generateRandomNumber

正如其他人所说,您需要在应用程序启动时拨打srand()一次,而不是每次拨打rand()时都会。{/ p>

答案 3 :(得分:4)

这是因为rand()隐式seeded为1。

如果每次运行程序时都不需要相同的数字序列,则应在程序启动时设置种子(使用srand()),其值从一次运行更改为另一次运行。

时钟时间是一个受欢迎的选择,但请记住,这是可预测的,因此如果您希望您的数字序列不可预测,则可能是一个漏洞。

答案 4 :(得分:2)

有时编译器使用相同的随机种子来帮助调试更容易,这很好但是无法实现随机化的目的。有关于如何使用某些数据集为随机生成器设定种子的代码示例,通常是系统时间,但这就是为什么一遍又一遍地获得相同数字的原因。

答案 5 :(得分:1)

和以前一样,种子。经常是像time()或pid()

这样的东西