【C】printf和scanf函数的探索

printf()是输出函数,scanf()是输入函数,输入/输出函数简称为I/O函数。它两是C语言中最通用的输入输出函数。不同的编译器可能有不同的I/O的实现。

printf和scanf这两个函数虽然功能不同,但是工作原理几乎相同,它们都使用格式字符串(control string)和参数列表

printf(control string,arg1,arg2···)

格式字符串中含有一系列转换说明(conversion specification),它们与参数列表应该是一一对应的,即数量和类型应相匹配

printf中的基本转换说明如下:

  • %d和%i用于打印有符号十进制整数,%o用于打印无符号八进制整数,%u用于打印无符号十进制整数,%x用于打印打印0f前缀的无符号十六进制整数,%X用于打印打印0F前缀的无符号十六进制整数;
  • %f用于打印十进制记数法形式的浮点数,%e和%E用于打印e记数法1形式的浮点数;
  • %c用于打印单个字符,%s用于打印字符串;
  • %g根据值的不同,自动切换为%f或%e,当指数小于 -4 或大于等于精度时切换为%e,%G根据值的不同,自动切换为%f或%E,当指数小于 -4 或大于等于精度时切换为%e;
  • %p用于打印指针;
  • %a和%A用于打印浮点数、十六进制数和p记数法2 (C99/C11);
  • %%用于打印一个百分号。

在%和基本转换说明之间还可以插入修饰符组成更为复杂的conversion specifier,修饰符用来控制打印内容的格式或用于打印指定的数据类型,printf的修饰符如下:

  • *:抑制赋值(suppress assignment)。
  • -: 左对齐输出。
  • +: 对于正数,在前面显示加号;对于负数,则仍然显示减号。
  • 0: 在输出数字时,用零来填充字段宽度。
  • 空格: 对于正数,在前面显示一个空格,对于负数则显示减号。
  • #: 与o、x或X转换说明一起使用时,将输出前缀0、0x或0X(0、0x或0X)。
  • width: 指定输出的最小字段宽度,超出就自动扩大到打印内容的长度。
  • .precision: 指定输出的精度,通常用于浮点数以及字符串。
  • h: 将整数参数解释为short或者unsigned short。
  • hh: 将整数参数解释为char或者unsigned char。
  • l: 将整数参数解释为long或者unsigned long。
  • ll: 将整数参数解释为long long或者unsigned long long。
  • L: 将浮点数参数解释为long double。
  • j: 将整数参数解释为intmax_t或uintmax_t。
  • t: 将整数参数解释为ptrdiff_t或size_t。
  • z: 将整数参数解释为size_t。size_t是sizeof返回的类型。

抑制赋值示例

printf("%*d",5,10);//打印10,宽度为5
scanf("%*d %d",&a);//若输入为1 2,则a为2,即会跳过1

在K&R C中,表达式和参数中的float会自动转为double,而ANSI C一般不会,所以为了保护一些假设float会自动转换为double的程序,默认将float转为double。3

冷知识:printf有返回值,值为打印字符的个数,若发生打印错误,则返回负数。

printf的使用中还要注意当待打印类型和转换说明不一致时会发生什么。

接下来学习scanf。前面介绍的printf将各种类型的数据经过转换说明的转换后输出为字符串,而scanf则是相反的过程,它将我们在键盘上敲入的文本转换为指定类型数据。

scanf与printf不相同的地方在于参数列表,scanf的参数前需要加上一个&符号(除了存储字符串的时候),表示存储。

scanf的基本转换说明如下:

  • %c解释输入为一个字符;%s解释输入为一个字符串,输入有效范围为从一个非空白字符开始到一个空白字符之前。
  • %d和%i解释输入为一个有符号十进制整数;%o解释输入为一个有符号八进制整数;%x或%X解释输入为一个有符号十六进制整数;%u解释输入为一个无符号十进制整数。
  • %e、%f、%g、%a或%E、%F、%G、%A解释输入为一个浮点数。

scanf的修饰符如下:

  • *:抑制赋值。
  • 数字:最大输入宽度。
  • hh:读取整数为signed char或unsigned char。
  • ll:读取整数位long long或unsigned long long。
  • h:%hd、%hi读取值为short int,%ho、%hx、%hu读取值为unsigned short int。
  • l:%ld、%li读取值为long,%lo、%lx、%lu读取值为unsigned long,%le、%lf、%lg读取值为double类型。
  • L:%Le、%Lf、%Lg读取值为long double类型。
  • j:与整型转换说明配合使用,表示使用intmax_t、uintmax_t。
  • z:与整型转换说明配合使用,表示使用sizeof的返回值类型。
  • t:与整型转换说明配合使用,表示使用两个指针差值的类型。

scanf也有返回值。如果读取成功,则返回读取到的项数;如果需要读取数字时,用户输入非数字字符串,则返回0;如果检测到文件结尾,则返回EOF。


  1. e记数法:例如2e-30表示 2 × 1 0 − 30 2\times 10^{-30} 2×1030,其中e换为E也行 ↩︎

  2. p记数法是16进制指数记数法。例如 0 x c . 1 b p 5 = ( 12 + 1 16 + 11 16 ) × 2 5 0xc.1bp5=(12+\frac{1}{16}+\frac{11}{16})\times 2^5 0xc.1bp5=(12+161+1611)×25 ↩︎

  3. K&R C指的是Kernighan和Ritchie开发的C语言,即第一版C语言标准,而ANSI C(也称为C89或C90)是由美国国家标准协会(ANSI)发布的C语言标准。 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/688723.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库-----范式判断

目录 (1)求最小函数依赖集 (2)求候选码 (3)求R最高属于哪级范式 总结: 以一道例题来看: 3.已知关系模式R<ABCDEG> F{BC-->E&#xff0c;DC-->B,D-->A,B-->G,D-->E,E-->G,B-->C} 求: ①F的最小函数依赖集 ②R的候选码 ③R最高属于…

美国中性原子量子公司QuEra宣布将在英国建造量子测试平台

编辑丨慕一 编译/排版丨沛贤 深度好文&#xff1a;1250字丨7分钟阅读 中性原子量子公司QuEra Computing宣布&#xff0c;英国国家量子计算中心&#xff08;NQCC&#xff09;将成为一个量子计算测试平台的所在地。 通过NQCC的资助&#xff0c;并在小型企业研究计划&#xff…

【Kubernetes in Action笔记】1.快速开始

在Kubernetes上运行一个程序 基础运行环境 当前的运行环境为使用虚拟机构建的单master集群。 [rootk8s-master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master Ready control-plane 109d v1.27.1 k8s-node1 Ready …

基于物联网的智慧农业简介

背景 物联网是通过信息传感设备,按约定的协议实现人与人、人与物、物与物全面互联的网络,其主要特征是通过射频识别、传感器等方式获取物理世界的各种信息,结合互联网、移动通信网等技术进行信息的传输与交互,采用智能计算技术对信息进行分析处理,从而提高对真实环境的感…

如何基于YAML设计接口自动化测试框架?看完秒会!

在设计自动化测试框架的时候&#xff0c;我们会经常将测试数据保存在外部的文件&#xff08;如Excel、YAML、CSV&#xff09;或者数据库中&#xff0c;实现脚本与数据解耦&#xff0c;方便后期维护。目前非常多的自动化测试框架采用通过Excel或者YAML文件直接编写测试用例&…

沁恒CH32V30X学习笔记05--串口接收中断和空闲中断组合接收数据

同步异步收发器(USART)** 包含 3 个通用同步异步收发器(USART1/2/3)和 5 个通用异步收发器(UART4/5/6/7/8) 空闲帧,空闲帧是 10 位或 11 位高电平,包含停止位。 断开帧是 10 位或 11 位低电平,后跟着停止位 引脚模式配置 引脚分配 bsp 驱动代码 bsp_uart_it.c /…

固定资产与总账对账,业务系统出不来数据?

1、【财务会计】-【固定资产】-【与总账对账】 2、【财务会计】-【总账】-【对账执行】 以上两个节点都可以进行 “固定资产与总账” 对账执行 操作。 问题&#xff1a; 固定资产与总账对账&#xff0c;业务系统出不来数据&#xff1f;如下图 &#xff1a; 原因&#xff…

麒麟linux和东方通TongWeb时区timezone不同步问题的解决

默认东方通文件夹位置如下&#xff1a; /data/TongWeb7.0.4.9_M3_Enterprise_Linux 在bin文件夹下有一个external.vmoptions 文件。 将下面这行&#xff1a; -Duser.timezoneAsia/Shanghai 添加到external.vmoptions 文件中。 重启东方通&#xff0c;时区问题解决。

VR直播:只需五步,即可实现直播“黑科技”

现如今&#xff0c;VR直播的应用范围较为广泛&#xff0c;有很多人可能在现场见过VR直播的拍摄设备&#xff0c;不仅有高性能的电脑、VR相机&#xff0c;还有专业的灯光和拍摄机器等。只需要五步&#xff0c;就可以实现安全、高效的VR全景直播。 首先是专业全景采集设备进行全景…

svg之全局组件,配合雪碧图解决vue2的svg优化问题

这里是vue2中的svg的完整解决方案的另一篇。 <template><svg :class"svgClass"><use :xlink:href"#${name}"></use></svg> </template><script>export default {name: icon,props: {name: {type: String,requi…

几种SLAM算法跑出的效果比较

以下所有的SLAM算法均使用此辆ROS小车跑。 文章目录 1.Gmapping SLAM算法构建地图2.Hector SLAM算法构建地图3.Karto SLAM算法构建地图4.Cartographer SLAM算法构建地图5.深度摄像头的建图6.rtab-map(深度双目与激光雷达构建三维建图)7.ORB-SLAM8.无奖竞猜 1.Gmapping SLAM算法…

OpenAI Sora视频生成机制:时空补丁

AI如何将静态图像转化为动态、逼真的视频&#xff1f;OpenAI 的 Sora 通过时空补丁&#xff08;spacetime patches&#xff09;的创新使用给出了答案。 独特的视频生成方法 在生成模型的世界中&#xff0c;我们看到了从 GAN 到自回归和扩散模型的许多方法&#xff0c;它们都有…

华纳云:Nginx的内存池如何实现,有哪些特点

Nginx是一个高性能的开源反向代理服务器和 Web 服务器&#xff0c;它采用了内存池(Memory Pool)的概念来管理内存&#xff0c;以提高性能和降低内存碎片化。Nginx的内存池实现主要基于以下两个核心组件&#xff1a; ngx_pool_t 结构体&#xff1a; Nginx中的内存池由 ngx_pool_…

AI 改造计划进度汇报 2402

AI已经大大提升了我的效率&#xff0c;正好这几天放假没事干&#xff0c;总结出这篇汇报。 AI 技术自媒体 首先是 AI开发和文创的所有路都自动化了。技术文章的翻译已经过半&#xff0c;不出两个月&#xff0c;我就能把我见到的所有技术文章都翻译一遍。 然后我觉得AI不应当…

【C++初阶】值得一刷的字符串string相关oj题

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

go-zero/grpc的rpc服务间传递额外数据

go-zero/grpc的rpc服务间传递额外数据 2024/02/18 客户端&#xff1a; md : metadata.New(map[string]string{"signature": "0123456789", "timestamp": "2021-07-01 00:00:00"}) ctx : metadata.NewOutgoingContext(ctx, md) addR…

【每天学习一点点 day04】工程化 npm create 脚手架 create-vue, vue-cli 执行原理① - npm cli

希望我们每个人都能找到属于自己的花期&#xff0c;不急不躁&#xff0c;静等风来。 今天打算用 Docusaurus 开始搭建自己的知识库&#xff0c;之前早已有此想法&#xff0c;遗憾的是没有坚持下来。 这次借助这个机会&#xff0c;也计划将自己【每天学习一点点】系列整理在自己…

java面试多线程篇

文章说明 在文档中对所有的面试题都进行了难易程度和出现频率的等级说明 星数越多代表权重越大&#xff0c;最多五颗星&#xff08;☆☆☆☆☆&#xff09; 最少一颗星&#xff08;☆&#xff09; 1.线程的基础知识 1.1 线程和进程的区别&#xff1f; 难易程度&#xff1a;☆☆…

外贸技巧:怎么挖掘老客户的潜在订单?

做外贸的方法千千万&#xff0c;但是要想让客户重复下单&#xff0c;就需要多花点心思&#xff0c;研究一下策略&#xff0c;采取一些独特措施去再次挖掘他们的潜在订单。来看看这些外贸销售精英都是怎么做的&#xff1f; 01 主动向客户推荐其他产品 Top Sales&#xff1a;新…

代码随想录刷题笔记 DAY 29 | 非递减子序列 No.491 | 全排列 No.46 | 全排列 II No. 47

文章目录 Day 2901. 非递减子序列&#xff08;No. 491&#xff09;1.1 题目1.2 笔记1.3 代码 02. 全排列&#xff08;No. 46&#xff09;2.1 题目2.2 笔记2.3 代码 03. 全排列 II&#xff08;No. 47&#xff09;3.1 题目3.2 笔记3.3 代码 Day 29 01. 非递减子序列&#xff08;…