printf不在控制台上打印
我开始使用C语言。 我使用eclipse(juno)作为我的IDE并安装了CDT插件。 我也解开了mingw64(GCC编译器)。 我写了一个非常简单的程序来看看它是否工作。 这是我的代码:
#include <stdio.h> int main() { int age; printf("Hello, please enter your age:\n"); scanf("%d", &age); printf("Your age is %d", age); return 0; }  问题在于输出缓冲区中填充了第一个printf的string值,但不会将其输出到控制台。 我必须input一个数字,然后缓冲区才会把所有的数据传送到控制台,所以我看到控制台是这样的: 
 1 Hello, please enter your age: Your age is 1 
而不是预期的是:
 Hello, please enter your age: 1 Your age is 1 
 现在,我发现我可以在第一个printf之后使用fflush(stdout) ,但我不认为这个解决scheme是优雅的,甚至是必要的。 关于如何克服这个问题的任何想法? 
  编辑 – 因为我在我的大学学习,我不能使用在课程中没有学到的东西,所以我只能使用printf和scanf 
新编辑 – 我想我find了一个解释。 正如我所说的,我输出到Eclipse内部的控制台视图。 奇怪的是,如果我从Windows的命令行编译并运行程序,我会得到想要的结果。 因此,我认为eclipse实际上是将输出写入文件并将其显示在控制台窗口中。 我如何强制eclipse打开一个真正的命令行窗口在我的运行configuration?
 好的 – 显然这是一个已知的日食bug。 这个错误是通过WONT-FIX的分辨率解决的。 不知道为什么。 链接在这里: 
  Eclipse C控制台错误 
输出被缓冲。
标准输出是默认行缓冲,这意味着'\ n'应该刷新缓冲区。 为什么不在你的情况发生? 不知道。 需要更多关于你的应用程序/环境的信息
但是,您可以使用setvbuf()来控制缓冲:
 setvbuf(stdout, NULL, _IOLBF, 0); 
这将强制stdout被行缓冲。
 setvbuf(stdout, NULL, _IONBF, 0); 
这将迫使标准输出无缓冲,所以你不需要使用fflush()。 请注意,如果您有大量打印件,将严重影响应用程序的性能。
你可以尝试写stderr,而不是标准输出。
 fprintf(stderr, "Hello, please enter your age\n"); 
你也应该看看这个相关的线程。
在打印之前尝试设置:
 setvbuf (stdout, NULL, _IONBF, 0); 
正如其他人所指出的,在控制台或shell有机会看到它之前,输出可以在程序中被缓冲。
 在类Unix系统(包括mac)上,默认情况下, stdout具有基于行的缓冲区。 这意味着你的程序一看到一个换行符就清空它的stdout缓冲区。 
但是,在Windows上,换行不再是特殊的,而是使用完全缓冲。 Windows根本不支持行缓冲; 请参阅setvbuf上的msdn页面 。
 所以在Windows上,一个好的方法是彻底closuresstdout缓冲,如下所示: 
 setvbuf (stdout, NULL, _IONBF, 0); 
- 在您的项目文件夹中,创build一个“.gdbinit”文本文件。 它将包含你的gdbdebugging器configuration
- 编辑“.gdbinit”,并添加行(不带引号):“set new console on”
- 
在构build项目之后,右键单击项目Debug>“Debug Configurations”,如下所示  
- 
在“debugging器”选项卡中,确保“GDB命令文件”现在指向您的“.gdbinit”文件。 否则,请将pathinput到“.gdbinit”configuration文件中:  
- 
点击“应用”和“debugging”。 本地DOS命令行应该如下所示启动  
 将c:\gygwin\bin添加到PATH环境variables中,作为系统环境variables或者在eclipse项目中(properties-> run / debug-> edit)