我已经写了一些文件,现在我想阅读并查看屏幕上的内容。我编写了要查看的功能,但它没有显示任何内容。下面是视图函数的代码。我正在测试只查看2个变量。底部调用的显示函数来自父类,它显示来自其他类的所有变量
void ViewAll(string name, Intervention inte)
{
ifstream clientfile(name, ios::in);
if (clientfile)
{
int hour, min, day, month, yr, snum, age;
string fname, lname, interNo, problem, clinic, area, ex, li, type, breed, gender, sname, town, pay;
while (clientfile && !clientfile.eof())
{ //needed to loop through each record in the file
clientfile >> interNo;
clientfile >> clinic;
clientfile >> lname;
clientfile >> fname;
clientfile >> pay;
clientfile >> snum;
clientfile >> sname;
clientfile>> town;
clientfile >> area;
clientfile >> ex;
clientfile >> li;
clientfile >> type;
clientfile >> breed;
clientfile >> gender;
clientfile >> problem;
clientfile >> age;
clientfile >> day;
clientfile >> month;
clientfile >> yr;
clientfile >> hour;
clientfile >> min;
if (fname == inte.getClient().getFname())
{
break;
}
}
//after record is found, create record
inte.getClient();
inte.display();
system("pause");
}
//return inte;
}
答案 0 :(得分:0)
您是否正在尝试阅读inte的成员?如果是这样,你将不得不通过引用传递inte,这样你就可以修改传递的对象,然后阅读
clientfile >> inte.interNo;
您创建的所有局部变量似乎都没用。
答案 1 :(得分:0)
作为一个起点,我建议以不同的方式构建代码。我从operator>>
和operator<<
的重载开始,分别为一个Intervention
读取和写入数据:
std::istream &operator>>(std::istream &is, Intervention &i) {
is >> i.interNo;
is >> i.clinic;
is >> i.lname;
is >> i.fname;
// ...
is >> i.min;
return is;
}
...并相应地operator<<
:
std::ostream &operator>>(std::ostream &os, Intervention const &i) {
os << i.interNo;
os << i.clinic;
os << i.lname;
os << i.fname;
// ...
os << i.min;
return os;
}
有了这些记录,我们可以使用std::copy
和istream_iterator
简单地调用ostream_iterator
来显示文件中的所有记录:
std::ifstream in(name);
std::copy(std::istream_iterator<Intervention>(in),
std::istream_iterator<Intervention>(),
std::ostream_iterator<Intervention>(std::cout, "\n"));
这消除了代码中包含的一些问题,例如尝试使用:
while (clientfile && !clientfile.eof())
像while (!somefile.eof())
这样的代码几乎是一个有保障的错误(“几乎”只是因为它可以编写其他代码,这将掩盖这个代码没有的事实并且无法正常工作)。