第一个函数中的无限循环不知道如何解决

时间:2019-01-06 07:50:07

标签: c++ while-loop infinite-loop infinite

继续陷入无限循环不知道我的逻辑出了错

用于eof并且不知道还缺少什么,break语句什么也没做,只是一次打印出我的测试语句

void readSetupData(string sfile, string efile, string afile, students 
studArray[])
{
    ifstream inS(sfile.c_str());
    ifstream inA(afile.c_str());
    ifstream inE(efile.c_str());
    int numStudents = 0;


       while (!inS.eof())
        {
        cout << "BEEP" << endl;

                int id;
                int examScore;
                string name;
                inS >> name >> studArray[numStudents].id >> 
studArray[numStudents].name;

                int examId;

                inE >> id >> examId >> examScore;

                int studentIndex = findStudent(id, studArray);
                int examIndex = findExam(examId, 
studArray[studentIndex].examArray);
                studArray[studentIndex].examArray[examIndex].pointsScored 
= 
examScore;
                int pointsAvail = 
studArray[studentIndex].examArray[examIndex].pointsAvail;
                studArray[studentIndex].examArray[examIndex].percentage = 
(float)examScore / (float)pointsAvail;

        }


        while (!inA.eof())
        {
                int id;
                int assignId;
                int assignScore;

                inA >> id >> assignId >> assignScore;

                int studentIndex = findStudent(id, studArray);
                int assignIndex = findAssignment(assignId, 
studArray[studentIndex].assignArray);
                studArray[studentIndex].assignArray[assignIndex].pointsScored 
= assignScore;


        }
}

第一个void函数是问题,并且在编译和运行时重复测试语句BEEP ./a.out student_info.txtexam_info作业_info.txtexam_scores.txt作业_分数sgrades.out

1 个答案:

答案 0 :(得分:0)

您期望eof来预测未来,并向您保证后续的读取不会遇到文件结尾。那不是它的作用。完全不要使用eof函数。

除了重复失败的操作(几乎可以肯定会再次失败并重复循环)之外,您无法处理任何错误。相反,请检查每个操作以查看它是成功还是失败。如果失败,请不要继续前进,因为它将再次失败,从而导致无休止的循环。

当您不了解代码为什么要执行其操作时,应该做的第一件事就是在每个可能会以任何可能的方式出错的单个库调用或函数调用中添加错误检查。