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

nwo49xxi  于 2023-02-03  发布在  其他
关注(0)|答案(6)|浏览(255)
#include <stdio.h>
#include <stdlib.h>

int main()

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

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

zujrkrfu

zujrkrfu1#

每次执行都需要不同的种子。
您可以在程序开始时调用:

srand(time(NULL));

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

9cbw7uwe

9cbw7uwe2#

srand(time(NULL));

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

4si2a6ki3#

这里是一个准备运行的源代码随机数生成器使用c取自这个网站:http://www.random-number.com/random-number-c/。这里的实现更为通用(一个函数,获取3个参数:最小值、最大值和要生成的随机数的数量)

#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);
}
yc0p9oo0

yc0p9oo04#

您需要从man 3 rand为随机数生成器设定种子
如果未提供种子值,则兰德()函数将自动以值1作为种子。
以及
srand()函数将其参数设置为rand()返回的一个新的伪随机整数序列的种子,通过使用相同的种子值调用srand()可以重复这些序列。
例如:

srand(time(NULL));
eoigrqb6

eoigrqb65#

在程序中生成单个随机数是有问题的。随机数生成器只是在重复调用从给定的概率分布产生数字的意义上才是“随机的”。
播种RNG不会有帮助,特别是如果你只是从低分辨率计时器播种它。你只会得到时间的哈希函数,如果你经常调用程序,它们可能不会经常改变。你可能会通过使用srand(time(NULL) + getpid())(Windows上的_getpid())来改进一点,但这仍然不是随机的。
要在多次调用程序时获得随机数,唯一的方法是从程序外部获取,这意味着使用/dev/random(Linux)或CryptGenRandom()(Windows)等系统服务,或者从random.org等服务获取。

bzzcjhmw

bzzcjhmw6#

C语言中一个更优雅的函数:

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

int random_number(int min, int max) {
    srand(time(NULL));
    return (rand() % (max - min + 1)) + min;
}

相关问题