今天同样遇到了printf()不输出的情况,看来水很深,在网上找了找,将下面这些东西推荐给大家,
?
源连接:http://blog.163.com/coder_jack@126/blog/static/341526842010497315061/
?
以下程序只是为了在终端上不断连续输出->而已,但是在没有加fflush之前发现根本无法向屏幕打印任何内容。为什么以前从来没有发现printf的这种特性呢?后来想到,以前在用printf时多收情况下都会在字符串尾部加一个\n。或者没有加\n,但是你的程序不是一个dead loop,便也不会牵扯到问题,因为就算执行printf后只是将内容送到缓冲区,但是你到程序结束里,程序结束便会导致缓冲区刷新,你便看到你到屏幕上有你期望到东西出现了。所以我最后得到一个这样到结论:printf会把东西送到缓冲区,而如果缓冲区不刷新到话,你便不会在屏幕上看到东西,而能导致缓冲区刷新到情况有这些:1 强制刷新 fflush;2,放到缓冲区到内容中包含\n \r ;3,缓冲区已满;4,需要从缓冲区拿东西到时候,如执行scanf;
但是这些问题在vc中都没有出现,所以这时编译器相关的!
#include <stdio.h>
#include <unistd.h>?? ?//for sleep()
int main(void)
{
?? ?printf("\nstart the dead loop\n");
?? ?while(1)
?? ?{?? ?
?? ??? ?printf("\b->");
?? ??? ?fflush(stdout);//刷新输出缓冲区,如果不做这个动作,上边的输出便不会显示到屏幕上,除非其中有换行操作或者缓冲区,这也许就是所谓到终端行规程吧。
?? ??? ?usleep(100000);
?? ?}
?? ?return 1;
}