转载请注明出处:http://blog.csdn.net/qq_26093511/article/details/53255970

原因:  输出缓冲区的问题.

unix上标准输入输出都是带有缓存的,一般是行缓存。

对于标准输出,需要输出的数据并不是直接输出到终端上,而是首先缓存到某个地方,当遇到行刷新标志或者该缓存已满的情况下,才会把缓存的数据显示到终端设备上。

ANSI C中定义换行符'\n'可以认为是行刷新标志。所以,printf函数没有带'\n'是不会自动刷新输出流,直至缓存被填满。

解决方案:

方案1、在printf里加"\n"

方案2、fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上 。

fflush(stdout); //  刷新一下缓冲区 让它马上输出.  在printf 之后调用它,就会马上输出了.  

  setvbuf(stdout,NULL,_IONBF,0); //如果你嫌上个方法麻烦, 就使用这个函数. 直接将缓冲区禁止了. 它就直接输出了。

这两个函数都是有关流缓冲区的. 具体使用和说明网上有很多.   我只说一下什么是流缓冲区, 是做什么用的。

操作系统为减少 IO操作 所以设置了缓冲区.  等缓冲区满了再去操作IO. 这样是为了提高效率。

下面是测试代码:

方案1:

#include<stdio.h>
#include<unistd.h> void main()
{
int i;
for(i=0;i<10;i++)
{
printf("\r %d%% is complete.\n",i);
sleep(1);
}
printf("\n");
}

方案2:

#include<stdio.h>
#include<unistd.h> void main()
{
int i;
for(i=0;i<10;i++)
{
printf("\r %d%% is complete.",i);
fflush(stdout);
sleep(1);
}
printf("\n");
}
#include<stdio.h>
#include<unistd.h> void main()
{
int i;
setvbuf(stdout,NULL,_IONBF,0); //直接将缓冲区禁止了. 它就直接输出了
for(i=0;i<10;i++)
{
printf("\r %d%% is complete.",i);
sleep(1);
}
printf("\n");
}

最新文章

  1. 高精度+搜索+质数 BZOJ1225 [HNOI2001] 求正整数
  2. 【linux错误解决】MySQL远程连接ERROR 2003 (HY000):Can&#39;t connect to MySQL server on&#39;XXXXX&#39;的问题
  3. Project interpreter not specified(eclipse+pydev)
  4. schedule vs scheduleAtFixedRate
  5. ubuntu安装nVidia驱动,遇到终端闪砾问题并解决
  6. (iOS)开发中收集的小方法
  7. 敏捷冲刺每日报告——Day5
  8. MATLAB三点确定圆
  9. week3
  10. 类似于c语言读取文件进行解析
  11. gxx -L和/etc/ld.so.conf的理解
  12. 《Windows核心编程》第3章——深入理解handle
  13. android asmack调用MultiUserChat.getHostedRooms方法出现空指针的异常解决方案
  14. JPA的多表复杂查询
  15. 根据城市表生成json数据
  16. mui --- 怎么获取百度地图定位功能
  17. C#对json数据的解析
  18. from VC的IDE使用技巧大全
  19. e586. Drawing Simple Shapes
  20. 字符编码:ASCII,Unicode和UTF-8

热门文章

  1. tcp ip协议笔记(1)——简单介绍
  2. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database &amp;#39;user&amp;#39;
  3. Vue 字面量语法 vs 动态语法
  4. (学习笔记3)BMP位图的读取与显示
  5. jquery+css 实现即时变化颜色主题(通过input输入颜色值进行改变)
  6. mysql 查看当前连接数
  7. 【转】Windows2008上传大文件的解决方法(iis7解决上传大容量文件)
  8. Ubuntu 16.04下配置Golang开发环境
  9. Kubernetes基本概念之Label
  10. mysql 中的增改查删(CRUD)