0

次のファイルから情報を読み取ろうとしています。

The Firm
Dell
512
Fundamentals of Computer Graphics
A K Peters, Ltd.
662
The C++ Programming Language
Addison-Wesley Professional
911
Northwest Airlines
Plymouth Toy & Book
96
Lonely Planet: Europe on a Shoestring
Lonely Planet Publications
1324
…

このファイルには、最初の行がタイトル、2 行目が出版社、3 行目がページ数の書籍がリストされています。5 冊の書籍について繰り返されます。情報を読み取って Library クラスのベクターに格納しようとしています。

class book

{


public:

    book();


    book(string t, string p, int num);


    string getTitle();
    string getPublisher();
    int getPageNum();


    void setTitle(string t);
    void setPublisher(string p);
    void setPageNum(int num);


    string title;
    string publisher;
    int num_of_pages;

};



  class library
    {
    public:
        vector<book> collection;

        bool contains(string title);

        void addBook(book b);

        void readFile(string fileName);
    }

readFile 関数は次のとおりです。

   void library::readFile(string fileName)
    {
        ifstream infile;
        infile.open(fileName.c_str());
        if (infile.fail())
        {
            cout<<"Error opening file."<<endl<<endl;
            exit(1);
        }

       book addition;
string line;

while (!infile.eof())
{
    getline(infile, addition.title);
    getline(infile, addition.publisher);
    getline(infile, line);
    addition.num_of_pages=atoi(line.c_str());
    collection.push_back(addition);  
}


        collection.push_back(addition);


    }

最後の問題: 出力が正しく機能していません。ファイル内のすべてがタイトルの下にリストされます。

ostream &operator <<(ostream& out, const book& b1)
{
    out<<"TITLE: "<<b1.title<<endl;
    out<<"PUBLISHER: "<<b1.publisher<<endl;
    out<<"NUMBER OF PAGES: "<<b1.num_of_pages<<endl;

    return out;
}

メインコード:

int i;
                for (i=0; i<book_library.collection.size(); i++)
                {
                    cout<<book_library.collection[i]<<endl;
                }

出力:

TITLE: The Firm
Dell
512
Fundamentals of Computer Graphics
A K Peters, Ltd.
662
The C++ Programming Language
Addison-Wesley Professional
911
Northwest Airlines
Plymouth Toy & Book
96
Lonely Planet: Europe on a Shoestring
Lonely Planet Publications
1324
\311
PUBLISHER: 
NUMBER OF PAGES: 0
4

2 に答える 2

1

1 つの簡略化は、をgetline返すため、条件istreamで直接テストすることです。while

while (getline(infile, addition.title)) {
    getline(infile, addition.publisher);
    getline(infile, line);
    addition.num_of_pages = atoi(line.c_str()); // string -> int
    collection.push_back(addition);  // you should push_back in the while loop
}
于 2013-05-08T02:17:14.537 に答える