rand()函数尽管随时间播种,但始终生成相同的数字

时间:2019-04-24 05:55:20

标签: c macos

我需要编写此代码,并创建了此函数。与它对代码的作用无关,我需要它在a和(0)之间生成一个随机数(i),这是一个具有先前初始化值的整数。不知何故,尽管播种了,我总是得到相同的数字。

我尝试输入数字而不是i,并且每次执行时都给我一个不同的随机数,因此它可以正常工作。我还尝试过在函数中声明一个新的int变量,并为其赋予i的值,但仍然无法正常工作。

elementptr position_current(elementptr first, int i){
  elementptr current = first;
  int j = 1;

  printf("%d\n", i);
  srand(time(NULL));

  int a = rand() % i;
  printf("%d\n",a);
  for(j=1;j<a;j++){
    current = current->next;
  }

  return current;
}

我希望(a)每次运行代码时都会获得不同的值,但是它总是获得相同的值(2)。
有人可以告诉我什么地方可能出问题吗?

1 个答案:

答案 0 :(得分:2)

我猜想您在一秒钟内多次调用此函数。由于time每秒仅更改一次,因此您一遍又一遍地重新播种相同的值。

请勿一遍又一遍地致电srand。在您的main函数中只调用一次,然后再也不会调用它,并且rand将基于该种子一次生成连续的值。