C++ 使用成员函数从文件加载数据
person类应具有以下功能: •建造商 •析构函数-可选 •获取-从输入流中读取名字、姓氏和年龄 •Put-将姓氏、名字和年龄写入输出流 我试图实现get(),以便它可以从文件中读取文本,但我有点卡住了C++ 使用成员函数从文件加载数据,c++,C++,person类应具有以下功能: •建造商 •析构函数-可选 •获取-从输入流中读取名字、姓氏和年龄 •Put-将姓氏、名字和年龄写入输出流 我试图实现get(),以便它可以从文件中读取文本,但我有点卡住了 #include <iostream> #include <string> #include "person.h"; using namespace std; person::person() { fName = "Default"; lName =
#include <iostream>
#include <string>
#include "person.h";
using namespace std;
person::person()
{
fName = "Default";
lName = "Default";
age = 0;
}
bool person::get(istream &in)
{
in >> fName >> lName >> age;
return(in.good());
}
// Output
void person::put(ostream &out)
{
out << lName << fName << age;
}
这是我的档案资料
Ann Christensen 70
Carlos Morales 68
David Bowman 45
Frank Bowman 37
John Bowman 30
Kathleen Gueller 34
Mark Bowman 42
Mark Bowman 13
Richard Bowman 47
Susan Cox 36
谢谢。如果我正确阅读了您的代码,这是因为您正在调用
info[I].get(cin)
,而您想执行info[I].get(infle)
。现在,它试图从控制台读取输入,因此是“挂起”的
另外,我认为(I=0;I<20;I++)的循环在这里是不好的。这里更好的方法是使用向量
来保持正确阅读的人
s
std::vector<person> info;
//...
// loop
while (!infile.eof())
{
if(infile.good())
{
person new_person;
if (new_person.get(infile))
info.push_back(new_person);
}
}
列表中的10个人,尝试在循环中读取20个,该循环不测试输入流的状态和/或每次读取后不测试流状态的get
函数返回的结果。
infile >> info[i].lName >> info[i].fName >> info[i].age;
Ann Christensen 70
Carlos Morales 68
David Bowman 45
Frank Bowman 37
John Bowman 30
Kathleen Gueller 34
Mark Bowman 42
Mark Bowman 13
Richard Bowman 47
Susan Cox 36
std::vector<person> info;
//...
// loop
while (!infile.eof())
{
if(infile.good())
{
person new_person;
if (new_person.get(infile))
info.push_back(new_person);
}
}
person new_person;
while (new_person.get(infile)) //you can keep overwriting the object
info.push_back(new_person); //because vector makes a copy of it