【问题标题】:White space on the end of output string not printing with the string, but rather with the next printed line after it输出字符串末尾的空白不与字符串一起打印,而是与它之后的下一个打印行一起打印
【发布时间】:2020-01-03 18:17:33
【问题描述】:

我尝试打印要求用户输入的行,获取输入,然后再次打印一些行。问题是,在我得到输入后,第一行打印行末尾的空白不是打印在行尾,而是打印在第二行打印行的开头。

我对 C++ 完全陌生,所以我不能真正尝试太多,但我尝试打印没有提示用户输入的部分的代码,它打印的空间很好,但是当我添加 @987654323 @ 空格 get 被发送到第二行的开头。

我的代码:

    int input;
    std::cout << "Enter your favorite number between 1 and 100: ";
    std::cin >> input;
    std::cout << "Amazing... That's my favorite number too... wow..." << std::endl;

我希望输出是

Enter your favorite number between 1 and 100: //some input
Amazing... That's my favorite number too... wow...

(注意//some input前面的空格)

相反,我得到了

Enter your favorite number between 1 and 100://some input
 Amazing... That's my favorite number too... wow...

(注意Amazing前面的空格)

编辑:如果可以连接,我正在使用 Clion。另外,我尝试在 powershell 上运行可执行文件,它按预期工作,没有问题,所以这与 Clion 终端有关。另外,我使用的是 Windows 10 作为我的操作系统。

第二次编辑:将我的发现添加到我的答案中。

【问题讨论】:

  • 这太令人惊讶了。把第一行输出改成:std::cout &lt;&lt; "Enter your favorite number between 1 and 100: " &lt;&lt; std::flush;是不是也一样?
  • 这可能与缓冲/非缓冲输出有关。我发现了以下关于此的 Q/As:SO: Buffered vs unbuffered IO 和(更具体为 std::coutSO: Is std::cout buffered?。尽管如此,我仍然感到惊讶的是,最后一个空间可能会被缓冲到 std::cin...
  • @Scheff 我尝试使用&lt;&lt; std::flush;,但它仍然这样做。
  • 真的很疯狂。什么操作系统?什么编译器?什么IDE(以防万一)?好的,我明白了 - CLion。
  • 我最后一个绝望的想法:本地化问题?如果你有希伯来语作为本地化,那么结合 LtoR 和 RtoL 输出可能会有额外的魔力......(实际上,我没有任何经验,除了听说某些本地化强制从右到左布局......);-)

标签: c++ stdout clion


【解决方案1】:

你确定吗?我在在线 shell 和本地机器上都试过了,它按预期工作。

【讨论】:

  • 是的,可能是我的设置有问题。我用的是Clion,可以连接吗?
  • 从他们的文档中不清楚他们是使用默认 bash 还是自定义,这也很大程度上取决于您使用的操作系统,因为 windows 中的 cmd 与 linux 上的 cmd 具有不同的功能。
  • 尝试将您的默认终端更改为 powershell stackoverflow.com/questions/20949892/…
  • 原来不是终端问题,而是 Run 终端的问题。不太确定我能用它做什么
【解决方案2】:

这似乎是 Clion 缓冲输入的问题。看到这个问题:https://youtrack.jetbrains.com/issue/CPP-7437

【讨论】:

  • 肯定是这个问题,但不幸的是,这似乎是一个未解决的问题。
【解决方案3】:

检查后发现这只发生在 Clion Run 终端上,所以这与它完全有关。我目前正在尝试弄乱设置。如果我找到它,我会在这里发布解决方案和解释。

编辑:正如一条评论中提到的,这可能是这里提到的问题https://youtrack.jetbrains.com/issue/CPP-7437

在任何情况下,这都是与 Clion 相关的问题,而不是 C++ 问题。

【讨论】:

    【解决方案4】:

    当您使用 CLion 时,您可以尝试禁用 PTY(帮助 | 查找操作 > 输入“注册表” > 打开注册表 > 查找并禁用 run.processes.with.pty 选项)

    CLion moving space into new line

    【讨论】:

      【解决方案5】:

      此问题仅适用于第二行,如果您将该行留空,则该问题将得到解决。不了解 C++,但对于 C,您必须在 print 语句之前添加: printf("\n");

      【讨论】:

        猜你喜欢
        • 2012-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-24
        • 1970-01-01
        • 1970-01-01
        • 2021-07-03
        • 2018-08-11
        相关资源
        最近更新 更多