随机数字列表

时间:2016-07-25 18:58:19

标签: c++ c random codeblocks

#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:

交谈

4 个答案:

答案 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;
}