#include <stdio.h>
#include <stdlib.h>
int main()
{
int randomnumber;
randomnumber = rand() % 10;
printf("%d\n", randomnumber);
return 0;
}
这是一个简单的程序,其中randomnumber是一个未初始化的int变量,它被打印成一个1到10之间的随机数,然而,每当我反复运行时,它总是打印出相同的数字,有人能帮我一下,告诉我为什么会这样吗?谢谢。
6条答案
按热度按时间zujrkrfu1#
每次执行都需要不同的种子。
您可以在程序开始时调用:
请注意,
% 10
产生的结果是从0
到9
,而不是从1
到10
:只需将1
添加到%
表达式中,即可将1
转换为10
。9cbw7uwe2#
4si2a6ki3#
这里是一个准备运行的源代码随机数生成器使用c取自这个网站:http://www.random-number.com/random-number-c/。这里的实现更为通用(一个函数,获取3个参数:最小值、最大值和要生成的随机数的数量)
yc0p9oo04#
您需要从
man 3 rand
为随机数生成器设定种子如果未提供种子值,则兰德()函数将自动以值1作为种子。
以及
srand()函数将其参数设置为rand()返回的一个新的伪随机整数序列的种子,通过使用相同的种子值调用srand()可以重复这些序列。
例如:
eoigrqb65#
在程序中生成单个随机数是有问题的。随机数生成器只是在重复调用从给定的概率分布产生数字的意义上才是“随机的”。
播种RNG不会有帮助,特别是如果你只是从低分辨率计时器播种它。你只会得到时间的哈希函数,如果你经常调用程序,它们可能不会经常改变。你可能会通过使用
srand(time(NULL) + getpid())
(Windows上的_getpid()
)来改进一点,但这仍然不是随机的。要在多次调用程序时获得随机数,唯一的方法是从程序外部获取,这意味着使用
/dev/random
(Linux)或CryptGenRandom()
(Windows)等系统服务,或者从random.org
等服务获取。bzzcjhmw6#
C语言中一个更优雅的函数: