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

テキストファイルは次のようになります。

データ構造とアルゴリズム分析の実用的な紹介、クリフォード、シャファー、0-13-028446-7、512、90.00、コンピュータサイエンス、E、12.00、2001データベースシステムの基礎、ラメズ、アルマスリ、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 に答える