【问题标题】:Average output in c++ functions program is always 0.0c++ 函数程序中的平均输出始终为 0.0
【发布时间】:2018-09-08 18:13:40
【问题描述】:

我正在编写一个使用函数计算三个温度平均值的程序,由于某种原因,我的输出始终为 0.0。我不确定这是否与代码中变量的放置有关,或者我是否应该至少初始化其中一个,但事实是我似乎无法找出问题所在是。我对编程以及涉及函数和对象的编程仍然很陌生。这里有什么我遗漏的吗?

void getTemps(double);
double calcAvg(double tempAvg);
void displayAvg();

double temp1, temp2, temp3;
double sum;
float tempAvg;

    int main()
{

    getTemps(sum);
    calcAvg(tempAvg);
    displayAvg();

    system("PAUSE");
    return 0;
}

 void getTemps(double sum)
{
    // Get up to three temperatures
        cout << "Enter temperatures of 3 cities." << endl;
        cin >> temp1;
        cin >> temp2;
        cin >> temp3;

        sum = temp1 + temp2 + temp3;
}

double calcAvg(double tempAvg)
{

    tempAvg = (sum / 3);
    return tempAvg;

}

void displayAvg()
{
    cout << fixed << setprecision(1) << temp1 << endl;
    cout << fixed << setprecision(1) << temp2 << endl;
    cout << fixed << setprecision(1) << temp3 << endl;
    cout << "The average temperature is " << tempAvg << " degrees." << endl;
}

【问题讨论】:

  • 您需要通过引用而不是值传递sumtempAvgvoid getTemps(double&amp; sum)void calAvg(double&amp; tempAvg)。 SO上可能有这个问题的重复项。
  • 你需要弄清楚是要使用全局变量还是参数传递。
  • 无关:从double 切换到float 用于tempAvg 可能没有意义。还不如让他们都doubles。
  • 尽可能避免使用全局变量。在需要的地方声明它们。
  • 你在猜怎么做。别。从这些C++ books 开始。 C++ 不能靠猜测来学习。

标签: c++ function output average


【解决方案1】:
#include <iomanip>
#include <iostream>

using namespace std;

/*
If you want to change the variable values that you pass into this function
then you will need to pass by reference using "&" when declaring the function 
params. See below:
*/

void getTemps(double & sum, double &temp1, double & temp2, double & temp3);

/*
You don't need to change the sum variable so I DONT pass the sum by 
reference here.
*/

double calcAvg(double & tempAvg, double sum);

/*
You do not need to alter any of the variables in this function, so just pass
them without the ref or with a const tag so you don't end up accidentally
altering them.
*/

void displayAvg(double tempAvg, double temp1, double temp2, double temp3);

//You should place these variables in the main method and then pass them to your functions.

//double temp1, temp2, temp3;
//double sum;
//float tempAvg;

int main(){
    double temp1, temp2, temp3;
    double sum;
    double tempAvg; //I changed this variable to a double becuase all of your functions deal with doubles and your other variables are doubles.

//All of these variables are now passed by reference, 
//so they will be altered when you change them in the function.

    getTemps(sum, temp1, temp2, temp3);
    calcAvg(tempAvg, sum);
    displayAvg(tempAvg, temp1, temp2, temp3);

    system("PAUSE");
    return 0;
}

void getTemps(double & sum, double &temp1, double & temp2, double & temp3){
// Get up to three temperatures
    cout << "Enter temperatures of 3 cities." << endl;
    cin >> temp1;
    cin >> temp2;
    cin >> temp3;

    sum = temp1 + temp2 + temp3;
}

double calcAvg(double & tempAvg, double sum){
    tempAvg = (sum / 3);
    return tempAvg;
}

void displayAvg(double tempAvg, double temp1, double temp2, double temp3){
    cout << fixed << setprecision(1) << temp1 << endl;
    cout << fixed << setprecision(1) << temp2 << endl;
    cout << fixed << setprecision(1) << temp3 << endl;
    cout << "The average temperature is " << tempAvg << " degrees." << endl;
}

【讨论】:

    【解决方案2】:

    发生这种情况是因为您将全局变量发送到函数调用。所以在你的函数中创建这个变量的副本。如果你想使用全局变量答案是:

        void getTemps();
    
        void calcAvg();
        void displayAvg();
    
        double temp1, temp2, temp3;
        double sum;
        float tempAvg;
    
        int main()
        {
    
            getTemps();
            calcAvg();
            displayAvg();
            cin.get();
            cin.get();
            //system("PAUSE");
            return 0;
        }
    
        void getTemps()
        {
            // Get up to three temperatures
            cout << "Enter temperatures of 3 cities." << endl;
            cin >> temp1;
            cin >> temp2;
            cin >> temp3;
    
            sum = temp1 + temp2 + temp3;
        }
    
        void calcAvg()
        {
    
            tempAvg = (sum / 3);
    
    
        }
    
    void displayAvg()
    {
        cout << fixed /*<< setprecision(1)*/ << temp1 << endl;
        cout << fixed /*<< setprecision(1)*/ << temp2 << endl;
        cout << fixed /*<< setprecision(1*/ << temp3 << endl;
        cout << "The average temperature is " << tempAvg << " degrees." << endl;
    }
    

    但这是一种糟糕的编程风格。 会更好:

    #include<iostream>
    using namespace std;
    double getTemps(double& temp1, double& temp2, double& temp3);
    
    double calcAvg(const double sum);
    void displayAvg(const double temp1, const double temp2, const double temp3, const double tempAvg);
    
    
    int main()
    {
        double sum=0;
        double temps1=0.f, temps2=0.f,temps3=0.f;
        double tempavg = 0.f;
        sum=getTemps(temps1,temps2,temps3);
        tempavg=calcAvg(sum);
        displayAvg(temps1,temps2,temps3,sum);
        cin.get();
        cin.get();
        //system("PAUSE");
        return 0;
    }
    
    double getTemps(double& temp1, double& temp2, double& temp3)
    {
        // Get up to three temperatures
        cout << "Enter temperatures of 3 cities." << endl;
        cin >> temp1;
        cin >> temp2;
        cin >> temp3;
    
        return   (temp1 + temp2 + temp3);
    }
    
    double calcAvg(const double sum)
    {
    
    
        return (sum / 3);
    
    }
    
    void displayAvg(const double temp1, const double temp2, const double temp3, const double tempAvg)
    {
        cout << fixed /*<< setprecision(1)*/ << temp1 << endl;
        cout << fixed /*<< setprecision(1)*/ << temp2 << endl;
        cout << fixed /*<< setprecision(1*/ << temp3 << endl;
        cout << "The average temperature is " << tempAvg << " degrees." << endl;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多