使随机数在函数之间保持不变 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;

当(n
weight
再次调用
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;
}