如您所见,在循环开始之前,我在这里有一个提示。 Seekg从头开始,并且txtfile中的第一个单词是“ 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个新名称(与上面的结构相同,没有任何更改,只是添加了新名称)。顶部只有一个“ hello”,因此我可以跟踪开始,而末尾则是一个x。
这仍然适用于大约100个新名称,开始时仍会打印出问候。但是,当我添加约600个新名称时,您将不会包括问候(第一个提示)。为什么会这样?
答案 0 :(得分:3)
但是当我添加大约600个新名称时,您将不会加入问候(第一个提示)。
为什么?
看起来您的 Screen Buffer Size
不够大,无法显示所有缓冲区行。因此,当打印的行数超过特定高度时,控制台会开始忽略以前打印的行,导致您认为它并未全部打印。
由于您使用的是Windows,因此可以尝试将其增加
对于所有控制台应用程序
Height
增大为(即 9001
)针对特定应用
Height
增大为(即 9001
)请注意,大多数Windows操作系统中的默认高度为 9001
。