//更新,我最终搞清楚了。如果您有点好奇,我在评论中对此进行了描述,再次感谢大家!
我正在制定一个程序,为注册办公室的办公室做几件事,比如注册学生,删除学生等。在提供的代码中,我基本上采用了一个包含课程名称的向量,查看它与学生ID匹配,然后将某些变量附加在一起,将它们放入一个向量中,然后将其打印出来!
问题:此代码编译100%罚款,没有任何问题,并打印学生ID,以及他们注册的课程。
但是,当我尝试再次运行多次时,它会开始加倍打印的内容。所以在我看来它与在完成函数后仍然保持其值的向量有关。所以我决定尝试使用.erase和.clear函数向量成员,甚至创建一个循环来删除变量,它不会删除容器中的内容。
有没有人有任何想法?
以下是第一次发生的事情的示例,然后是控制台中的第二次:
1st time:
"Report Card for student: 10090"
"__________________________ "
"CS101 70 "
"CS102 65 "
"CS212 85 "
"-------------------------- "
2nd time:
"Report Card for student: 10090"
"__________________________ "
"CS101 70 "
"CS102 65 "
"CS212 85 "
"CS101 70 "
"CS102 65 "
"CS212 85 "
"-------------------------- "
非常感谢任何帮助! 谢谢。
void printReport(vector<string>& vect){
string studentID;
string line;
string mark;
string temp;
string temp1;
string tempholder;
vector<string> reportCardVect;
ifstream classFile;
cout << "Please enter the ID of the student who's grade report you would like to print: " << endl;
cin >> studentID;
for (int i = 0; i < vect.size(); i++){
tempholder = vect[i];
classFile.open(tempholder.append(".txt"));
while (!classFile.eof()){
getline(classFile, line);
temp = line;
line.erase(line.begin() + 5, line.end());
if (studentID == line){
temp.erase(temp.begin(), temp.begin() + 6);
temp1 = vect[i];
temp1.append(" ");
temp1.append(temp);
reportCardVect.push_back(temp1);
break;
}
}
classFile.close();
}
system("cls");
cout << "Report Card for student: " << studentID << endl;
cout << "_________________________" << endl;
for (int i = 0; i < reportCardVect.size(); i++)
cout << reportCardVect[i] << endl;
cout << "-------------------------" << endl;
cout << endl;
for (int i = 0; i < reportCardVect.size(); i++){
reportCardVect[i].erase();
}
system("pause");
}