Code::Blocks 不打印没有 std::endl 的控制台文本

Code::Blocks does not print console text without std::endl

我正在使用 Code::Blocks 15.12,我的编译器是 GNU GCC 。 我正在关注 2013 年 12 月 26 日在 YouTube 上发布的 C++ 教程。 当我尝试使用与教程中的人相同的代码时:

#include <iostream>

using namespace std;

int main(){

cout << "Hello World!";

return 0;


}

我收到一个弹出窗口,上面写着:

It seems that this project has not been built yet. Do you want to build it now?

不过。当我 运行 启动新控制台应用程序时生成的标准代码:

#include <iostream>

using namespace std;

int main()
{
cout << "Hello world!" << endl;
return 0;
}

它对我来说完美无缺!

在双引号后没有 << endl; 的情况下,我是否仍然能够 运行,或者自 2013 年以来 C++ 中发生了一些变化,以至于它不再是有效代码?

我没有收到任何错误。

我一直在想问题是什么,其他人也有同样的弹窗,但他们的情况与我的不符。

Code::Blocks 很棒 IDE。一个应用程序需要先构建,然后才能 运行。只需先构建它,它就会按预期 运行。这是适用于旧版本的相关线程: http://forums.codeblocks.org/index.php?topic=16045.0 顺便说一句,15.12 是候选版本。尝试升级到 16.01。

我怀疑这是因为 Code::Blocks 在您的程序运行后在 Windows 中发出了 std::system("pause") 命令。从这个 std::flush documentation:

This manipulator may be used to produce an incomplete line of output immediately, e.g. when displaying output from a long-running process, logging activity of multiple threads or logging activity of a program that may crash unexpectedly. An explicit flush of std::cout is also necessary before a call to std::system, if the spawned process performs any screen I/O (a common example is std::system("pause") on Windows). [emphasis mine]

std::endl 做了两件事:它插入一个换行符,然后将输出流刷新到控制台。这就是为什么您只能在包含 std::endl.

的版本中看到您的文本

所以 Code::Blocks 并没有什么错,你只需要确保在程序终止之前输出 std::flushstd::endl