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

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

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

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

解决方案:

方案1、在printf里加"\n"  (注意在clion 调试中无效,建议使用方案2 )

方案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");
}

linux c printf 不能输出相关推荐

  1. linux shell printf 格式化输出 数字 字符串

    printf打印格式字符串,解释'%'指令和'\'转义. 1.转义 \a :报警声 \f :换页 \n :新行 \r :回车 \t :横tab \v :竖tab \NNN :一个8进制数,打印asci ...

  2. linux怎么打印64位数据,printf如何输出64位整数

    关于printf函数输出64位数的问题,其实在window下和linux下是不一样的: linux下是 printf("%lld/n",a); printf("%llu/ ...

  3. printf如何输出64位整数

    关于printf函数输出64位数的问题,其实在window下和linux下是不一样的: linux下是 printf("%lld/n",a); printf("%llu/ ...

  4. Linux 下的格式化输出命令:print

    原文链接:http://blog.csdn.net/zgf19930504/article/details/51912765 printf 是linux 下的格式化输出命令,有点儿类似于python ...

  5. linux 终端控制-- 多彩输出 格式排版

    linux 终端控制-- 多彩输出 格式排版 在unix/linux的终端下,怎么控制终端输出的颜色和格式呢,当然了有专门的工具,tput,但是能被terminal直接读懂的格式化字符串更通用. 先来 ...

  6. linux c打印日志文件,linux c下log输出代码模板示例代码

    前言 本文主要介绍了关于linux c下log输出代码模板的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 模板 模本分为两个文件:log.c和log.h. log.c /* ...

  7. matlab printf格式化输出,Shell printf格式化输出命令

    printf 是 awk 的重要格式化输出命令,本节我们先介绍一下 printf 命令如何使用. 需要注意,在 awk 中可以识别 print 输出动作和 printf 输出动作(区别是:print ...

  8. Shell printf格式化输出命令

    printf 是 awk 的重要格式化输出命令,本节我们先介绍一下 printf 命令如何使用. 需要注意,在 awk 中可以识别 print 输出动作和 printf 输出动作(区别是:print ...

  9. linux查看输出的信息,linux查看java的输出信息

    linux查看java的输出信息 [2021-02-04 22:41:35]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(&quo ...

最新文章

  1. Javascript基础与面向对象基础~第四讲 Javascript中的类对象
  2. 仿IPhone滚轮组件分析WheelScroller
  3. JavaScript 事件——“事件类型”中“复合事件”和“变动事件”的注意要点
  4. 学习node js 之微信公众帐号接口开发 准备工作之三
  5. 查找删除Code First Entity Framework基本与最佳添加(add/create),删除(delete/remove),修改(update/modify)操作...
  6. Oracle修改字段类型方法
  7. 11 Python之初识函数
  8. springboot2整合mysql5_SpringBoot2整合SSM框架详解
  9. Android之复选框对话框
  10. 如何安装无签名认证的rpm包
  11. sp根据备份文件来创建DB
  12. 《CCNA网络技术学习指南》-命令版
  13. [ 物联网篇 ] ESP32 AWS IoT and Amazon Alexa Development / FreeRTOS平台的Alexa语音助手
  14. 【numpy学习】numpy教程--基于莫烦python的教程
  15. OpenGL ES2 0 – Iphone开发指引
  16. 好笑的GIF动态表情包怎么制作
  17. Android apps 拍立知-功能实现(百度tts语音合成使用)
  18. 芭蕉树上第十二根芭蕉--opencv配置问题
  19. php面试题之三——PHP语言基础(基础部分)
  20. 解决html中表格线条粗细不一的问题

热门文章

  1. 同构多核和异构多核简单介绍
  2. STM32的晶振脚(OSCIN和OSCOUT)当成普通IO来使用
  3. Git-TortoiseGit完整配置流程
  4. NR 5G 移动性和状态变化
  5. BZOJ3133[ballmachine]——倍增+优先队列
  6. Python调用MySQL模块初试
  7. SpringMVC、MyBatis声明式事务管理
  8. javascript简单应用
  9. 如何理解react中的super(),super(props)
  10. 用 Fiddler 来弥补 Chrome Network 的小缺点