【发布时间】:2020-10-24 03:42:48
【问题描述】:
我正在编写一个程序来在文件中搜索一个名称,然后覆盖该名称后面的一些数字。我目前的方法是从fstream 读取直到找到名称,然后使用相同的fstream 覆盖该点之后的数字。但是,光标位置似乎错误。这是一个测试程序:
#include <fstream>
#include <iostream>
int main() {
std::string name;
std::fstream file("test.txt", std::fstream::in | std::fstream::out);
while (file >> name) {
if (name == "Jason") {
file << "A";
break;
}
}
file.close();
}
当 test.txt 只包含一行时,输出似乎是正确的; 'A' 就在'Jason' 之后
test.txt:
Jason -1395354120 0
结果:
JasonA-1395354120 0
但是,当有多行时,'A' 会被写入数字的中间:
test.txt:
Jason -1395354120 0
Bob 1266020048 0
Jason -1395354120 0
Bob 1266020048 0
Jason -1395354120 0
Bob 1266020048 0
结果:
Jason -139A354120 0
Bob 1266020048 0
Jason -1395354120 0
Bob 1266020048 0
Jason -1395354120 0
Bob 1266020048 0
我希望它总是写在名字之后。我该如何解决这个问题?
编辑:如果我将 file << "A"; 替换为 std::cout << file.tellg() << " " << file.tellp() << std::endl;,则表明写入和读取位置都在 37,这是第二个示例中 A 出现的位置。我对此感到困惑,因为我认为 >> 运算符应该在“Jason”之后停止阅读,应该是 31。
【问题讨论】: