C程序以错误的顺序输出Eclipse

我已经在我的Windows机器上设置了Eclipse进行c编程,我已经成功运行了一个“hello,world”程序。 但是,当我尝试请求用户输入并运行程序时,Eclipse上的控制台显示顺序错误。

这就是我所拥有的

#include  int main(void){ char letter; printf("Please enter a letter:\n"); scanf(" %c, &letter); printf("The letter you have selected is: %c", letter); return 0; } 

这个程序构建得很好,它在Eclipse之外运行得很好。 但是当我在Eclipse中运行它时,我获得了输出:

 E <--- (this is my user input) Please enter a letter: The letter you have selected is: E 

我不确定为什么输出执行顺序错误,所以任何帮助都会非常感激! 谢谢。

听起来Eclipse正在缓冲程序的输出而不是立即显示它。 这表明“在Eclipse中运行”function并非旨在运行交互式程序。

你可以尝试添加fflush(stdout); 在第一个printf ,你不应该只是为了使你的程序在特定的环境中工作。

是的,Eclipse会在输出窗口出现之前缓冲一定量的输出(我不记得有多少输出) 。 Eclipse通过完全缓冲的管道与连接的进程进行通信。 在调用fflush()或缓冲区已满之前,它不会刷新。 我发现在使用Eclipse进行调试时,如果我将以下内容放在应用程序的开头附近,那么事情最有效:

 setvbuf(stdout, NULL, _IONBF, 0); 

这将导致stdout在写入时立即刷新。 如果你想用它进行调试并关闭它,你可以有条件地编译它:

 #ifdef DEBUG setvbuf(stdout, NULL, _IONBF, 0); #endif 

无需在任何地方放置fflush()

编辑

这是我在第一次遇到这个问题时找到解决方案的地方。

http://wiki.eclipse.org/CDT/User/FAQ#Eclipse_console_does_not_show_output_on_Windows

Eclipse的控制台不是真正的控制台或终端,而是eclipse通过管道进行通信,管道完全缓冲而不是行缓冲。 这就是换行符’\ n’不会导致刷新缓冲区的原因。

尝试添加fflush(stdout); 在第一次printf 。 如果Eclipse在'\n'之后没有自动刷新,这有很大的帮助机会。

是的, fflush()缓冲区是保持控制台屏幕更新所必需的…

…但伙计们,这不是Eclipse的错误 – 输出可能会失去同步,但是库正在使用中!