#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = rand()% 36;
int b = rand() % 36;
int c = rand() % 36;
int d = rand() % 36;
printf("1 = %d\n" , a);
printf("2 = %d\n" , b);
printf("3 = %d\n" , c);
printf("4 = %d\n" , d);
return 0;
}
我正在尝试编写一个可以显示从1到36的随机数的程序。上面的程序只显示1到36之间的随机数。当我第二次运行程序时,随机数保持不变。每次运行程序时,是否有缺少随机nubmer的东西?
答案 0 :(得分:1)
您需要使用srand()
为随机数生成器播种。否则,1
被认为是种子。
srand()
手册页:
如果未提供种子值,则自动执行rand()函数 种子值为1。
这意味着每次运行程序时,都会使用相同的种子(1),这样您就可以获得相同的数字序列。
通常,srand((unsigned int)time(NULL));
用于播种。但是如果你足够快地运行你的程序(即如果time(NULL)
返回相同的值),那么即使这样,你也可能获得相同的数字序列。
答案 1 :(得分:0)
您想要的是srand
和time
:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(NULL));
int a = rand()% 36;
int b = rand() % 36;
int c = rand() % 36;
int d = rand() % 36;
printf("1 = %d\n" , a);
printf("2 = %d\n" , b);
printf("3 = %d\n" , c);
printf("4 = %d\n" , d);
return 0;
}
答案 2 :(得分:0)
main
放入
srand(time(NULL));
初始化随机数生成器。
您还需要#include for time
答案 3 :(得分:0)
这是种子问题。随机数生成器在生成随机数时具有模式,因此需要在使用前进行“播种”。对于与安全无关的用途,rand()
很好,可以使用time(null)
播种。例如:
srand ( time(NULL) );
int a = rand()% 36;
int b = rand() % 36;
int c = rand() % 36;
int d = rand() % 36;
printf("1 = %d\n" , a);
printf("2 = %d\n" , b);
printf("3 = %d\n" , c);
printf("4 = %d\n" , d);
编辑:另外,要获得1到36之间的数字,您应该说:(rand() % 36) + 1;
。 rand()
生成介于0到 RAND_MAX 之间,因此如果您只修改36,则可能会返回零,这显然不在1到36的范围内。
答案 4 :(得分:0)
您必须使用rand
播种srand
。您还有代码将显示0到35之间的随机数,而不是1到36.这是因为%
返回操作的其余部分,它将始终在0和除数之间 - 1.因此,您的代码应该是:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(NULL));
int a = 1 + rand() % 36;
int b = 1 + rand() % 36;
int c = 1 + rand() % 36;
int d = 1 + rand() % 36;
printf("1 = %d\n", a);
printf("2 = %d\n", b);
printf("3 = %d\n", c);
printf("4 = %d\n", d);
return 0;
}