在我的工作室中,我需要使用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个不同的随机数?
答案 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的可能性。