类数组不会保留新值

时间:2014-04-25 06:26:57

标签: c++ arrays class variable-assignment

好的,所以我正在尝试解析文件中的信息,并且我有这个循环读取未知数量的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正在被正确扫描,但无法弄清楚为什么值不会改变被添加到数组中。

1 个答案:

答案 0 :(得分:1)

这是因为在addPrevCourse的第一次传递之后,所有数组项都填充了第一个输入,导致该函数内的if在后​​续传递中始终为false 。您需要做的是在条件为break时在while中添加true,或者在Professor中保留成员计数器以了解哪个是下一个空数组细胞