【问题标题】:How to use function srand() with time.h? [duplicate]如何将函数 srand() 与 time.h 一起使用? [复制]
【发布时间】:2013-05-10 06:32:07
【问题描述】:

我的程序包含的代码应该在我每次执行时生成一个随机正整数。它生成随机数,但只生成一次。之后,当我执行相同的代码时,它给了我相同的值,这使我的代码无用。

我从 rand 函数开始,然后将 srand() 函数与 time.h 头文件一起使用,但仍然它不能正常工作。

#define size 10
for(i=0;i<size;i++)
    Arr[i] = rand()%size;

第一次调用(随机):

6 0 2 0 6 7 5 5 8 6

第二次调用(随机但与之前相同):

6 0 2 0 6 7 5 5 8 6

后来我访问了 Stack Overflow 问题并阅读了有关 srand() 函数的信息,并将其用作:

#include<time.h>
for(i=0;i<size;i++)
    Arr[i] = srand(time(NULL));

第一次通话:

-10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327

第二次通话:

-10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326

它给了我不同的(但不是随机值)。我已将 Arr[i] 定义为 unsigned int,但仍然得到负值。

【问题讨论】:

  • 你种下种子了吗?使用时间函数设置种子。
  • 您只需调用一次srand 即可为rand 生成器播种。不要每次都拨打srand来获取您的号码
  • 您可能应该阅读manpage,它解释了这些功能的工作原理,并提供了一个工作示例。
  • @Magn3s1um 我不知道你在说什么
  • 您将种子设置为当前时间:srand(time(null))。然后你打电话给兰特。这样你每次都会得到一个独特的种子。种子改变了随机算法。你现在明白了吗?

标签: c random srand


【解决方案1】:

你需要调用srand()一次,随机化种子,然后在你的循环中调用rand()

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

#define size 10

srand(time(NULL)); // randomize seed

for(i=0;i<size;i++)
    Arr[i] = rand()%size;

【讨论】:

  • srand() 将无符号整数作为输入,因此 time(NULL) 应该重铸。
【解决方案2】:

尝试在 rand() 之前调用 randomize() 来初始化随机生成器。

(看:srand() — why call it only once?

【讨论】:

  • 请把代码写给我,如果你把它写出来会很有帮助
  • randomize 不是标准函数 - 也许您的意思是 srand
  • Paul R,是的,我的意思是“stdlib.h”中的 srand()。感谢您添加评论。我的错。
  • cplusplus.com/reference/cstdlib/srand 有一个例子,其中 srand 被多次调用。
  • 这个例子是为了说明不调用srand()与调用srand(1)的效果是一样的。不过,它应该更清楚。
【解决方案3】:

如果您选择srand,最好在使用前至少调用一次rand(),因为它是一种可怕的原始伪随机生成器。请参阅堆栈溢出问题Why does rand() % 7 always return 0?

srand(time(NULL));
rand();
//Now use rand()

如果可用,randomarc4rand 会更好。

【讨论】:

    【解决方案4】:
    #include"stdio.h"
    #include"conio.h"
    #include"time.h"
    
    void main()
    {
      time_t t;
      int i;
      srand(time(&t));
    
      for(i=1;i<=10;i++)
        printf("%c\t",rand()%10);
      getch();
    }
    

    【讨论】:

      【解决方案5】:
      #include"stdio.h"//rmv coding for randam number access
      
      #include"conio.h"
      
      #include"time.h"
      
      void main()
      {
          time_t t;
          int rmvivek;
      
          srand(time(&t));
          rmvivek=1;
      
          while(rmvivek<=5)
          {
              printf("%c\t",rand()%10);
              rmvivek++;
          }
          getch();
      }
      

      【讨论】:

      • 本方法加解密程序用到的子部分
      猜你喜欢
      • 2019-10-10
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      相关资源
      最近更新 更多