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

问题描述 投票:12回答:5
#include <stdio.h>
#include <stdlib.h>

int main()

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

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

c random
5个回答
14
投票

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

您可以在程序开头调用:

srand(time(NULL));

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


1
投票

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

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

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

EG

srand(time(NULL));

0
投票

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

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

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


0
投票

这是一个随机数生成器的源代码,使用来自该站点的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("\n");
}

void main()
{
  srand(time(NULL));
  RandomNumberGenerator(1,70,5);
}

0
投票
srand(time(NULL));

int nRandonNumber = rand()%((nMax+1)-nMin) + nMin;
printf("%d\n",nRandonNumber);
© www.soinside.com 2019 - 2024. All rights reserved.