如何显示顺序文件的内容?

时间:2013-11-03 01:47:38

标签: c++ filestream

我已经写了一些文件,现在我想阅读并查看屏幕上的内容。我编写了要查看的功能,但它没有显示任何内容。下面是视图函数的代码。我正在测试只查看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;
}

2 个答案:

答案 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::copyistream_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())这样的代码几乎是一个有保障的错误(“几乎”只是因为它可以编写其他代码,这将掩盖这个代码没有的事实并且无法正常工作)。