在c中生成1到10之间的随机数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在c中生成1到10之间的随机数相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
#include <stdlib.h>

int main()

{
    int randomnumber;
    randomnumber = rand() % 10;
    printf("%d
", randomnumber);
    return 0;
}

这是一个简单的程序,其中randomnumber是一个未初始化的int变量,意味着打印为1到10之间的随机数。但是,每当我反复运行时,它总是打印相同的数字。有人可以帮忙告诉我为什么会这样吗?谢谢。

答案

每次执行都需要不同的种子。

您可以在程序开头调用:

srand(time(NULL));

请注意,% 10产生的结果是从09,而不是从110:只需将1添加到你的%表达式中,就可以将1添加到10

另一答案

您需要从man 3 rand播种随机数生成器

如果未提供种子值,则rand()函数将自动播种,值为1。

srand()函数将其参数设置为rand()返回的新的伪随机整数序列的种子。通过使用相同的种子值调用srand(),可以重复这些序列。

EG

srand(time(NULL));
另一答案

在程序中生成单个随机数是有问题的。在重复调用从给定概率分布产生数字的意义上,随机数生成器仅是“随机的”。

播种RNG无济于事,特别是如果您只是从低分辨率计时器中播种它。你只需要获得时间哈希函数的数字,如果你经常调用程序,它们可能不会经常更改。你可以通过使用srand(time(NULL) + getpid())(Windows上的_getpid())来改进一点,但这仍然不是随机的。

在程序的多次调用中获取随机数的唯一方法是从程序外部获取它们。这意味着使用/dev/random(Linux)或CryptGenRandom()(Windows)等系统服务,或者使用random.org等服务。

另一答案

这是一个随机数生成器的源代码,使用来自该站点的c:http://www.random-number.com/random-number-c/。这里的实现更通用(获得3个参数的函数:min,max和要生成的随机数的数量)

#include <time.h>
#include <stdlib.h>
#include <stdio.h>

// the random function
void RandomNumberGenerator(const int nMin, const int nMax, const int  nNumOfNumsToGenerate)
{
  int nRandonNumber = 0;
  for (int i = 0; i < nNumOfNumsToGenerate; i++)
  {
    nRandonNumber = rand()%(nMax-nMin) + nMin;
    printf("%d ", nRandonNumber);
  }
  printf("
");
}

void main()
{
  srand(time(NULL));
  RandomNumberGenerator(1,70,5);
}
另一答案
srand(time(NULL));

int nRandonNumber = rand()%((nMax+1)-nMin) + nMin;
printf("%d
",nRandonNumber);

以上是关于在c中生成1到10之间的随机数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ruby 中生成 a 和 b 之间的随机数?

xml 在XSLT中生成1-10之间的随机数

xml 在XSLT中生成1-10之间的随机数

在Javascript中生成2个值到2个小数位之间的随机数

尝试在批处理文件中生成 65 到 67 之间的随机数

我想在批处理文件中生成一个介于 1 到 5 之间的数字 [重复]