我正在使用 Code :: Blocks 15.12 ,我的编译器是 GNU GCC 。 我将于2013年12月26日在YouTube上关注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 ++中的某些内容发生了变化,以至于它不再是有效的代码了?
我没有收到任何错误。
我一直在努力找出问题所在,其他人也有同样的弹出窗口,但是他们的情况与我的情况不符。
答案 0 :(得分:2)
我怀疑它是因为Code :: Blocks在程序运行后在Windows中发出std::system("pause")
命令。从std::flush documentation:
此操纵器可用于产生不完整的输出线 立即,例如当显示长时间运行的进程的输出时, 记录多个线程的活动或记录程序的活动 可能会意外崩溃。 std :: cout的显式刷新也是 在调用std :: system之前必要的,如果生成的进程 执行任何屏幕I / O(一个常见的例子是std :: system(&#34; pause&#34;)on 视窗)即可。 [强调我的]
std::endl
做两件事:它插入一个换行符,然后将输出流刷新到控制台。这就是为什么您只在包含std::endl
的版本中看到您的文字的原因。
所以Code :: Blocks没有什么问题,你必须确保在程序终止之前输出std::flush
或std::endl
。
答案 1 :(得分:-2)
Code :: Blocks是一个很棒的IDE。应用程序需要先构建才能运行。只需先构建它,它将按预期运行。这是适用于旧版本的相关主题: http://forums.codeblocks.org/index.php?topic=16045.0 顺便说一句,15.12是候选版本。尝试升级到16.01。