我的任务是输入和读取()几个双变量并将它们存储在向量中,然后函数compute()应该计算向量中存储的所有变量的总和及其平均值。我修复了这些功能并且运行良好。问题在于最终函数print()..函数应该打印出结果 - 'sum'和'average'变量。但是我的print()代码工作不正常并打印出错误的数字。这是我的代码:
#include <iomanip>
#include <cstdlib>
#include <iostream>
#include <vector>
using namespace std;
vector<double> read(){//this function works fine
cout << "Write some numbers with space between them?" << endl;
double numz;
vector<double> myvector;
do {
cin >> numz;
myvector.push_back (numz);
} while (numz);
return myvector;
}
void compute(double average, double sum, vector<double> &myvector){//this function works fine
//if i put cout in this function it calculates correctly
vector<double>::iterator it;
for ( it=myvector.begin() ; it < myvector.end()-1; it++ ){
sum += *it;
}
average = sum/myvector.size();
}
void print(double average, double sum){//this is printing out wrong numbers
cout.precision(2);
cout << sum << endl;
cout << fixed << average << endl;
}
int main (){
vector<double> myvector = read();
double average;
double sum;
compute(average, sum, myvector);
print(average, sum);//this is printing out wrong numbers
system("pause");
return 0;
}
在此先感谢您的帮助,我知道我的mystake是在函数之间的变量传递,但我花了整整一天调试和阅读教程没有任何运气。
答案 0 :(得分:4)
添加&amp;在函数声明中的变量前面,它将传递对变量的引用!
void compute(double& average, double& sum, vector<double> &myvector)
答案 1 :(得分:0)
你忘记了计算函数声明中的引用运算符(&amp;):没有它,main()函数中的变量将不会被修改:Write
void compute(double &average, double &sum, vector<double> &myvector){//this function works fine
而不是你写的,它应该有用。
答案 2 :(得分:0)
您的计划有几个缺陷:
compute
的声明可能更好地改为:
void compute(const vector<double> &myvector, double &average, double &sum);
传递const vector<double>&
使得它在函数中不可修改,并且接受average/sum
的引用使得更改传递参数成为可能,请参阅更多“形式参数”和“实际参数”{{ 3}}
您最好将函数read
声明为:
void read(vector<double>& myVector);
因为这会避免在函数read
返回时复制向量。