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