C++ 函数程序中的平均输出始终为 0.0
Average output in c++ functions program is always 0.0
我正在编写一个程序,使用函数计算三个温度的平均值,由于某种原因,我的输出始终为 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;
}
#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;
}
发生这种情况是因为您将全局变量发送到函数调用。因此,在您的函数中创建此变量的副本。如果你想使用全局变量,答案是:
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;
}
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 请解释"函数1(p1,p2,p3);"的输出
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 当使用通配符和null指针调用函数时,对输出的说明
- 为什么递归函数的最终输出是 5?
- C++ 构造函数未显示输出
- c++ 将成员函数的输出写入文本文件
- 简单函数并不总是返回预期的输出
- 当使用我在一个函数、另一个函数中修改的数组时,在我的输出中得到一个奇怪的负数
- GCC 仪器 - 是否可以自动输出函数的参数?
- 意外输出..函数绑定在虚拟表中的发生方式
- 输出函数调用日志文件
- C++:程序不输出函数返回值
- 通用化标准库容器的输出函数
- C++:int数组[a][b][C]={0};未将所有值设置为0.是那个指令错了,还是我的输出函数出了问题
- <</>>运算符重载和输入/输出函数之间的区别
- Ncurses 输出函数只接受常量数据