C++ 函数中的计算似乎被忽略,始终返回相同的数字

C++ 函数中的计算似乎被忽略,始终返回相同的数字,c++,C++,增长率功能:(截至2010年11月12日晚上8:00) #包括“header.h” 浮动生长率(浮动出生率、浮动脱氮率) { 漂浮生长; 生长RT=(出生率)-(死亡率); cout您将newPopulation作为一个参数传递,但它是通过值传递的,而不是通过引用或指针传递的。因此它不会被您的代码更新 您也没有触及该变量,因此它只会执行一次迭代。您有两个主要问题 第一个问题是,来自estimatedPopulation的返回值是int。因此,当计算表达式的结果时,它将转换为int,这将对其

增长率功能:(截至2010年11月12日晚上8:00)

#包括“header.h”
浮动生长率(浮动出生率、浮动脱氮率)
{   
漂浮生长;
生长RT=(出生率)-(死亡率);

cout您将newPopulation作为一个参数传递,但它是通过值传递的,而不是通过引用或指针传递的。因此它不会被您的代码更新


您也没有触及该变量,因此它只会执行一次迭代。

您有两个主要问题

第一个问题是,来自
estimatedPopulation
的返回值是
int
。因此,当计算表达式的结果时,它将转换为
int
,这将对其进行取整。除非
currentPopulation*growthrt/100
的结果大于1,否则您将永远看不到任何更改。相同我认为你的最后一个例子有问题

另一个问题是您一直将相同的值赋给
newPopulation
变量。您可能希望在循环中调整
currentplulation

@马特:看起来您没有使用函数的返回值,例如:

something = estimatedPopulation(currentPopulation, years);
(顺便说一下,该函数应该包含4个参数??)

请注意,当您传入一个“int”时,函数中的变量是函数的局部变量-修改它对函数外同名的变量没有任何影响。这看起来很像您预期的情况。如果确实要修改传入的值,您可以尝试以下操作:

void estimatedPopulation(int &newPopulation....) {

这将通过引用传递变量,以便您可以在函数中实际修改它。

我认为这只是整数舍入的一种情况,例如“currentpopulation”为100,“growthrt”为0.1。然后:总和变为:
100+100*0.1/100=100.1;
-然后将其设置为下一个“newPopulation”。然而,由于newPopulation是一个整数,因此它再次向下舍入到100


最好将“newPopulation”更改为双精度/浮点数(可能在函数末尾再次将其四舍五入)

循环迭代时,没有任何更新
newPopulation
currentpropulation
,因此
newPopulation
只是被相同的值覆盖了好几次。我想在循环的某个时候,您需要一行,如
currentpropulation=newPopulation;

编辑以添加:


现在,您添加了
main
函数:您将所有函数调用视为
void
类型。也就是说,您实际上没有使用来自
estimatedPopulation
growthRate
的任何返回值,因此我真的很惊讶您得到的不是垃圾值在你的
输出
函数中被除数,因为它的参数从来没有设置过。

除了其他人所说的,它看起来像是
growthrt
被除以100两次,一次在函数
growthRate
中,另一次在
estimatedPopulation
中的循环中


另一件事是,当您更新内容时,您将遇到循环运行
年+1次,这可能超出您的预期。

您认为此代码没有问题吗

void output ()

{
     float currentPopulation, years;

     cout <<  estimatedPopulation (currentPopulation, years) << endl;
}     
void输出()
{
流动人口,年;

很好的调用。我在循环中添加了currentPopulation=newPopulation;但奇怪的是它仍然没有改变它的值。@Matt:你是否尝试过使
newPopulation
a
float
?是的,现在使所有内容都浮动。@Matt:也许你应该开始检查文件的其他版本、对象文件输出或includes.right,currentP已经添加了population=newPopulation;。仍然没有更新发生。这是一个无用的参数,应该更改为局部变量,第一个函数中的
growthrt
也是如此。不确定将newPopulation作为值传递而不是通过引用传递是什么意思。@Ben,实际上,我不需要保留growthrt吗作为growthRate函数的一个参数,因为它用于估计的总体函数中?@Matt:不,它是
growthRate
函数的返回值。调用它时,您正在将返回值保存在某个地方,对吗?@Ben,嗯,不这样认为。我该如何保存它?您能给我们提供
出生率
的示例值吗de>deathRate
currentPopulation
years
?出生率和deathRate可以是任何百分比。currentPopulation只是人口的一个数字。years将决定estimatedPopulation函数中for循环将执行的时间量。您想让我实际告诉您我的输入,然后r结果?谢谢你发现了这些问题。如果我只做x=1,应该可以解决这个问题了吧?@Matt:是的,但更传统的方式是说(x=0;x
(注意
你明白我想做什么吗?我只想输出从该函数返回的任何内容。我只是不知道如何正确地传递它们。我需要在参数中输入currentpopulation和years以进行输出吗?你想做什么有点清楚,但实际上你的代码中没有一段是正确的。)没错。从一个函数开始,首先看看函数调用是如何工作的。很明显,你以前从来没有让一个程序正确编译/运行过。从更简单的开始。
#include "header.h"

int main ()
{

    float currentPopulation, birthRate, deathRate, years;

    char response; 


     do //main loop
      { 
           input (currentPopulation, birthRate, deathRate, years);
           growthRate (birthRate, deathRate);
           estimatedPopulation (currentPopulation, years, birthRate, deathRate);
           output (currentPopulation, years, birthRate, deathRate);
           cout << "\n Would you like another population estimation? (y,n) ";
           cin >> response;
      }          
    while (response == 'Y' || response == 'y');

    myLabel ("5-19", "12/09/2010");   

    system ("Pause");

    return 0;

}    
something = estimatedPopulation(currentPopulation, years);
void estimatedPopulation(int &newPopulation....) {
void output ()

{
     float currentPopulation, years;

     cout <<  estimatedPopulation (currentPopulation, years) << endl;
}