そのため、先生は数週間前に行ったラボのソリューションを教えてくれましたが、課題を提出したときに使用していたものとは異なります。このコードをアドレス帳プログラムに入力しましたが、何も出力されませんでした。これをメインから画面に出力する方法を誰か知っているかどうか疑問に思っていました。私はいくつかのことを試しましたが、私ができる最善の方法は、印刷するエントリを 1 つだけ取得することです。与えられたコードは次のとおりです。
void addressBook::showAll2(string fName)
{
PERSON p;
PEOPLE2 tp;
ifstream inData(fName.c_str(), ios::in);
if(inData.fail())
throw AddressBookException("Cannot open file to read ");
people.clear();
int i = 0;
while(!inData.eof())
{
inData.seekg(i * sizeof(PEOPLE2));
inData.read(reinterpret_cast<char *>(&tp), sizeof(PEOPLE2));
p.fName = tp.fName2;
p.lName = tp.lName2;
p.Address = tp.Address2;
people.push_back(p);
i++;
}
inData.close();
return;
}
私が変更したのは例外のスローだけです (現在のプロジェクト)。これは以前はブール関数で、true または false を返します。彼はその部分に関与していないため、コード形式のメインは提供されませんでした。これを画面に出力する方法を誰かが知っているかどうか疑問に思っています。私はこれに変更しようとしました:
void addressBook::showAll2(string fName, string &str)
{
PERSON p;
PEOPLE2 tp;
ifstream inData(fName.c_str(), ios::in);
if(inData.fail())
throw AddressBookException("Cannot open file to read ");
people.clear();
int i = 0;
while(!inData.eof())
{
inData.seekg(i * sizeof(PEOPLE2));
inData.read(reinterpret_cast<char *>(&tp), sizeof(PEOPLE2));
p.fName = tp.fName2;
p.lName = tp.lName2;
p.Address = tp.Address2;
people.push_back(p);
i++;
inData >> str;
}
inData.close();
return;
}
そして主に私はこれを持っています:
void printFile() //prints stored file info to screen
{
string str;
addressBook *newBook = addressBook::newbookInst();
Menu *m = Menu::menuInst();
try
{
newBook->showAll2("addressbook", str);
cout << str << '/n' << endl;
}
catch(exception e)
{
cerr << e.what();
}
m->waitKey();
}
それで、誰かが私が欠けているものを見せてくれますか? 割り当てはすでに完了しているので、必要に応じて詳細に説明してください。または、コードを投稿してください。私はそれを理解できます。このコードでこれを印刷する方法を理解しようとすると、少し頭がおかしくなりそうです。(私のバージョンは問題なく動作しましたが、これは何もしません。)ありがとう