相对较新的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;
}
答案 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;
}
将height
和weight
移至一个类,该类将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 main
,for
周期比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;
}