1

可能重复:
为什么循环条件内的 iostream::eof 被认为是错误的?

我遇到了 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++;
}

文本文件如下所示:

A Practical Introduction to Data Structures and Algorithim Analysis, Clifford, Shaffer, 0-13-028446-7, 512, 90.00, Computer Science, E, 12.00, 2001 Fundamentals of Database Systems, Ramez, AlMasri, 9-780805-317558, 955 , 115.50, 计算机科学, E, 0.0, 2003

4

1 回答 1

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();
    // ...
}
于 2012-10-09T02:44:50.250 回答