1

可能重复:
调用 rand() 返回非随机结果

在我的工作室中,我需要获取 2 个不同的随机数,但我得到了 2 个相同的随机数。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int random1_6(){
 int k;
 srand(time(0));
 k=((rand()%6)+1);
 return k;
}
int main(void){
 int a,b;
    a=random1_6();
    printf("%d.\n",a);
    b=random1_6();
    printf("%d.\n",b);
return 0;
}

如何获得2个不同的随机数?

4

4 回答 4

5

非加密随机数生成器 (RNG) 不是真正随机的,而是基于种子生成类似随机的数字。

你所做的是用相同的种子初始化 RNG 两次,所以你会得到相同的结果。只给 RNG 播种一次,例如在程序启动时,您将获得类似随机的不同结果。

编辑:如下代码应该可以工作:

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

int random1_6(){
  return ((rand() % 6) + 1);
}

int main(void){
  int a,b;
  srand(time(NULL));

  a = random1_6();
  printf("%d.\n",a);

  b=random1_6();
  printf("%d.\n",b);

  return 0;
}
于 2012-07-08T14:18:54.543 回答
3

不要srand(time(0));在每次通话时都这样做。只调用一次。

于 2012-07-08T14:18:14.733 回答
1

srand()您必须仅使用一次初始化随机数生成器种子:每次调用时,您都使用相同的种子重新初始化 RNG,因为很可能两个后续调用time(0)将返回相同的时间戳(秒级精度),因此rand() 将返回相同的数字两次。

如果您srand()在程序开始时(在main()入口点)只调用一次,那么每次调用 rand() 都会返回一个不同的数字。

于 2012-07-08T14:18:18.167 回答
0

你总是用相同的种子初始化随机数生成器,所以你会得到相同的随机序列,反正它是伪随机的。通常,您只想在开始时调用 srand 一次来初始化生成器。

Also, you only have 6 different possible outcomes, so it is perfectly legitimate to get same number twice, there is 1/6 chance for that.

于 2012-07-08T14:20:37.650 回答