cout 上没有控制台输出

问题描述 投票:0回答:7

我对面向 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<<"test";
计算<<"test2";

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

c++ eclipse console flush
7个回答
12
投票

您需要以换行符结束输出字符串,例如:`cout << "test\n"``. The reason is that the standard output is buffered and the buffer is flushed on newline. There probably exists a way to flush the cout buffer without outputting a newline, but I don't know it by heart. Probably includes access to the underlying streambuf (via the rdbuf method).


3
投票

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

引自 Eclipse CDT/用户/常见问题解答 - Eclipse 控制台在 Windows 上不显示输出

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

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

2
投票

我也有类似的问题。就我而言,如果从命令行运行该程序将给出输出,但不是从 Eclipse 控制台运行。解决方案是使用 32 位版本的 eclipse 而不是 64 位版本。

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


0
投票

当我在微软网站上找到这个信息时,我也在寻找这个信息 http://support.microsoft.com/kb/94227

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

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

0
投票

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

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

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


-2
投票

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


-5
投票

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

cout<< " " << .....

© www.soinside.com 2019 - 2024. All rights reserved.