[英]Using Vector structure, can't add a vector.size to it
所以基本上我有一个 read() 函数,我想从文件中读取学生姓名和成绩,但是如果我使用 for(auto i = 0; i < 1000; i++) 我有向量大小的问题宣言 ////
void read(vector <Student> A, vector<int> ndgrades)
{
// IF I CHANGE A.size() to number, I get error, but here A.size() = 0, hwo do i change it.
for (auto i = 0; i < A.size(); i++) {
fin >> A[i].name;
fin >> A[i].srname;
int j = 0;
double vid = 0;
int grade;
while (true)
{
fin >> grade;
if (grade == 0) {
cout << "bad grade" << endl;
cout << "end of the program" << endl;
}
else if (j == 14)break;
else {
ndgrades.push_back(grade);
vid += grade;
j++;
}
}
double average = vid / j * 1.0;
// cout << "Enter egzam result" << endl;
fin >> A[i].egz;
A[i].last = average * 0.4 + A[i].egz * 0.6;
A[i].mediana = (average + A[i].egz) / 2;
ndgrades.erase(ndgrades.begin(), ndgrades.begin() );
}
}
这段代码有很多问题。 首先,您按值传递向量A
和ndgrades
,因此在read
函数完成后,调用者将无法按预期返回结果。 您应该通过引用传递,以便您的函数可以修改调用者中的原始实例,如下所示,类型中带有&
。
void read(vector <Student>& A, vector<int>& ndgrades)
{
//...
其次,您应该让向量动态增长,而不是尝试预先分配或手动调整大小。 为此,请创建一个Student
实例,然后将其添加到列表中:
while (true) {
Student s;
fin >> s.name;
fin >> s.srname;
A.push_back(s);
在最后一部分中,尚不清楚某些代码试图实现什么。 如果您想保留每个学生的成绩列表,为什么不在 Student 类型本身中有一个向量?
也没有显示fin
的声明,但假设它是输入文件,您可以使用以下命令终止循环:
if (!fin.good())
break;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.