如何从不同对象的文本文件中读取单独的行?

时间:2013-12-13 12:12:57

标签: c++

我有两个矩形对象,我试图用readcood()读取文本文件中的不同行但是当我运行它时,我从文本文件中得到相同的行。

#include<iostream>
#include<fstream>
using namespace std;

class rect{
  int xcood[3],ycood[3],x1,x2,x3,x4,y1,y2,y3,y4;
public:
  void readcood()
  {
    char dummy;
    ifstream myfile;
    myfile.open("coordinates.txt");
    for(int i=0;i<4;i++)
      {
        myfile>>xcood[i]>>dummy>>ycood[i];
      }
  }
  void printcood()
  {
    for(int i=0;i<4;i++)
      {
        cout<<xcood[i]<<"\t"<<ycood[i]<<endl;
      }
  }
};


int main()
{
  char dummy;
  string coordinates;
  rect rectangle1,rectangle2;
  rectangle1.readcood();
  rectangle2.readcood();
  rectangle1.printcood();
  rectangle2.printcood();
}

1 个答案:

答案 0 :(得分:3)

这是因为你在函数中打开文件。当函数返回时,文件流对象将被破坏,你所做的一切都将丢失。

您可以在main函数中打开它并将其(通过引用)传递给读取函数。

另一种解决方案是向open类添加rect函数,该函数打开文件,并使文件流成为该类的成员。

但是我建议的解决方案是创建自己的重载输入函数,它接受一个rect对象并读入。像

这样的东西
class rect
{
public:
    ...

    friend std::istream& operator>>(std::istream& is, rect& r)
    {
        char dummy;
        for (int i = 0; i < 3; ++i)
            is >> r.xcood[i] >> dummy >> r.ycood[i];
        return is;
    }

    ...
};

然后你可以简单地做例如。

std::ifstream file("some/path/file");
rect r1, r2;
file >> r1 >> r2;