Code::Blocks 不会打印没有 std::endl 的控制台文本
Code::Blocks does not print console text without std::endl
我正在使用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::flush
或std::endl
。
Code::Blocks是一个很棒的IDE。需要先生成应用,然后才能运行。只需先构建它,它就会按预期运行。以下是适用于旧版本的相关线程:http://forums.codeblocks.org/index.php?topic=16045.0顺便说一句,15.12 是候选版本。尝试升级到 16.01。
- std::endl,在 Python 中是否有等价物?(返回 + 刷新)
- 运算符 << 操作加载的 API for std::endl?
- 可变参数模板函数:调用没有匹配函数,std::endl
- 模板推导不适用于 std::endl?
- std::cout << glGetString(GL_RENDER) << std::endl;抛出错误但不GL_Renderer或GL_Verision,我不知道为什么?
- std::flush 不起作用,而 std::endl 可以
- 使用 std::endl 与 "n" 当 cin 和 cout 被解绑时
- C++:std::endl 和运算符的编译错误>>
- 缓冲区刷新究竟是如何工作的(std::endl 和 之间的区别)?
- 在Ostream上使用std :: endl使我的文件二进制
- std::cout doen不喜欢 std::endl 和 String in conditional-if
- 为什么模板运算符<<不推导出 std::endl?
- 在我编译的标准库中std::endl在哪里
- C++ std::endl 的多线程程序 I/O 问题
- 如有必要,如何让 std::endl 输出"rn"?
- C 无法致电STD :: endl
- 与 std::endl 的"运算符<<"不匹配,重载后
- 为什么将 std::endl 与 ostringstream 一起使用会影响输出速度
- 为什么在语句"std::cout << std::endl;"中使用时需要命名空间限定,给定依赖于参数的查找?
- 为什么要编译endl(std::cout)