动态向量大小分配 我是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; } #包括 #包括 使用名称空间std; int main(){ 病媒等级; 国际等级; cout分级; 坡度。向后推(坡度); }双倍合计=0; 对于(int i=0;i等级; 坡度。向后推(坡度); }

动态向量大小分配 我是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; } #包括 #包括 使用名称空间std; int main(){ 病媒等级; 国际等级; cout分级; 坡度。向后推(坡度); }双倍合计=0; 对于(int i=0;i等级; 坡度。向后推(坡度); },c++,vector,C++,Vector,您需要找出一个循环终止条件-用户可以通过某种方式让您知道他已经完成了分数输入。一旦您将其纳入push_back循环的边界中,您的代码就可以正常工作了。假设您确定-1的等级意味着用户已完成输入等级。那么您只需要进行以下修改: while(cin >> grade and grade != -1)//EDITED { grades.push_back(grade); } 编辑:正如cdhowie提到的,您应该清理接收到的输入。您需要找出循环终止条件-用户可以通过某种方式让您知道他已

您需要找出一个循环终止条件-用户可以通过某种方式让您知道他已经完成了分数输入。一旦您将其纳入
push_back
循环的边界中,您的代码就可以正常工作了。假设您确定
-1
的等级意味着用户已完成输入等级。那么您只需要进行以下修改:

while(cin >> grade and grade != -1)//EDITED
{
  grades.push_back(grade);
}

编辑:正如cdhowie提到的,您应该清理接收到的输入。

您需要找出循环终止条件-用户可以通过某种方式让您知道他已完成输入成绩。一旦您将其纳入
push_back
循环的边界中,您的代码就可以正常工作了。假设您确定
-1
的等级意味着用户已完成输入等级。那么您只需要进行以下修改:

while(cin >> grade and grade != -1)//EDITED
{
  grades.push_back(grade);
}

编辑:正如cdhowie提到的,你应该清理接收到的输入。

向量非常酷,因为它们可以根据需要增长(如果你像现在这样使用push_-back方法)。所以本质上,你已经在那里了!您的代码将处理尽可能多的分数(在合理范围内)

您必须更改的是,将for循环更改为动态选择的循环次数:

更改:

for(int i = 1; i <= 5; ++i) {
    cin >> grade;
    grades.push_back(grade);
}
for(int i=1;i>等级;
坡度。向后推(坡度);
}

coutnumofgrades;
对于(int i=0;i>等级;
坡度。向后推(坡度);
}

这将循环正确的次数并得到您想要的结果。

向量非常酷,因为它们可以根据需要增长(如果您使用的是push_-back方法)。因此,本质上,您已经做到了!您的代码将处理尽可能多的分数(在合理范围内)

您必须更改的是,将for循环更改为动态选择的循环次数:

更改:

for(int i = 1; i <= 5; ++i) {
    cin >> grade;
    grades.push_back(grade);
}
for(int i=1;i>等级;
坡度。向后推(坡度);
}

coutnumofgrades;
对于(int i=0;i>等级;
坡度。向后推(坡度);
}

这将循环正确的次数,并得到您想要的。

看起来您希望行的末尾(用户点击“回车”)表示成绩的结束

这段代码将把整条线拉到它的中间,而不像cin,它最终会到达终点

现在,您可以将循环更改为将流本身用作条件。当您到达末尾时,它将计算为
false

for( grade_stream >> grade; grade_stream; grade_stream >> grade )
{      
  grades.push_back(grade);
}

看起来您希望行尾(用户点击“回车”)表示成绩结束

这段代码将把整条线拉到它的中间,而不像cin,它最终会到达终点

现在,您可以将循环更改为将流本身用作条件。当您到达末尾时,它将计算为
false

for( grade_stream >> grade; grade_stream; grade_stream >> grade )
{      
  grades.push_back(grade);
}


如果用户输入的不是数字,这将进入一个无限循环。循环条件应为
while(cin>>等级和等级!=-1)
(这也允许您删除
等级的零初始化
)谢谢。我有一个想法。用户通过用空格分隔来输入成绩。当按下Enter键时,用户已完成输入。我可以在我的程序中使用Enter键作为操作调用吗?如何使用size()查找已输入的成绩数?在这种情况下,您可能希望使用来读取整行,然后使用
istringstream
对其进行标记。下面是一个显示后者用法的示例。如果用户输入的不是数字,则将进入无限循环。循环条件应为
而(cin>>等级和等级!=-1)
。(这也允许您删除
等级
的零初始化)谢谢。我有一个想法。用户通过用空格分隔来输入成绩。当按下Enter键时,用户已完成输入。我可以在我的程序中使用Enter键作为操作调用吗?如何使用size()查找已输入的成绩数?在这种情况下,您可能希望使用来读取整行,然后使用
istringstream
对其进行标记。下面是一个演示后者用法的示例。您需要初始化
total
。另外:避免在函数开头声明。而是在使用之前声明并定义一个变量。您需要初始化
total
。另外:避免在函数开头声明。而是在使用之前声明并定义一个变量。我希望避免使用numOfGrades作为用户输入。那么最好使用某种令牌值,它将指示不再发送输入(可能是-1)。让循环不断接受输入并将其添加到向量中,直到它接收到-1。这需要更改为while循环或更合适的do循环,而不是for循环。对不起,也不是这样。请看Drew Dormann的答案。我正在寻找类似的答案。酷,如果所有分数都相同的话,这一个可以工作是在一行中输入的。行可以任意长,但只能将条目分隔为空白。如果这是可以接受的,则它可以工作。否则,yo