【问题标题】:How to use random() in C [duplicate]如何在 C 中使用 random() [重复]
【发布时间】:2017-07-16 12:51:30
【问题描述】:

所以我目前正在学习 C,我对 random() 函数的工作原理有些困惑。 我知道我必须提供一个种子,但我不知道如何实际生成随机数。

srandom(seed);
long int value= random(40);

当我尝试这个时,它给了我一个编译器错误:

too many arguments to function ‘long int random()

最终目标是获得 1 到 40 之间的随机数。 我应该补充一点,目标是不使用rand() 函数。

【问题讨论】:

  • random 不带参数;你传递了值 40。
  • 请不要在每次致电rand() 之前放置srand()。在程序开始时调用它一次。我不知道你为什么重命名那些库函数。这些是什么?我们怎么知道他们在做什么?它们是非标准函数还是您自己的函数?
  • 阅读random() 的 POSIX 规范——它告诉你很多要做什么。其余的,请阅读Is this C implementation of Fisher-Yates shuffle correct?,了解如何生成 0..N 范围内的无偏随机数(对于 1..40,您将使用 0..39 范围内的随机数并加 1)。

标签: c random


【解决方案1】:

答案就在编译器抛出的错误中

函数‘long int random()的参数太多

将random(40)改为random()

【讨论】:

    【解决方案2】:

    random() 函数中没有参数。

    参见man random() 页面。 random() 的原型

    long int random(void);
    

    【讨论】:

      【解决方案3】:

      编译器准确地回答了您的问题。 您正在将 '40' 传递给它 应该接收的函数 random()

      random() 的签名是:

      long int random (void) 
      

      void 关键字在这里表示手头的函数不应该接收任何东西。

      这是一个生成 6 个随机数的示例程序。

      #include <stdio.h>
      #include <stdlib.h>
      
      int main()
      {
          int num;
          int max = 5; 
          for (int c = 0; c <= max; c++){
            num = random();
            printf("%d\n",num);         
         }
         return 0;
      }
      

      输出:

      fire-trail@Sahai-Yantra:~$ gcc try.c 
      fire-trail@Sahai-Yantra:~$ ./a.out
      1804289383
      846930886
      1681692777
      1714636915
      1957747793
      424238335
      

      要达到使用random() 在给定范围内生成随机数的最终目标,请参阅How to generate a random number from within a range

      【讨论】:

      • 到目前为止,一切顺利。现在他想生成一个 1..40 范围内的数字;你是怎么做到的?
      • 已经在这里回答了,stackoverflow.com/questions/2509679/…
      • 好的;因此,请更新您的答案以引用该问题,或包含信息大纲和对其来源的交叉引用。
      • @JonathanLeffler 可以吗?或者我应该加点什么?新手在这里。
      • 我建议使用链接的标题,而不是无意义的“关注此链接”。后者看起来像垃圾邮件,尽管它不是。我已经按照我的建议进行了更新。我可能会避免将粗体用于“最终目标”,并且可能会在 random() 周围使用反引号,以便它以等宽字体显示,但这些是二阶改进。
      猜你喜欢
      • 2021-03-02
      • 2021-11-28
      • 1970-01-01
      • 2020-01-02
      • 2011-02-04
      • 2016-03-11
      • 2013-07-06
      • 2012-01-31
      • 1970-01-01
      相关资源
      最近更新 更多