【发布时间】:2019-01-11 01:43:44
【问题描述】:
如您所见,在循环开始之前,我在这里有一个 cout。 Seekg 从开头开始,txt 文件中的第一个单词是“Hello”。但它不会打印出来(第一个 cout)。
当我删除 while 循环时,这不是问题,第一个单词会包含在输出中。
第一个“cout”,后面是什么都不应该打印出来吗?下一行代码(这种情况)怎么可能影响它上面的前一个“cout”?
int main()
{
string a;
ifstream myfile;
myfile.open("test.txt");
myfile.seekg(0);
getline(myfile,a);
cout << a << endl;
int z = 0;
while( a != "x" ) {
myfile.seekg(z);
getline(myfile,a);
z += a.size() + 2;
cout << a << endl;
}
}
我还应该提到该文件以“hello”开头,并且包含 600 个换行符和每个换行符上的一个单词。最后一行包含“x”。
[编辑]
这是另一个例子。我相信这会有所帮助。这是我现在的代码:
int main() {
string a;
ifstream myfile;
int newpos = 0;
myfile.open("example.txt");
myfile.seekg(newpos);
getline(myfile,a);
while (a != "x") {
myfile.seekg(newpos);
getline(myfile,a);
cout << a << endl;
newpos += a.size() + 2;
}
}
这是我的文本文件:
hello
johan
nils
erik
john
x
输出与上面的文本文件完全相同。(到目前为止一切顺利)。
但是,然后我在列表/文本文件中添加了大约 600 个新名称(与上面的结构相同,没有更改,只是添加了新名称)。顶部只有一个“你好”,所以我可以跟踪开始,最后一个 x。
这仍然适用于大约 100 个新名称,hello 仍然在开头打印出来。但是当我添加大约 600 个新名称时,不会包括你好(第一个 cout)。这是为什么呢?
【问题讨论】:
-
1.您没有检查文件是否已成功打开。 2.先seekg没用。 3.什么编译器? 4. 你到底想达到什么目标?
-
无法复制。为我打印第一行两次。
-
@Mat 我还应该提到该文件以“hello”开头,但包含 600 个换行符和每个换行符上的一个单词。最后一行包含“x”
-
@ZDF 确定。但是如果 seekg 在这里没用真的很重要吗,它仍然从 0 开始,并且第一个“cout”应该被打印出来,无论它之后的循环中发生了什么?如果我错了,请纠正我
-
1.它应该没有效果。 2.只要你不说明你的编译器,你不发布文件,没有人可以检查它。