while循环中的随机数[C编程] [重复]
Posted
技术标签:
【中文标题】while循环中的随机数[C编程] [重复]【英文标题】:random number in while loop [C programming] [duplicate] 【发布时间】:2014-11-30 00:56:25 【问题描述】:我试图在每次循环发生时创建 2 个随机数(介于 0-4 和 0-10 之间),但它总是给出相同的数字。 如果我多次运行该程序,它会给出不同的数字,但 while 循环总是生成相同的 2 个数字。 谢谢。
int random(int range)
int num;
srand(time(NULL));
num = rand() % range;
return num;
int main()
int cnt = 0;
int i;
int j;
while (cnt <= 20)
i = random(5);
j = random(10);
printf("%d\n",i);
printf("%d\n",j);
printf("\n");
cnt += 1;
return 0;
【问题讨论】:
在 main 中调用 srand 一次(并且仅一次)。搜索一下,这个问题每周都会出现。 如果您在同一毫秒内调用srand(
),您将获得相同的输出,它根本不会是随机的。是的,计算机将在一毫秒内处理两个srand()
,因此答案将是相同的。 srand()
用于使随机化器在外人面前随机运行。你不必像人们说的那样只使用一次srand()
,如果你想让公众更难以预测结果,你可以每分钟都使用它。
谁对这个问题投了赞成票,为什么?
请注意,在大多数实现中,rand() 是一个质量很差的伪随机数生成器。它在相当短的时间内重复。如果随机数的质量很重要,请考虑寻找更好的生成器。如果您使用的是 Linux,/dev/urandom 是一个很好的选择。
另一个质量点是rand()%range
表达式不能可靠地提供均匀分布,尤其是当range
相对于rand()
的最大值较大时。
【参考方案1】:
您只需为随机数生成器播种一次。
所以在你的随机函数之外运行这一行:
srand(time(NULL));
.. 在你的主要功能中:
int random(int range)
int num;
num = rand() % range;
return num;
int main()
int cnt = 0;
int i;
int j;
// Seed random number generator
srand(time(NULL));
while (cnt <= 20)
i = random(5);
j = random(10);
printf("%d\n",i);
printf("%d\n",j);
printf("\n");
cnt += 1;
return 0;
【讨论】:
成功了!感谢您的帮助。【参考方案2】:您只需为随机函数播种一次。包含time.h库并使用
#include<time.h>
.....
srand(time(NULL));
【讨论】:
以上是关于while循环中的随机数[C编程] [重复]的主要内容,如果未能解决你的问题,请参考以下文章
带有双条件和 || 的 While 循环Swift 中的逻辑运算符