因此,我的老师给了我们两周前实验室的解决方案,它与我提交作业时使用的不同。我将这些代码弹出到我的地址簿程序中,但没有打印出来,我想知道是否有人知道如何从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