可能重复:
Why is iostream::eof inside a loop condition considered wrong?
我遇到了eof()函数的问题。我的循环没有读取我读取的文件的末尾,因此留下了无限循环。任何帮助或见解将不胜感激。谢谢
while (!file2.eof()) {
getline (file2, title, ',');
getline (file2, authorf, ',');
getline (file2, authorl, ',');
getline (file2, isbn, ',');
file2 >> pages;
file2.ignore();
file2 >> price;
file2.ignore();
getline(file2, subject, ',');
file2 >> code;
file1.ignore();
file2 >> rentalp;
file2.ignore(10, '\n');
textbook b2(title, authorf, authorl, publisher, pages, isbn, price, code, subject, rentalp);
b2.PrintTbook();
TbookList[j] = b2; //initalizing the first element of the array to b2.
newFile << "Title: " << TbookList[j].getTitle() << "\n" << "Price: " << TbookList[j].getPrice() << "\n\n";
TbookList[j].PrintBook();
j++;
textbookCount++;
}
文本文件如下所示:
数据结构和算法分析的实用介绍,Clifford,Shaffer,0-13-028446-7,512,90.00,Computer Science,E,12.00,2001 数据库系统基础知识,Ramez,AlMasri,9-780805-317558,955,115.50,计算机科学,E,0.0,2003
答案 0 :(得分:3)
首先,几乎所有形式while (!whatever.eof())
的循环都完全被破坏了。
其次,你有我认为是一个错字:
file1.ignore();
剩下的代码是从file2
读取的,所以我猜这里file1
只是一个错字(但如果你正确地复制它,它可能是真正的来源一个问题)。
您通常希望通过为您正在阅读的类型重载operator>>
来执行此类操作:
std::istream &operator>>(std::istream &is, textbook &b2) {
getline (is, title, ',');
getline (is, authorf, ',');
getline (is, authorl, ',');
getline (is, isbn, ',');
is>> pages;
is.ignore();
is>> price;
is.ignore();
getline(is, subject, ',');
is>> code;
is.ignore();
is>> rentalp;
is.ignore(10, '\n');
return is;
}
然后你可以阅读一堆类似的对象:
std::vector<textbook> books;
textbook temp;
while (file2>>temp) {
books.push_back(temp);
temp.printbook();
// ...
}