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

标签 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();
}

最佳答案

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

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

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

不过,我推荐的解决方案是制作您自己的重载输入函数,它接受一个 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;

关于c++ - 如何从不同对象的文本文件中读取单独的一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20566257/

相关文章:

c++ - 我应该如何在 Eigen 中初始化一个大矩阵的内容?

c++ - g++ 在正常编译时会产生段错误,但在 -g 时不会

c++ - 对 `std::thread::_M_start_thread CMake 的基准 undefined reference

c++ - 象限查询

c++ - QVariant::isNull() 和自定义类型

c++ - 使用自定义构造函数初始化 C++ 类的实例作为 Objective C 类成员?

c++ - 奇怪的测试结果。当我不使用时,我的 win32 程序运行得更慢

c++ - 我可以复制构造带有错误信息的 boost::exception 吗?

c++ - C++中的二叉树中序遍历

c++ - 在不同的范围内新建和删除