人员类应具有以下功能: •构造函数 •析构函数 - 可选 •获取 - 从输入流中读取名字,姓氏和年龄 •Put - 将姓氏,名字和年龄写入输出流
我试图实现get(),以便它可以从文件中读取文本,但我有点卡住了。
#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;
}
person.h
#include <iostream>
using namespace std;
// Person header.h
class person
{ public:
person(); // Empty constructor.
bool get(istream &); // Read input from file.
void put(ostream &); // Write to an output stream.
// Operators to compare.
bool operator < (person); //lesser.
bool operator > (person); //greater.
bool operator == (person); //equal.
string fName; //First Name.
string lName; //Last Name.
int age; //Age.
};
的main.cpp
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
#include "person.h"
void main()
{
int i,x;
string name;
fstream infile;
person info[20];
//Open File.
cout << "Enter the file name: ";
cin >> name;
infile.open(name.data(),ios::in);
// loop
while (!infile.eof())
{
if(infile.good())
{
for (i = 0; i < 20; i++)
{
info[i].get(cin);
}
};
};
infile.close();
}
每当我尝试使用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
谢谢。
答案 0 :(得分:-1)
如果我正确阅读您的代码,这是因为您在info[i].get(cin)
时正在呼叫info[i].get(infile)
。它现在的样子,它试图从控制台读取输入,因此是#34;悬挂&#34;。
另外,我认为for (i = 0; i < 20; i++)
循环在这里并不好。这里更好的方法是使用vector
来保持正确阅读person
。
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