【问题标题】:Randomizer Not working properly随机化器无法正常工作
【发布时间】:2014-10-22 00:35:38
【问题描述】:

我做了一个小随机发生器,但它不能正常工作。这是代码...

我有一个函数,

short rnd(short *num){
    return (rand() % max) + 1;
}

有一个原型

short rnd(short *num);

当我使用它时,我会做这样的事情:

max = 10;
num = rnd(&max);

编译器不会抛出任何问题,但它总是等于 0... 有什么建议吗?

【问题讨论】:

  • max 必须是要编译的代码的全局变量。你的意思是*num 而不是max?还有,如果你不给*num赋值,那你为什么把它作为指针传递呢?
  • 是的,对不起。它在包含的头文件中...
  • 同意 Jonathan 以及为什么要使用指针?
  • 呃!全局变量...在那个函数中?啊!啊!啊!不要那样做。如果你要忽略它,你到底为什么要传递num
  • 好的,解决了,谢谢!取出函数参数做到了,它现在生成一个随机数!谢谢@JonathanLeffler

标签: c random


【解决方案1】:

您的最大值似乎是一个全局变量。我建议将它作为参数传递给你的 rnd 函数,而不是让它成为全局的,如果它在运行时没有改变,只需为你的 max 创建一个宏并将其传递进去。

short rnd(unsigned short max)
{
  return (rand() % max) + 1;
}

【讨论】:

    【解决方案2】:

    为了得到一个真正的随机数,它需要被播种。播种它的最佳方法是使用标准库中的 srand() 来使用计算机的时间。

    #include <stdlib.h>
    #include <time.h>
    srand(time(NULL)); /*this in the main function*/
    
    short rndnum(short max)
    {
        return (short) (rand() % max) + 1;
    }
    

    这应该产生 1 到 10 之间的随机数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-08
      相关资源
      最近更新 更多