【问题标题】:endl, '\t' and '\n' dont work after 15 tabsendl、'\t' 和 '\n' 在 15 个制表符后不起作用
【发布时间】:2021-08-29 08:41:07
【问题描述】:

如果您编译并运行此代码,则不会执行 endl。当您将终端弹出全屏时,您将得到 0hello。

#include <iostream>
int main() {
    using namespace std;
    
    for (int i = 0; i < 15; i++) {
        cout  << '\t';
    }
    cout << "0" << endl << "hello";

    return 0;
}

但是,如果您使用cout &lt;&lt; "00" &lt;&lt; endl &lt;&lt; "hello";,那么它可以正常工作。我不明白为什么会发生这种情况,也不知道如何解决。

【问题讨论】:

  • 无法复制。 hello 按我的预期出现在新线路上(godbolt 也是)
  • 请问什么操作系统和编译器?
  • Windows 10 和我使用 ms visual studio

标签: c++ string io


【解决方案1】:

我假设您从默认终端宽度为 120 个字符的 Visual Studio 运行此程序。

一个制表符是 8 个字符。 8x15 = 120。

如果您查看输出,在 0 之前有一个空白行。它正在打印制表符:只是您已到达行尾,因此它已移至下一行。

如果您将终端宽度更改为 80 个字符,您可能会得到不同的结果 - 一个空白行和页面中心的 0。

【讨论】:

  • 有趣的是,0 打印在位置 120 而不是 121。最后一个制表符只有 7 个字符宽,并且新行被丢弃。我通过将 width 属性更改为 122 来阻止这种情况的发生。0 打印在位置 121 并且新行按预期工作。它与屏幕缓冲区的大小有关。
  • 我在VS2010上试了一下,下一行出现了0。
  • 在运行编译后的可执行文件时,输出不受命令提示符大小的影响,但在使用 Visual Studio 调试器运行时则不受此影响。我正在使用 2019 社区。​​span>
猜你喜欢
  • 2016-09-17
  • 1970-01-01
  • 2015-11-07
  • 2020-04-08
  • 2017-02-06
  • 2023-03-21
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多