1、printf函数的对象是谁

printf()功能就是输出一个字符串到屏幕上,屏幕对象有两个,分别是标准输出、标准出错,printf()其对象就是标准输出。

2、标准输出与标准出错有什么区别

标准输出是由缓冲区的,其内容是先放在缓冲区,再输出。

标准出错是没有缓冲区的,其内容是直接输出。

3、缓冲区(buffer)

缓冲区就是一块内存区, 它用在输入输出设备和CPU之间,用来缓存数据 。它使得低速的输入输出设备和高速的CPU能够协调工作 ,避免低速的输入输出设备占用CPU,解放出CPU,使其能够高效率工作。

4、缓冲区的类型

缓冲区 分为三种类型:全缓冲、行缓冲和不带缓冲。

1)全缓冲

在这种情况下,当填满标准I/O缓存后才进行实际I/O操作。全缓冲的典型代表是对磁盘文件的读写。

2)行缓冲

在这种情况下,当在输入和输出中遇到换行符时,执行真正的I/O操作。

这时,我们输入的字符先存放在缓冲区,等按下回车键换行时才进行实际的I/O操作。典型代表是键盘输入数据。

3)不带缓冲

也就是不进行缓冲,

标准出错情况stderr是典型代表,这使得出错信息可以直接尽快地显示出来。

5、printf()的输出问题

初步了解了缓冲区的概念之后,我们就来接合相关的例子来分析一下我们使用printf的时候回遇到的输出问题

//例子1
int main(int argc,char** argv)
{printf("helloworld");printf("appletree");while(1);  return 0;
}/*执行结果:不会输出任何的内容,然后卡在死循环中。分析:因为printf函数是一个行缓冲区函数,所以必须要在标准输出缓冲区中遇到'\n'就可以输出东西*///例子2
int main(int argc,char** argv)
{printf("helloworld");printf("appletree\n");printf("nihao");while(1);return 0;
}/*执行结果:输出helloworld和appketree,但是nihao并没有输出。分析:证明必须遇到\n才可以将\n之前的全部东西输出。*///例子3:
int main(int argc,char *argv[])
{printf("helloworld");printf("appletree");return 0;
}/*执行结果:输出helloworldappletree分析:程序退出时,会刷新标准输出缓冲区。*///例子4:
int main(int argc,char *argv[])
{while(1){printf("hello");usleep(100000);  //0.1s}return 0;
}/*执行结果:等到缓冲区满了(1024B),就会将缓冲区中所有的数据全部输出。分析:标准输出的缓冲区满了,即使没有'\n',程序也没有退出,也是会全部输出的。*///例子5:
int main(int argc,char *argv[])
{int x;printf("helloworld");printf("appletree");scanf("%d",&x);while(1);return 0;
}/*执行结果:输出helloworldappletree分析:键盘输入的函数也会刷新printf的缓冲区。*///例子6:主动刷新缓冲区   ---> fflush()  -->  man 3 fflush
//功能: 刷新一个流。
//fflush - flush a stream
#include <stdio.h>
int fflush(FILE *stream);
参数:stream: 文件指针    如果要刷新标准输出缓冲区,这里填stdout。
返回值:成功:0失败:-1int main(int argc,char *argv[])
{printf("helloworld");printf("appletree");fflush(stdout);   //---> 主动刷新标准输出缓冲区while(1);return 0;
}//例子7: 将printf的输出对象修改为标准出错,你想输出什么东西,就会马上输出。
//修改输出对象: fprintf()  --> man 3 fprintf
#include <stdio.h>int fprintf(FILE *stream, const char *format, ...);
参数:stream: 输出对象的文件指针。  stderrformat: 输出的内容。
返回值: 输出的字符个数return the number of characters printedprintf("hello");          --> 默认的对象是标准输出
fprintf(stdout,"hello");  --> 将hello放在标准输出的缓冲区中,等价于上面那句话。
fprintf(stderr,"hello");  --> 将hello直接存放在标准出错中,而标准出错没有缓冲区的,所以会直接输出。int main(int argc,char *argv[])
{fprintf(stderr,"hello");//fprintf(stdout,"hello");  //等价于printf("hello")while(1);return 0;
}

6、总结

1)遇到' \n '会刷新缓冲区

2)遇到return也会刷新缓冲区

3)当缓冲区满1024 byte的时候也会刷新缓冲区

4)键盘输入的函数也会刷新缓冲区

5)主动刷新缓冲区(fllush函数)

6)把标准输出改为标准出错,可以直接刷到屏幕上不经过缓冲区

printf函数输出问题相关推荐

  1. 关于C语言中printf函数“输出歧视”的问题

    目录 关于C语言中printf函数"输出歧视"的问题 问题描述 探索问题原因 另一种研究方法 问题结论 关于C语言中printf函数"输出歧视"的问题 问题描述 ...

  2. c程序设计语言中printf,编程序 用getchar函数读入两个字符c1和c2,然后分别用putchar和printf函数输出这两个字符。请问...

    编程序,用getchar函数读入两个字符给c1和c2,然后分别用putchar和printf函数输出这两个字符.请问: 1. 变量C1,C2应定义为字符型或整型?或二者皆可? 答:在这个题目里,变量C ...

  3. C语言学习之编程序,用getchar函数读入两个字符给cl和c2,然后分别用putchar函数和printf函数输出这两个字符

    编程序,用getchar函数读入两个字符给cl和c2,然后分别用putchar函数和printf函数输出这两个字符.思考以下问题: (1)变量cl和c2应定义为字符型,整型还是二者皆可? (2)要求输 ...

  4. 使用printf函数输出

    多行文本输出 整段输出 多行文本输出 在上节的教程中,我们使用printf()函数输出了Hello, World! 以向这个世界问好.你可能留意到了文中提到的\n,它用于产生一个新行,这样再次输出文本 ...

  5. c语言之printf函数输出字符数据

    //用printf函数输出字符数据 #include <stdio.h> int main() {//定义两个变量char c = 'a';int i = 97;//输出变量%c以字符形式 ...

  6. printf函数输出多个printf 、前置加加或者后置加加

    目录 (1)前置加加和后置加加的区别 (2)printf输出前置加加 (3)printf输出后置加加 (4)printf输出printf (1)前置加加和后置加加的区别 首先我们先来了解一下前置加加和 ...

  7. C语言程序设计中用printf函数输出数据

    文章目录 前言 一.创建C语言项目 二.printf函数介绍 总结 前言 记录暑假期间自学C语言的小问题和总结 一.创建C语言项目 这里使用的是Visual Studio 2019 首先新建一个C++ ...

  8. 用串口模拟printf函数输出

    #include <iostream> #include <stdio.h> #include <stdarg.h> int MY_PRINT(const char ...

  9. printf函数输出超出int时怎么办

    int.long.long long在printf中的格式 https://blog.csdn.net/fz_ywj/article/details/8107582 蓝桥杯 2796. BASIC-1 ...

最新文章

  1. luogu P2512 [HAOI2008]糖果传递
  2. PyTorch基础(part3)
  3. Psych101(part7)--Day7
  4. 作者:赵妍妍(1983-),女,哈尔滨工业大学机电学院媒体技术与艺术系副教授、硕士生导师。...
  5. php调用含有命名空间的类
  6. python中如何判断一个变量的数据类型?(原创)
  7. c语言取反运算详细步骤,C语言之位运算详解
  8. my97前端日期插件使用示例
  9. 看华为心声社区的几篇总裁办电子邮件有感
  10. uni-app 使用API中的uni.chooseImage 上传照片以及uni.previewImage图片预览(身份证照片为例)
  11. android翻页动画
  12. CAD中插入外部参照字体会变繁体_CAD外部参照无法绑定怎么办?
  13. ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘()
  14. Maze_AI: 一款基于 Python + Pygame + AI 算法的迷宫小游戏
  15. java 时间戳间隔_JAVA判断两个时间戳,相隔多少分钟
  16. 2021年茶艺师(初级)模拟考试及茶艺师(初级)模拟考试题
  17. MoveIt教程[20]:TRAC-IK Kinematics Solver
  18. java.sql.SQLException: Access denied for user ‘‘@‘localhost‘ (using password: YES)问题
  19. Fmoc-NH-PEG-MAL,芴甲氧羰基保护氨基-聚乙二醇-马来酰亚胺;内附FMOC脱保护条件
  20. 投资初学者了解股市的10个步骤

热门文章

  1. CV、CA、CT运动模型的理解和matlab程序简单实现
  2. win10更新后office2016图标显示空白
  3. 001 2G3G4G的网速平常的各是多少
  4. 【MySQL】MySQL数据库结构与操作
  5. 2003server计算机管理里面没有本地用户和组
  6. 计算机课联网,老师上网课需要什么设备
  7. 记 随手科技2020届实习生笔试题(Java开发工程师)笔试题
  8. 四、无限法则roe-滑雪进阶入门小贴士
  9. (PHP)获取微信支付平台证书步骤
  10. 汇编指令: JO、JNO、JB...