C++:从 txt 文件读取和写入的成员函数
Posted
技术标签:
【中文标题】C++:从 txt 文件读取和写入的成员函数【英文标题】:C++: Member functions that read and write from txt file 【发布时间】:2017-03-14 18:16:54 【问题描述】:对于这个问题被问得多么糟糕,我提前道歉,我在这里真的很挣扎。 我正在用 C++ 编写一个名为 Point 的类,其中包含私有成员 x 和 y,以及成员函数 getX、getY、setX、setY、读写。除了读写之外,我什么都能做,因为我对输入/输出文件感到很糟糕。我有以下读写声明:
void read(istream& ins);
void write(ostream& outs);
RME如下供阅读:
* Requires: ins is in good state.
* Modifies: ins, x, y.
* Effects: Reads point in form (x,y)
对于写:
* Requires: outs is in good state.
* Modifies: outs.
* Effects: Writes point in form (x,y).
'read' 从给定文件“data1.txt”中获取有序点,如 (1, 5)、(2, 7) 等,并提取 x 和 y 分量(至少,我相信这是应该做)。为我提供了一个测试套件供阅读:
void test_point()
Point pt1;
pt1.setX(15);
cout << "pt1 is: " << pt1 << endl;
ifstream input_file;
input_file.open("data1.txt");
pt1.read(input_file);
cout << "pt1 is: " << pt1 << endl;
return;
我真的不知道如何编写读取函数。我尝试定义字符 a、b、c 和整数 u、v 并执行:
ins >> a >> u >> b >> v >> c;
但这没有用。有人可以帮我看看如何实现吗?
【问题讨论】:
ins >> x >> y;
@MaximEgorushkin 是否可以在文本文件中的有序对写为 (x, y) 的情况下进行这项工作?括号和逗号会发生什么变化?
另外,我如何阅读更多的订购点?写入后我会查看读取功能吗?
您可以发布您的输入文件的样本吗?
【参考方案1】:
您的问题中缺少很多东西,您需要这样才能使用此类。一方面,读取有序点文件不应该作为成员函数来实现。如果有的话,您可以使用这样的循环:
while(input_file)
// set a point to have members x, y that were read from file
// store this point in a vector of points
否则没有合理的方法来存储您从文件中读取的一堆点。
您在 read 函数中对这个解决方案的想法肯定会奏效(假设字符 a、b、c 和 ints u、v):
input_stream >> a >> u >> b >> v >> c;
事实上,使用您给我们的格式(以 ifstream 作为参数),在 read 函数中确实不需要太多其他内容,因为它会改变对象并且不需要返回任何内容.您的实现是在结构化文件中解析此类“记录”的最简单方法。
阅读完所有这些后,将调用者对象的 x 坐标设置为 u,将 y 坐标设置为 v。这应该是一个 void 函数,不需要返回任何内容,但应该改变它被调用的 Point 对象为了。这个成员函数应该在我提到的循环中的一个临时点对象上调用,然后将该对象添加到点向量中:
vector<Point> points;
while(...)
// declare Point
// initialize with values from read
points.push_back(//the point you just created);
如果事实上您需要能够读取多个点。
总而言之,您的读取功能需要:
首先要检查 ifstream 是否真的很好,我还没有提到(但这是您的要求之一):
if (!input_file) //however you want to handle this error
要读入的临时 char 和 int 变量(用作缓冲区)(顺便说一句,您甚至可以直接读入 x 和 y,而不是读入 u 和 v 然后复制,只是说)。
如果您选择不直接读取 x 和 y,则必须将 u 和 v 值分配给 x 和 y。现在你的对象已经完成了。
对于 write 函数,您将使用作为参数传递给 write 函数的 ofstream 的名称而不是 std::cout,并使用您显示的格式写入记录。这(本质上)与打印到控制台没有什么不同,除了输出在文本文件上。
注意:确保您了解 iostream 对象(istream、ostream)和 fstream(ifstream、ofstream、fstream)对象之间的区别,在这种情况下更可取。
【讨论】:
以上是关于C++:从 txt 文件读取和写入的成员函数的主要内容,如果未能解决你的问题,请参考以下文章