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

int main()

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

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

4

5 回答 5

21

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

您可以在程序开始时开始调用:

srand(time(NULL));

请注意,从to而不是从to% 10产生结果:只需添加到您的表达式即可到达to 。091101%110

于 2013-07-24T22:58:52.410 回答
4
srand(time(NULL));

int nRandonNumber = rand()%((nMax+1)-nMin) + nMin;
printf("%d\n",nRandonNumber);
于 2018-03-04T19:43:06.300 回答
1

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

如果没有提供种子值,则 rand() 函数会自动使用值 1 播种。

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

例如

srand(time(NULL));
于 2013-07-24T23:01:41.587 回答
1

这是一个使用 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);
}
于 2017-03-28T11:38:11.160 回答
0

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

播种 RNG 将无济于事,特别是如果您只是从低分辨率计时器播种它。您只会得到作为时间哈希函数的数字,如果您经常调用该程序,它们可能不会经常更改。srand(time(NULL) + getpid())通过使用(在 Windows 上)您可能会有所改善_getpid(),但这仍然不是随机的。

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

于 2013-07-25T01:08:24.830 回答