linux中vim中一个很简单的C问题
#include<stdio.h>
#include<pthread.h>
#include<stdlib.h>
int main()
{
while(1)//如果在while()中会出现这些问题
{
//putchar('a');//终端控制器界面堵塞,没有任何输出
printf("a");//结果同上一句
//fflush(NULL);//上面2句都必须更新缓冲区才能显示出来
//puts("a");//但是puts不需要fflush就能立即显示,这些情况是为什么?,难道有些会自动更新缓冲区?
sleep(1);
}
return 0;
}
------解决方案--------------------因为puts写完字符串后,会将一个换行符写到标准输出,它是每次一行的IO
------解决方案--------------------没有while,main函数退出之前执行return 0,相当于执行exit(0),而exit函数中会清理缓冲区,
所以会把缓冲区中的'a'显示到标准输出上
而在while中,由于一直没有刷新缓冲区,所以不会输出'a',直到一行满了
------解决方案--------------------
程序结束了也会刷新缓冲区的!
几种缓冲区会刷新的情况:
1 程序结束
2 遇到换行符
3 缓冲区满
4 手动刷新fflush