使随机数在函数之间保持不变 C++相对较新,这已经困扰了我一段时间。我正试图写一个程序,根据生成的随机数做不同的事情
为了简单地解释我要做的事情,让我们假设我正在创建一个运动员列表,然后从随机生成他们在某个范围内的身高开始。容易做,没问题。那么我想根据他们的身高来计算他们的体重。这就是事情变得一团糟的地方。出于某种原因,我无法理解,该程序是根据不同的高度随机生成重量,而不是它首先返回的高度。我就是不明白 无论如何,这里有一段(非常简化的)示例代码,希望能说明我正在尝试做什么。我肯定我错过了一些明显的东西,但我就是想不出来使随机数在函数之间保持不变 C++相对较新,这已经困扰了我一段时间。我正试图写一个程序,根据生成的随机数做不同的事情,c++,visual-c++,C++,Visual C++,为了简单地解释我要做的事情,让我们假设我正在创建一个运动员列表,然后从随机生成他们在某个范围内的身高开始。容易做,没问题。那么我想根据他们的身高来计算他们的体重。这就是事情变得一团糟的地方。出于某种原因,我无法理解,该程序是根据不同的高度随机生成重量,而不是它首先返回的高度。我就是不明白 无论如何,这里有一段(非常简化的)示例代码,希望能说明我正在尝试做什么。我肯定我错过了一些明显的东西,但我就是想不出来 #include "stdafx.h" #include <stdio.h>
#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;
}
#包括“stdafx.h”
#包括
#包括
#包括
使用名称空间std;
int随机(int最小值、int最大值、int基本值)
{
int random=(rand()%(max-min)+base);
返回随机;
}
整数高度()
{
整数高度=随机(1,24,60);
返回高度;
}
整数权重()
{
内部重量=高度()*2.77;
返回重量;
}
void main()
{
srand((无符号整数)时间(0));
int n=1;
当(nweight
再次调用height
时,它显然会生成一个不同的数字(这就是RNG的全部要点:)
要获得您想要的效果,您可以:
- 更改
weight
以接受height
作为参数;然后在main
中,在每次迭代时将height
返回的值保存在临时变量中,并将其传递给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;
}
(顺便说一句,它是int main
,而不是void main
,而且for
循环比while
在这种情况下更合适)这很容易。你可以在weight()中调用height()
函数。这意味着您将获得高度的新随机值。您需要做的是修改重量()
,以便它可以通过高度参数并根据它计算重量(而不是根据新的随机值)
新的height()
函数如下所示:
int weight(int height)
{
int weight = height * 2.77;
return weight;
}
在main()
中:
while(n这一个很有魅力。非常简单易懂。出于某种原因,我不明白你的第一个建议不起作用。它最终把同一对数字重复了十次,而不是随机给我十次。我想我可能做错了什么。至于你的第二个建议,你给了我一个完美的开场白g为了进入课堂,我需要学习一些东西。所以,谢谢你!@JeremySharp:你保留了原来的height
功能吗?你能把你的完整代码发布到ideone.com或pastbin.com上让我看看吗?这可能就是我所做的。我现在必须去重新开发完整的代码了……也许是因为你的建议,才有了课堂。
int weight(int height)
{
int weight = height * 2.77;
return weight;
}
while (n <= 10)
{
int h = height();
int w = weight(h);
cout << h << " and " << w << endl;
++n;
}