【问题标题】:srand(time(NULL)) function [duplicate]srand(时间(NULL))函数
【发布时间】:2018-10-14 09:42:52
【问题描述】:
#include <stdio.h>
#include <stdlib.h>

int main( void){

    int x = rand()%100;
    printf("%d\n", x);
    return 0;
}

上面的代码正确生成了一个随机数。它是否正确?但是,其他来源总是包括 library 和 srand(time(NULL))。为什么我们必须包含 include library 和 srand(time(NULL))?有什么理由加入吗?

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

int main( void){
    srand(time(NULL));
    int x = rand()%100;
    printf("%d\n", x);
    return 0;
}

【问题讨论】:

  • 在第一种情况下,每次运行程序时它总是相同的随机数。第二种情况“播种”了 RNG。

标签: c random srand time.h


【解决方案1】:

因为如果你多次运行这段代码,你会得到相同的结果! (另外,rand() 在每次运行中返回相同的结果)。因此,您可以在代码的每次运行中初始化随机种子,以通过srand 获得不同的随机结果。使用time(NULL) 通过srand 设置不同的随机种子。

【讨论】:

    【解决方案2】:

    srand 是一个随机数生成器函数,它将随机化由rand 函数生成的数字。

    【讨论】:

    • 为什么投反对票?
    【解决方案3】:

    想象一下,您有一个(巨大的)图书馆,里面有(巨大的)书籍,里面装满了(显然是随机的,但固定的)数字。

    当您执行rand() 时,您将获得当前书籍上的当前号码并前进到下一本书。

    当您选择srand(&lt;number&gt;) 时,您选择了rand() 将从该点开始使用的书。

    time(NULL) 返回自 1970-01-01 午夜以来的秒数(转换后)。该数字每秒都在变化,因此使用该数字“选择一本书”几乎可以保证每次程序运行时都有一个新的“随机”数字序列。

    如果您不选择书籍,rand() 函数会从书籍 #1 中获取数字(与 srand(1) 相同)。

    在某些情况下,固定随机数可能很有用。例如,您想用相同的数据测试不同的函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-02
      • 1970-01-01
      • 2016-07-13
      • 1970-01-01
      • 2014-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多