eof() function not working c++ stuck with infinite loop [duplicate]

a 夏天 提交于 2020-01-05 06:39:20

问题


Possible Duplicate:
Why is iostream::eof inside a loop condition considered wrong?

im having a problem with the eof() function. my loop is not reading the end of the file that im reading from thus leaving me with an infinite loop. Any help or insight would be greatly appreciated. thanks

 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++;
}

the text file looks like this:

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, Computer Science, E, 0.0, 2003


回答1:


First of all, almost any loop of the form while (!whatever.eof()) is completely broken.

Second, you have what I'm going to assume is a typo:

file1.ignore();

The rest of the code is reading from file2, so I'm going to guess file1 is just a typo here (but if you've copied it correctly, it could be the real source of a problem).

You usually want to do things like this by overloading operator>> for the type you're reading:

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;
}

Then you can read in a bunch of objects something like:

std::vector<textbook> books;

textbook temp;

while (file2>>temp) {
    books.push_back(temp);
    temp.printbook();
    // ...
}


来源:https://stackoverflow.com/questions/12792079/eof-function-not-working-c-stuck-with-infinite-loop

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!