我正在尝试编写一个程序,用户可以根据需要输入任意数量的数字,然后程序返回数字的平均值。到目前为止,程序只输出输入的最后一个数字。
#include <vector>
#include <iostream>
#include <numeric>
using namespace std;
int main()
{
vector<float> v;
int input;
cout << " Please enter numbers you want to find the mean of:" <<endl;
while (cin >> input);
v.push_back(input);
float average = accumulate( v.begin(), v.end(), 0.0/ v.size());
cout << "The average is" << average << endl;
return 0;
}
答案 0 :(得分:27)
首先在while
while (cin >> input);
~~
其次你数学错了
std::accumulate
的第三个参数是初始和的值
取而代之的是:
float average = accumulate( v.begin(), v.end(), 0.0)/v.size();
此外,容器数据类型的元素应与容器类型匹配,即float
使用float input ;
答案 1 :(得分:6)
您的代码中存在相当多的错误,您是否实际调试过它?这是一个有效的版本:
#include <vector>
#include <iostream>
#include <numeric>
using namespace std;
int main()
{
vector<float> v;
float input;
cout << " Please enter numbers you want to find the mean of:" <<endl;
while (cin >> input)
v.push_back(input);
float average = accumulate( v.begin(), v.end(), 0.0)/v.size();
cout << "The average is" << average << endl;
return 0;
}
答案 2 :(得分:1)
std::accumulate
的第三个参数是初始值,因此您从0.0 / v.size()
(非常小)开始,然后在向量中添加所有项目。
相反,你应该使用零值作为初始值,并且在计算了向量中的所有值的总和之后,除以大小。
正如其他人指出的那样,你只将最后一个值添加到矢量中。
答案 3 :(得分:0)
您可以使用vector_name.size()来获取向量中的元素数。这是我计算平均值的尝试:
#include <iostream>
#include <vector>
//function to compute average
double compute_average(std::vector<int> &vi) {
double sum = 0;
// iterate over all elements
for (int p:vi){
std::cout << "p is " << p << std::endl;
sum = sum + p;
}
return (sum/vi.size());
}
int main(){
std::vector <int>vi = {5,10};
double val;
val = compute_average(vi);
std::cout << "avg is " << val << std::endl;
return 0;
}