Saturday 6 July 2019

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










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



Answer



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

textbook temp;

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

}

No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...