【发布时间】:2018-10-05 15:21:03
【问题描述】:
我的 ReadFile 函数没有读取我的整个文件。该文件包含多行信息,每行都与一名学生有关。
函数(或者可能是 while 循环)正在读取前两条记录,然后退出循环。它正在正确读取所有内容,但为什么它不继续读取整个文件(其中有 13 条记录)?
我已经尝试过while(!infile.eof()),但该程序甚至无法运行。
这是我的 ReadFile 块:
void ReadFile() {// Reads data file into array
ifstream infile;
infile.open(cTextFileName);
if (!infile.good()) {
cout << "Cant find text data file!" << endl;
exit(1);
}
int i = 0;
int status;
//bool endOfFile = infile.eof();
infile >> gRecs[i].StudentNo;
while (infile) {
infile >> gRecs[i].FirstName;
infile >> gRecs[i].LastName;
infile >> gRecs[i].NumSubjects;
//cout << "ENTERED WHILE LOOP" << endl;
for (int j = 0; j < gRecs->NumSubjects; j++) {
infile >> gRecs[i].Subjects[j].Code;
infile >> status;
if (status == 0) {
gRecs[i].Subjects[j].Status == eEnrolled;
} else if (status == 1) {
gRecs[i].Subjects[j].Status == eProvisional;
} else {
gRecs[i].Subjects[j].Status == eWithdrawn;
}
infile >> gRecs[i].Subjects[j].Mark;
}
i++;
infile >> gRecs[i].StudentNo;
}
gNumRecs = i;
infile.close();
infile.clear();
cout << gNumRecs << " Records read!" << endl;
}
【问题讨论】:
-
您将不得不展示文件的格式。你们中的一个输入操作不正确,导致读取操作失败,从而导致循环失败。
-
这里是文本文件。 pastebin.com/CCN59Dm9
-
那么在调试代码时会发生什么?
-
这并没有解决问题,而是养成使用有意义的值初始化对象的习惯,而不是默认初始化它们并稍后分配值。即,将
ifstream infile; infile.open(whatever)'更改为ifstream infield(whatever);。并且不需要对infile.close()的调用;析构函数会这样做。最后,在您关闭文件后调用infile.clear()不会完成任何操作。
标签: c++ fileinputstream