eclipse cout上没有控制台输出

mccptt67  于 2023-10-18  发布在  Eclipse
关注(0)|答案(7)|浏览(141)

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<<“test”;
cout<<“test2”;
没有显示...
我错过了一些明显的东西。

s8vozzvw

s8vozzvw1#

您需要以换行符结束输出字符串,例如:`cout <<“test\n”``。原因是标准输出是缓冲的,缓冲区在换行时被刷新。可能有一种方法可以在不输出换行符的情况下刷新cout缓冲区,但我不知道该怎么做。可能包括对底层streambuf的访问(通过rdbuf方法)。

w1e3prcc

w1e3prcc2#

对我来说,安装32位版本的Eclipse(靛蓝3. 7)和32位Java JDK/JRE不起作用。我使用了Eclipse CDT/User/FAQ中更快的解决方案:
引用自Eclipse CDT/User/FAQ - Eclipse控制台在Windows上不显示输出:
Eclipse控制台在Windows上不显示输出在Windows上的Eclipse CDT中,正在运行或调试的程序的标准输出是完全缓冲的,因为它没有连接到Windwos控制台,而是连接到管道。有关详细信息,请参见错误173732。要么在每个printf之后添加fflush调用,要么在main函数的开头添加以下行:

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

zpf6vheq3#

我也遇到过类似的问题。在我的例子中,如果从命令行而不是从eclipse控制台运行,程序将给出给予输出。解决方案是使用32位版本的eclipse,而不是64位版本。
我读到这是一个bug。但可能不是同一个问题。

rks48beu

rks48beu4#

当我在微软网站http://support.microsoft.com/kb/94227上发现这个时,我也在搜索这个信息
我认为一个简单的方法是当你想强制刷新cout使用的内部缓冲区时使用std::flush

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

suzh9iv85#

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

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

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

sxpgvts3

sxpgvts36#

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

hk8txs48

hk8txs487#

尝试在每行的开头输出一个空格
cout <<“<<....

相关问题