好的,所以我正在尝试解析文件中的信息,并且我有这个循环读取未知数量的5个数字字符串,这些字符串由新行分隔。 ProfDB只是一个包含教授类对象的数组。该类有一个方法(addPrevCourse()),它将Course对象添加到该类中的一系列课程中。 CRNDictionary是一个函数,它接受一个字符串并根据该字符串返回一个课程对象。以下是代码段:
主:
ifstream in;
in.open("File.txt");
string CRNHash = "";
while (CRNHash != "!ENDLIST"){
in >> CRNHash;
(*ProfDB[used]).addPrevCourse(CRNDictionary(CRNHash));
addPrevCourse:
void Professor::addPrevCourse(const Course& newCourse)
{
int i = 0;
while (i < 8){
if (Courses_Taught[i].getCRN() == "0"){
Courses_Taught[i] = newCourse;
}
i++;
}
}
CRNDictionary:
Course CRNDictionary(string CRN){
//search course list for the crn passed, temp implementation
if (CRN == "12345")
return Course("Test", "12344");
else if (CRN == "13254")
return Course("Test2", "13254");
else
return Course("Test2", "BLAH");
}
问题在于,当我运行程序并打印教授的数组(其中包含5个字符串)时,所有值都显示为12344(来自CRNDictionary的第一个对象),即使该文件有5个不同的值。我已经验证CRNHash正在被正确扫描,但无法弄清楚为什么值不会改变被添加到数组中。
答案 0 :(得分:1)
这是因为在addPrevCourse
的第一次传递之后,所有数组项都填充了第一个输入,导致该函数内的if
在后续传递中始终为false
。您需要做的是在条件为break
时在while
中添加true
,或者在Professor
中保留成员计数器以了解哪个是下一个空数组细胞