因此,我的老師給了我們兩週前實驗室的解決方案,它與我提交作業時使用的不同。我將這些代碼彈出到我的地址簿程序中,但沒有打印出來,我想知道是否有人知道如何從main打印出屏幕。我已經嘗試了一些東西,但我能做的最好的事情是獲得一個條目打印出來,而不是別的。下面是我們給出的代碼:將文件IO打印到屏幕
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();
}
因此,沒有人照顧給我看,我缺少的是什麼?這個任務已經完成了,所以如果你願意,可以隨意詳細解釋它,或者只是發佈代碼,我可以弄清楚。我有點瘋狂,試圖瞭解如何使用此代碼打印。 (我的版本工作得很好,但沒有做任何這個。)謝謝
所以我應該把所有的主要?他的壞習慣說,他是在我們的職能中使用cout的堅持者。我從來不明白爲什麼,但我的問題不在於此,而僅僅是爲了做。至於seekg,我有點困惑,爲什麼它自己在那裏,但是當我問到這個問題時,他說它在他的電腦上工作,並將其留在那裏。我認爲這是因爲他不是那些抱怨成績的人的粉絲,也不是在做家庭作業時做的事情(他們確實傾向於抱怨很多,但主要是因爲他們懶得做這項工作)。無論如何,我會放棄這一點,謝謝! – 2013-05-06 05:33:03
下面是一個問題,該文件如何打印?這不僅僅是從地址簿中存儲的內容打印,不管文件中有什麼內容? – 2013-05-06 05:35:50
''在函數中不使用cout'這是很好的建議。原因是它使功能不夠靈活。你應該做什麼取決於你的目標。如果你想在你的函數中沒有cout的更清晰的代碼,那麼只需寫出正在構建的人員向量即可。 – john 2013-05-06 05:36:00