[英]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.