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

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

本文关键字:endl std 控制台 文本 Blocks 打印 Code      更新时间:2023-10-16

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

#include <iostream>
using namespace std;
int main(){
cout << "Hello World!";
return 0;

}

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

看来这个项目还没有建成。你想现在建造它吗?

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

#include <iostream>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
return 0;
}

它对我来说完美无缺!

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

我没有收到任何错误。

真的一直在试图找出问题所在,其他人也有相同的弹出窗口,但他们的情况与我的情况不匹配。

我怀疑这是因为 Code::Blocks 在程序运行后在 Windows 中发出std::system("pause")命令。从这个标准::刷新文档:

该机械手可用于产生不完整的输出线 立即,例如,当显示长时间运行的进程的输出时, 记录多个线程的活动或记录程序的活动 可能会意外崩溃。std::cout 的显式冲洗也是 在调用 std::system 之前是必需的,如果生成的进程 执行任何屏幕 I/O(一个常见的例子是 std::system("pause") 视窗)。[强调我的]

std::endl执行两项操作:插入换行符,然后将输出流刷新到控制台。这就是为什么您只能在包含 std::endl 的版本中看到您的文本。

所以Code::Blocks并没有真正的问题,你只需要确保在程序终止之前输出一个std::flushstd::endl

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