在C语言中使用2个不同的随机数

时间:2012-07-08 14:15:14

标签: c

  

可能重复:
  calling rand() returning non-random results

在我的工作室中,我需要使用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 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:3)

每次通话都不要srand(time(0));只调用一次。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

总是使用相同的种子初始化随机数生成器,因此您将获得相同的随机序列,无论如何它都是伪随机的。通常,您只想在开头调用一次srand来初始化生成器。

此外,您只有6种不同的可能结果,因此将两次相同的数字完全合法,有1/6的可能性。