从功能到功能获取随机数

时间:2011-12-22 01:23:26

标签: c++ visual-c++

相对较新的C ++,这已经困扰了我一段时间。我试图编写一个程序,根据生成的随机数做不同的事情。

为了解释我想要做的事情,我们假装我创建了一个运动员名单,并开始在一定范围内随机生成他们的高度。容易没问题。说然后我想根据他们的身高来产生他们的体重。这是事情变得混乱的地方。出于某种原因,我无法弄清楚,程序是根据与首先返回的高度不同的高度随机生成权重。我只是不明白。

无论如何,这里有一段(非常简化的)示例代码,希望能够展示我尝试做的事情。我确定我错过了一些明显的东西,但我似乎无法弄明白。

#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <time.h>
using namespace std;

int random(int min, int max, int base)
{
    int random = (rand() % (max - min) + base);

    return random;
}

int height()
{
    int height = random(1, 24, 60);

    return height;
}

int weight()
{
    int weight = height() * 2.77;

    return weight;
}

void main()
{
    srand ((unsigned int)time(0));

    int n = 1;

    while (n <= 10)
        { 
        cout << height() << " and " << weight() << endl;
        ++n;
        }

    return;
}

2 个答案:

答案 0 :(得分:5)

weight再次调用height ,它显然会生成一个不同的数字(这是RNG的重点:))。

要获得您想要的效果,您可以:

  • 更改weight以接受height作为参数;然后,在main中,在每次迭代时将height返回的值保存在临时变量中并将其传递给高度以获得相应的高度;

    int weight(int height)
    {
        return height*2.77;
    }
    
    // ... inside the main ...
    while (n <= 10)
    { 
        int curHeight=height();
        cout << curHeight << " and " << weight(curHeight) << endl;
        ++n;
    }
    
  • heightweight移至一个类,该类将height存储为私有字段,添加nextPerson成员,将内部字段更新为一个新的随机值。

    class RandomPersonGenerator
    {
        int curHeight;
    public:
        RandomPersonGenerator()
        {
            nextPerson();
        }
    
        int height() { return curHeight; }
        int weight() { return height()*2.77; }
    
        void nextPerson()
        {
            curHeight=random(1, 24, 60);
        }
    };
    
    // ... inside the main ...
    RandomPersonGenerator rpg;
    while (n <= 10)
    { 
        rpg.nextPerson();
        cout << rpg.height() << " and " << rpg.weight() << endl;
        ++n;
    }
    

(顺便说一下,它是int main,而不是void mainfor周期比while更适合这种情况)

答案 1 :(得分:3)

这很容易。您在height()功能中致电weight()。这意味着您将获得height的新随机值。您需要做的是修改weight()以便它可以通过高度参数并根据它计算权重(而不是根据新的随机值)。

您的新height()功能如下所示:

int weight(int height)
{
    int weight = height * 2.77;

    return weight;
}

main()

while (n <= 10)
{
    int h = height();
    int w = weight(h);

    cout << h << " and " << w << endl;
    ++n;
}