#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <math.h>
int main()
{
int i;
int diceRoll;
for(i=0; i < 20; i++)
{
printf("%d \n", rand());
}
return 0;
}
这是我在c(codeblocks)中编写的用于获取随机数的代码,问题是我总是得到相同的序列:41,18467,6334,26500
等...
我还在学习,所以请尝试解释,就像你正在和一个8岁的D:
交谈答案 0 :(得分:5)
每次都会得到相同的序列,因为未设置随机数生成器的种子。您需要像这样致电srand(time(NULL))
:
int main()
{
srand(time(NULL));
....
答案 1 :(得分:1)
随机数生成器是伪随机数。这意味着他们使用了一些&#34;算法&#34;提出下一个&#34;随机&#34;数。换句话说,如果从该算法开始使用相同的种子,则每次都会得到相同的随机数序列。要解决此问题,您必须确保为随机数生成器播种。有时,最好使用相同的种子,以便您可以推断出程序的逻辑是否正常工作。无论哪种方式,人们播放程序的一种常见方式是使用时间(NULL)。 time给出了自纪元时间以来经过的时间(以秒为单位)。这意味着这个功能每秒都会改变。因此,如果您在程序开头使用(srand(time(NULL))对随机数生成器进行种子处理,则每运行一次程序时,您将获得一个不同的随机数序列。请确保不要播种对于您请求的每个随机数。只需在代码的最开头执行一次,然后不管它。
你的标题是C#,但我已经用C ++回答了。你想要为此包含ctime。查看随机数生成的新风格也可能是有益的,因为rand()现在不是随机的。查看#include random并让自己成为一个引擎和分布来随机抽取数字。不要忘记在那里播种!
答案 2 :(得分:-1)
首先,通过加入<ctime>
并调用srand(time(NULL));
来播种随机函数。
其次,如果您要调用rand(),则需要一个模数,例如:rand()%x将返回一个从0到x-1的随机数。由于您正在模拟掷骰子,请执行rand() % 6 + 1
。
答案 3 :(得分:-1)
第srand((unsigned)(time(NULL))
行必须在循环之外,在代码中只需要一行。
模rand()%10
表示从0
开始,以-1
为模,得到任何数字。因此,在这种情况下0-9
,如果您需要1-10
,请执行以下操作:rand()%10 + 1
int main()
{
int i;
int diceRoll;
srand((unsigned)(time(NULL));
for(i=0; i < 20; i++)
{
printf("%d \n", rand() % 10); //Gets you numbers 0-9
}
return 0;
}