【问题标题】:No console output on coutcout 上没有控制台输出
【发布时间】:2011-06-03 06:39:34
【问题描述】:

早上好,

我对 C/C++ 开发人员的 Eclipse IDE 有疑问。

我正在编写一个用于转换字符串的小工具。在某些点上进行测试时 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 cout

不显示...
我遗漏了一些明显的东西?

提前致谢!

【问题讨论】:

  • 我没用过 Eclipse,但是你确定你的代码工作正常吗?如果偶然,它在“CommandConverter a(argv[1]);”行崩溃,并且您没有收到崩溃通知,您将看不到任何输出。
  • 如果在命令行上运行会发生什么?
  • 我只在命令行上运行它...但是通过 Eclipse 控制台执行此操作...应该是一样的,不是吗? - 代码不会在那里崩溃......它会在很多时候......为了进一步分析,我需要输出。如果我调试并通过该点,则不会显示任何内容:/
  • 尝试将cout更改为cerr,然后看看你是否看到输出。
  • 解决方案是 endl;最后......请参阅下面的答案

标签: c++ eclipse console flush


【解决方案1】:

您需要以换行符结束输出字符串,例如:`cout

【讨论】:

  • 您是否按照伊斯梅尔的说法尝试了 std::endl ?这实际上应该刷新输出缓冲区。 '\n' 不是。
  • 好的,它可以工作......但它对我来说仍然没有意义......为什么它以前工作? On: cout
  • @Beasly,因为输出被刷新到操作系统,当你的程序退出时,操作系统负责刷新缓冲区(即显示到控制台)。 endl 修复您的问题的原因是,除了刷新到操作系统之外,操作系统缓冲区可能会被刷新,我询问在 gdb 中逐步执行的原因是依靠couts 进行调试是一种相当基本的方法,并且容易出现您遇到的情况,使用调试器单步执行是确定某项工作是否正常的更好方法...
  • 感谢您的解释,现在事情变得更清楚了 :) 实际上我正在调试...但是在某些时候我不确定某些步骤是否真的通过了,这就是为什么我想放一些 couts调试顶部:)
  • “可能有一种方法可以在不输出换行符的情况下刷新 cout 缓冲区,但我不知道。” => &lt;&lt; flush(真的不难记住)
【解决方案2】:

对我来说,安装 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);

【讨论】:

  • 此 Windows 解决方法也适用于 64 位 Ubuntu 12.10 上带有 CDT 6.0 的 Eclipse 3.8 64 位。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    当我在 Microsoft 网站上找到此信息时,我也在搜索此信息 http://support.microsoft.com/kb/94227

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

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

    【讨论】:

      【解决方案5】:

      当您调试代码并且直到最后才看到输出时会发生这种情况。 使用

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

      立即在 stdout(console) 上查看输出

      【讨论】:

        【解决方案6】:

        您好,经过一些类似的努力,我发现项目属性环境 PATH 变量的第一个元素必须是“C:\MinGW\bin;”否则可能会使用错误的版本,特别是如果您使用不同的编译器。

        【讨论】:

          【解决方案7】:

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

          cout

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-02-14
            • 2015-08-31
            • 1970-01-01
            • 2018-01-20
            • 1970-01-01
            • 2019-05-05
            相关资源
            最近更新 更多