我是C ++初学者。目前学习载体。我正在编写一个程序来计算给定等级的平均值。我写的程序只接受5个等级。如何修改程序,以便为任意数量的等级自动分配向量空间?也就是说,在“输入”等级:'提示,我应该可以输入任意数量的等级,并且必须计算这些等级的平均值。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> grades;
int grade;
cout << "Enter grades: ";
for(int i = 1; i <= 5; ++i) {
cin >> grade;
grades.push_back(grade);
} double total = 0;
for(int i = 0; i < grades.size(); ++i) {
total += grades[i];
} double avg;
cout << "Average = " << total / grades.size() << endl;
return 0;
}
答案 0 :(得分:3)
看起来您希望行尾(用户点击“输入”)表示成绩结束。
此代码会将整行记录到own stream object中,与cin
不同 - 最终会到达终点。
std::string grades_full_line;
std::getline(std::cin, grades_full_line);
std::stringstream grade_stream(grades_full_line);
您现在可以更改循环以将流本身用作条件。当你到达终点时它将评估为false
。
for( grade_stream >> grade; grade_stream; grade_stream >> grade )
{
grades.push_back(grade);
}
答案 1 :(得分:1)
矢量非常酷,因为它们可以根据需要增长(如果你正在使用push_back方法)。基本上,你已经在那里了!您的代码将处理尽可能多的成绩(在合理范围内)。
您需要更改的是更改for循环以循环动态选择的次数:
更改:
for(int i = 1; i <= 5; ++i) {
cin >> grade;
grades.push_back(grade);
}
到
cout << "How many grades" << endl;
cin >> numOfGrades;
for(int i = 0; i < numOfGrades; ++i) {
cin >> grade;
grades.push_back(grade);
}
这将循环正确的次数并获得你想要的东西。
答案 2 :(得分:0)
你需要找出一个循环终止条件 - 用户可以通过某种方式让你知道他已经完成了分数。一旦将其合并到push_back
循环的边界中,您的代码就会起作用。假设您认为等级-1
意味着用户已完成输入成绩。然后,您需要进行以下修改:
while(cin >> grade and grade != -1)//EDITED
{
grades.push_back(grade);
}
编辑:正如cdhowie所提到的,你应该清理收到的输入。