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循环对C++中字符串中的每个单词重复

在C中的while循环或for循环之后没有代码执行[重复]

带有双条件和 || 的 While 循环Swift 中的逻辑运算符

Linux C 编程学习第四天_循环语句_while_do/while_for_goto

C语言编程从入门到实践 第一章:初识C循环

是否有任何函数可以将c ++编程中的流转移到while循环或while循环中?