Функция eof () не работает C ++ застрял с бесконечным циклом

Возможный дубликат:
Почему 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++;
}

текстовый файл выглядит так:

Практическое введение в структуры данных и анализ алгоритмов, Clifford, Shaffer, 0-13-028446-7, 512, 90.00, Computer Science, E, 12.00, 2001
Основы систем баз данных, Рамез, AlMasri, 9-780805-317558, 955, 115.50, компьютерные науки, E, 0,0, 2003

1

Решение

Прежде всего, практически любая петля вида 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();
// ...
}
3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector