C ++第一个cout将不会被打印

时间:2018-08-03 08:04:15

标签: c++ cout

如您所见,在循环开始之前,我在这里有一个提示。 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个新名称时,您将不会包括问候(第一个提示)。为什么会这样?

1 个答案:

答案 0 :(得分:3)

  

但是当我添加大约600个新名称时,您将不会加入问候(第一个提示)。
为什么?

看起来您的 Screen Buffer Size 不够大,无法显示所有缓冲区行。因此,当打印的行数超过特定高度时,控制台会开始忽略以前打印的行,导致您认为它并未全部打印。

由于您使用的是Windows,因此可以尝试将其增加

对于所有控制台应用程序

  • 右键单击控制台的标题,然后选择默认值
  • 转到布局标签
  • 在屏幕缓冲区大小下,将 Height 增大为( 9001
  • 点击确定,然后重新启动控制台

针对特定应用

  • 右键单击控制台的标题,然后选择属性
  • 转到布局标签
  • 在屏幕缓冲区大小下,将 Height 增大为( 9001
  • 点击确定

请注意,大多数Windows操作系统中的默认高度为 9001