首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

linux中vim中一个很简单的C有关问题

2013-12-16 
linux中vim中一个很简单的C问题#includestdio.h#includepthread.h#includestdlib.hint main(){while

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

热点排行