1

機能に問題があります。保存されている本のリストを印刷することになっています

void PrintBooklist(vector<BookList>&book)
{
    for(int i=0; i<book.size(); i++)
    {   
        if (book[i].memNumBor = -1)
            cout<<book[i].title<<endl;
    }
}

ただし、「タイトル」という単語が出力されます。数回ですが、空白のままにします。最後にサイズをチェックして、追加されたものが押し戻されていることを確認しますが、それを読み取ることができません。前もって感謝します!

int main()
{   
    vector<BookList>book;
    vector<MemInfo>member;
    string memberfile;
    string bookfile;
    ofstream fout;
    ifstream fin;

    cout << "\n\t\t\tWelcome to Library Management Services!"<<endl<<endl;

    Read_Member(member, fin, memberfile);
    Read_Book(book, fin, bookfile);

    SignIn(member, book, fin, fout, memberfile, bookfile); 
    return 0;
}

void Read_Member(vector<MemInfo> &member, ifstream &Fin, string &memberfile) 
{
    MemInfo temp;
    cout<<"Please enter the name of the file that contains the member information: ";
    getline(cin,memberfile);

    Fin.open(memberfile.c_str());

    if(Fin.fail())
    {
        cout<<endl<<"File containing the member information does not exist.\n"<<endl;
        exit (0);
    }

    ReadInfoMem(Fin);
    while (!Fin.eof())
    {   
        member.push_back(temp);
        ReadInfoMem(Fin);
    }
    Fin.close();

    for (int i=0; i<member.size(); i++)
    {
        cout<<endl<<member[i].lName<<endl;
    }
}
4

1 に答える 1

2

あなたが行を割り当てます memNumBor

if (book[i].memNumBor = -1)

あなたが望むのは平等チェックです

if (book[i].memNumBor == -1) // note the double '=='

アップデート:

さらにコードを追加するための編集の後、次のことに気付きました。

MemInfo temp;

// ...snip...

ReadInfoMem(Fin);            // presumably this reads the member info from 'Fin'?
while (!Fin.eof())
{   
    member.push_back(temp);  // and you add an *empty* 'temp' object to 'member'
    ReadInfoMem(Fin);
}

何が起こっているのかは、ローカル変数から読み取っていることですが、ベクトルに追加する囲み関数に入力されたものを返していないことを期待FinReadInfoMemていますMemInfoMemInfomember

return-by-valueまたはpass-by-reference のいずれかをお勧めします。

値渡し

MemInfo ReadInfoMem(ifstream& fs)
{
    MemInfo temp;
    // populate temp
    return temp;
}

// in your calling code:
temp = ReadInfoMem(Fin);

参照渡し

void ReadInfoMem(ifstream& fs, MemInfo& temp)
{
    // populate temp
}

// in your calling code:
ReadInfoMem(Fin, temp);
于 2012-12-03T02:12:15.463 に答える