cout上没有控制台输出

时间:2011-01-04 08:54:21

标签: c++ eclipse console flush

早上好,

我遇到了Eclipse IDE for C / C ++ Developers的问题。

我正在编写一个用于转换字符串的小工具。虽然测试某些点 eclipse停止提供控制台输出。 例如: -
    cout<<"test";
没有显示。

但不是每个地方......另一个例子:

// File path as argument
int main(int argc, char* argv[]) {
if (argc != 2) {
    cout
            << "ERROR: Wrong amount of arguments! Only one allowed...\n";
    cout << "\n" << "Programm closed...\n\n";
    exit(1);
}

CommandConverter a(argv[1]);
cout<<"test";
a.getCommandsFromCSV();
cout<<"test2";

return 0;
}

如果缺少参数,则会正确显示错误消息。 但如果参数存在且程序继续测试输出:

  

COUT&LT;&LT; “测试”;
  COUT&LT;&LT; “test2的”;

不显示...
我错过了一些明显的东西?

提前致谢!

7 个答案:

答案 0 :(得分:11)

你需要用换行结束输出字符串,例如:`cout&lt;&lt; “测试\ n”``。原因是标准输出被缓冲,缓冲区在换行符上刷新。可能存在一种方法来刷新cout缓冲区而不输出换行符,但我不清楚它。可能包括访问底层的streambuf(通过rdbuf方法)。

答案 1 :(得分:3)

对于我来说,安装32位版本的Eclipse(Indigo 3.7)和32位Java JDK / JRE不起作用。我使用 Eclipse CDT / User / FAQ

中更快的解决方案

引自Eclipse CDT/User/FAQ - Eclipse console does not show output on Windows

  

Eclipse控制台在Windows上不显示输出在Eclipse CDT中   Windows,正在运行或调试的程序的标准输出是完全的   缓冲,因为它没有连接到Windwos控制台,而是连接到   管。有关更多详细信息,请参阅错误173732。之后添加fflush调用   每个printf或在main的开头添加以下行   功能:

setvbuf(stdout, NULL, _IONBF, 0); 
setvbuf(stderr, NULL, _IONBF, 0);

答案 2 :(得分:1)

我有类似的问题。在我的情况下,如果从命令行运行而不是从eclipse控制台运行,程序将提供输出。解决方案是使用32位版本的eclipse而不是64位版本。

我读到这是一个错误。可能不是同一个问题。

答案 3 :(得分:0)

当我在微软网站上发现这个信息时,我也正在搜索这些信息 http://support.microsoft.com/kb/94227

我认为一个简单的方法是当你想强制刷新cout使用的内部缓冲区时使用std :: flush

*std::cout << ... << std::flush;*

答案 4 :(得分:0)

这会在您调试代码时发生,并且直到最后才看到输出。 使用

cout<<"what ever overloads"<< flush;

在stdout(控制台)上立即查看输出

答案 5 :(得分:-1)

嗨,经过一些类似的斗争,我发现,项目的属性环境PATH变量的第一个元素必须是&#34; C:\ MinGW \ bin;&#34;否则可能会使用错误的版本,尤其是在使用不同的编译器时。

答案 6 :(得分:-3)

尝试在每行的开头输出一个空格

cout&lt;&lt; “”&lt;&lt; .....