0

私の問題の要点は、行の終わりを除いて#で区切られたフィールドを持つファイルを読んでいることです。ブック構造体(forループを使用してデータファイル/ブックのリスト全体を(理論的に)調べます)に読み込んでいるフィールドのprintステートメントを見ると、すべて同じ値になっています。たとえば、データファイルをさらに読み進める代わりに、まったく同じIDが200個あり、その後にまったく同じタイトルが200個あります。

正確なコードは次のとおりです。

void loadTable(book table[], int size){
    for (int i = 0; i < size; i++){
        book newBook;
        ifstream ifs("inventory.txt");
        string bit;
        getline(ifs, bit, '#');
        newBook.bookId = atoi(bit.c_str());
        cout << "BookID: " << newBook.bookId;
        getline(ifs, bit, '#');
        newBook.title = bit;
        cout << "Title: " << newBook.title;
        getline(ifs, bit, '#');
        newBook.author = bit;
        getline(ifs, bit, '#');
        newBook.cost = atof(bit.c_str());
        getline(ifs, bit, '#');
        newBook.price = atof(bit.c_str());
        getline(ifs, bit);
        newBook.quantity = atoi(bit.c_str());
        loadBook(table, newBook, size);
    }

}

そして正確な結果:

tiesBookID: 116807Title: A Tale of Two CitiesBookID: 116807Title: A Tale of Two
CitiesBookID: 116807Title: A Tale of Two CitiesBookID: 116807Title: A Tale of Tw
o CitiesBookID: 116807Title: A Tale of Two CitiesBookID: 116807Title: A Tale of
Two CitiesBookID: 116807Title: A Tale of Two CitiesBookID: 116807Title: A Tale o
f Two CitiesBookID: 116807Title: A Tale of Two CitiesBookID: 116807Title: A Tale
 of Two CitiesBookID: 116807Title: A Tale of Two CitiesBookID: 116807Title: A Ta
...
4

1 に答える 1

5

なぜ常にforループ内でファイルを開くのですか?最初にファイルを開き、次にファイルをループして、ファイルから読み取った内容を構造体に配置する必要があります。この場合、ファイルを何度も開いている間、ファイルを閉じなかったため、最初の本に関する情報を含む最初の数行を常に読んでいます。これは良くありません。

于 2013-03-15T02:53:41.847 に答える