日期:2014-05-16  浏览次数:20716 次

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',直到一行满了
------解决方案--------------------
引用:
Quote: 引用:

因为puts写完字符串后,会将一个换行符写到标准输出,它是每次一行的IO


int main()
{
      //putchar('a');
       printf("a");
      //puts("a");
  return 0;
}

不需要while就完全没问题,我想知道的是在while下输入输出会有啥差别的

程序结束了也会刷新缓冲区的!
几种缓冲区会刷新的情况:
1 程序结束
2 遇到换行符
3 缓冲区满
4 手动刷新fflush