【C语言】printf你真的用明白了吗?

这篇具有很好参考价值的文章主要介绍了【C语言】printf你真的用明白了吗?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.printf是什么?

2.格式控制字符串 与 输出值参数表

2.1格式控制字符串

2.2输出值参数表

2.3格式字符 和 格式修饰符 一览图 

2.3.1格式字符一览图

2.3.2格式修饰符

 3.常用格式字符详解

 %d

%md 

 %f

%.nf

%m.f

 %c和%s

%c

%s

 6.printf的返回值

5.printf中的常见问题

6.总结 

7.后言


1.printf是什么?

printf函数是格式输出函数,其关键字最末一个字母f即为“格式(format)”之意。其功能是按照用户指定的格式,把指定的数据显示到显示器屏幕上。

printf函数是一个标准库函数,它是函数原型在头文件“stdio.h”。但作为一个特例,不要求在使用printf函数之前必须包含stdio.h文件。printf函数调用的一般形式为:

printf(“格式控制字符串”,输出表列) 

printf("f=%f,c=%f\n",f,c);

 其中,f=%f,c=%f\n 是格式控制字符串f,c 是输出值参数表


2.格式控制字符串 与 输出值参数表

printf("f=%f,c=%f\n",f,c);

2.1格式控制字符串

格式控制字符串是用"双引号"括起来的字符串,包括三类信息:

  1. 格式字符。格式字符由“%”引导,如%d、%f等。它的作用是控制输出字符的格式
  2. 转义字符。格式控制字符串里的转义字符按照转义后的含义输出,如上面printf函数双引号内的换行符“\n”,即输出回车。
  3. 普通字符。普通字符即需要在输出时原样输出的字符,如上面printf函数中双引号内的“f=”和“c= ”部分。

2.2输出值参数表

(2)输出值参数表是需要输出的数据项的列表,输出数据项可以是常量、变量或表达式,输出值参数之间用逗号分隔,其类型应与格式字符相匹配。每个格式字符和输出值参数表中的输出值参数一一对应如果没有输出参数时,格式控制字符串中不再需要格式字符。  


2.3格式字符 和 格式修饰符 一览图 

2.3.1格式字符一览图

格式字符 说明
d 输出带符号的十进制整数,正数的符号省略
u 以无符号的十进制整数形式输出
o 以无符号的八进制整数形式输出,不输出前导符0
x 以无符号十六进制整数形式(小写)输出,不输出前导符0x
X 以无符号十六进制整数形式(大写)输出,不输出前导符0X
f 以小数形式输出单、双精度数,隐含输出6位小数
e 以指数形式(小写e表示指数部分)输出实数
E 以指数形式(大写E表示指数部分)输出实数
g 自动选取f或e中输出宽度较小的一种使用,且不输出无意义的0
c 输出一个字符
s 输出字符串

注:%o %x %X如果向输出前导符要在格式字符前加#, 如%#o %#x %#X 。

2.3.2格式修饰符

格式修饰符 说明
英文字母l 修饰格式字符d、u、o、x时,用于输出long型数据
英文字母L 修饰格式字符f、e、g时,用于输出long double型数据
英文字母h 修饰格式字符d、o、x时,用于输出short型数据
输出域宽m(m为整数) 指定输出项输出时所占的列数
显示精度.n (n为整数)    对于实数,表示输出n位小数;对于字符串,表示截取的字符个数
-(减号)

输出数字或字符在域内向左靠


 3.常用格式字符详解

 %d

 输出带符号的十进制整数,正数的符号不输出。

int a = 888,b = -666;
printf("%d\n%d",a,b);

 输出结果:

【C语言】printf你真的用明白了吗?

 还可以在%和格式字符中间插入格式修饰符,用于指定输出数据的域宽(所占的列数),如用“%5d”,指定输出数据占5列,输出的数据在域内向右靠齐。如:

%md 

int a = 888, b = -666;
printf("%5d\n%5d", a, b);

输出结果: 

【C语言】printf你真的用明白了吗?

从结果可以看出,在%和d中间加数字5,888占3个域宽,指定域宽>输出数据长度输出数据靠右,前面补空格。

如果 指定域宽<输出数据长度 呢?

 【C语言】printf你真的用明白了吗?可见会按照原样输出。

若要输出long(长整型)数据,则在格式字符d前面加字母l(代表long),即“%ld”。


 %f

 输出一个实数(包括单精度、双精度、长双精度),以小数形式输出,有以下几种用法:

不指定输出数据的长度,由系统根据数据的实际情况决定数据所占的列数。系统处理的方法一般是:实数中的整数部分全部输出,小数部分输出6位

【C语言】printf你真的用明白了吗?

虽然a是double类型,所以 a/3也是double类型。但%f格式字符只能输出6位小数


那怎么控制输出小数点后面的位数呢? 

%.nf

n表示小数点后保留n位小数。如下

【C语言】printf你真的用明白了吗?

当然浮点型也可以控制域宽,如下


%m.f

【C语言】printf你真的用明白了吗?

可以看出 %3.f 实际是 %3.0f小数点前面控制域宽,小数点后面控制小数点保留的个数。


 %c和%s

%c

【C语言】printf你真的用明白了吗?

也可以加格式修饰符指定域宽,如:

【C语言】printf你真的用明白了吗?可见字符a前面补4个空格。因为字符a占一个占位。

%s

 【C语言】printf你真的用明白了吗?


 6.printf的返回值

初学C语言时用的最多的函数就是printf函数,而printf函数的返回值是被大多数人忽略的,以至于很多应聘者在碰到关于printf返回值的编程时一头雾水,接下来就来谈谈printf的返回值。

int A=43;
printf("%d\n",printf("%d",printf("%d",A)));
【C语言】printf你真的用明白了吗?看到运行结果和代码,可以想到是为什么吗?没看出也没关系,我们分步骤看看。

 代码逻辑:首先,从最内层开始A=43被直接输出。然后,最内层printf的返回值以%d的格式被中间层的printf输出为2。最后,最外层的printf以%d的格式输出中间层的返回值为1。

其实观察第二个printf的输出值和第三个printf的输出值,第一个printf的输出值和第二个printf的输出值不难发现:
printf的返回值就是输出的字符数量

第三个printf输出"43"字符数量为2,于是返回值为2,第二个printf就输出"2”
第二个printf输出"2"字符数量为1,于是返回值为1,第一个printf就输出"1"

要注意一点是:返回值是是输出的字符数量,包括数字,字母,标点符号,空格等。

printf("%d\n", printf("0,1,2,3\n"));

【C语言】printf你真的用明白了吗?通过运行结果不难看出,数字0123分别占一个字符,标点符号" , "也是分别占一个字符位,换行符" \n "也是占一个。

如果代码加一句,猜猜num的值是多少?

int num=printf("%d\n", printf("0,1,2,3\n"));
printf("%d", num);

【C语言】printf你真的用明白了吗?答案是2,num值为2说明num接受printf的返回值是2,也说明了printf输出字符数量是2,其中一个是数字8,另外一个就是printf格式控制中的 " \n "可见,格式控制中的字符也算进返回值哦!

那有人又问了?为什么第一次结果不是9呢?

因为是先输出了8,再换行啊。要注意执行先后顺序!!!


5.printf中的常见问题

  • 格式控制字符串中有%引导的格式字符时,输出值参数表中的数量以及类型必须和格式字符一致

【C语言】printf你真的用明白了吗?

分析:

  1. 第一个printf函数中的输出参数b是double型值58.8,但对应的格式控制符为%d,当类型不一致时并不会进行类型转换,而会将实际转入的double型值当作需要的整形类型来理解,因此出现非预期结果;
  2. 第二个printf函数中,格式控制字符串给出了两个%引导的格式字符,但是输出参数表中只有一个参数a,参数缺少。因此输出c的值默认为内存中a变量后面存储单元的数据值,c的值无法确定
  • 格式控制字符串中没有%引导的格式字符时,也不需要输出值参数表,直接输出字符串内容,转义字符按照转义后的实际意义输出,如:

【C语言】printf你真的用明白了吗?

  • 实现左对齐方法 
  • 通过“ - ”号来控制控制左对齐,可以无视域宽控制

【C语言】printf你真的用明白了吗?


6.总结 

  1. 常用的格式控制,一般是%d,%f,%c,%s,及其他们独特的输出方式
  2. 每一个输出都可以设置域宽,默认内容右对齐
  3. 格式控制字符串中有%引导的格式字符时,输出值参数表中的数量以及类型必须和格式字符一致
  4. 格式控制字符串中没有%引导的格式字符时,也不需要输出值参数表,直接输出字符串内容,转义字符按照转义后的实际意义输出
  5. 实现左对齐方法 :通过“ - ”号来控制控制左对齐

出生日期输入输出_牛客题霸_牛客网 (nowcoder.com)

小练习题,可以考核自己掌握了吗?


7.后言

本篇比较详细的介绍了C语言中,printf函数的概念,使用方法,注意事项,和实践操作。

因篇幅有限,和个人能力有限,可能存在内容不完整和错误,希望大家积极指正。我相信此文章可以给小白一定的帮助,大佬也可以当复习,感谢大家支持。文章来源地址https://www.toymoban.com/news/detail-513550.html

到了这里,关于【C语言】printf你真的用明白了吗?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Fil真的要归零了吗?

    最近听见有人说有fil的内部消息,意思就是fil要清零了,关于这个消息今天就大家好好聊一聊fil到底会不会归零。 首先市场上面没有这种确定性的说法,一定会到多少多少,我也不知道你们是从哪里听来的消息,如果这个市场有确定性,那你在得到这个内部消息之后,完全可

    2024年02月13日
    浏览(65)
  • 互联网行业真的不行了吗?

    英雄算法联盟 - 七月集训 已经开始 16 天,八月算法集训 将于 08月01日 正式开始,目前已经提前开始报名,报名方式参见(八月算法集训报名),想要参加的同学,建议提早报名,因为对于算法零基础的同学,会有一些提前的准备工作,比如需要 1 - 5 天的时间完成预训练 和

    2024年02月16日
    浏览(58)
  • 最基础的数组你真的掌握了吗?

    🐱‍🐉作者简介:大家好,我是黑洞晓威,一名大二学生,希望和大家一起进步。 👿本文收录于 算法 ,本专栏是针对大学生、初学算法的人准备,解析常见的数据结构与算法,同时备战蓝桥杯。 首先要知道数组在内存中的存储方式,这样才能真正理解数组相关的题 数组

    2023年04月12日
    浏览(51)
  • 【Spring】IOC,你真的懂了吗?

    作者:狮子也疯狂 专栏:《spring开发》 坚持做好每一步,幸运之神自然会驾凌在你的身上 Spring框架是狮子入坑Java的第一个开源框架。当我们接触到它时,总会发现老师或者书本介绍这两个词汇—— IOC和AOP ,它们分别是 控制反转和面向切面 ,是Spring的思想内核,提供了控制

    2024年02月20日
    浏览(62)
  • 最长递增子序列问题(你真的会了吗)

    目录 一.最长递增子序列问题I 二.最长递增子序列问题II 三. 最长递增子序列问题III 1.对应牛客网链接 最长上升子序列(一)_牛客题霸_牛客网 (nowcoder.com) 2.题目描述:  3.解题思路 1.首先我们分析题意:最长递增子序列拆:要递增的,还是序列,不一定连续 ,要长度最长的。

    2024年02月15日
    浏览(53)
  • AI人工智能时代真的到来了吗?

    近一个月来,关于AI人工智能的话题此起彼伏,先有OpenAI发布GPT-4,后有百度推出文心一言,再有微软把GPT-4接入Office全家桶并命名为“Microsoft 365 Copilot”,除此之外,微软Bing还上线了AI绘图功能、谷歌开放聊天机器人Bard等等,各大巨头们这一波操作使得AI又一次火爆全网,人

    2024年02月02日
    浏览(58)
  • 关于低代码开发,你是真的了解了吗?

    在低代码开发已是大势所趋的今天,不少企业都切身感受到了低代码开发带来的便利。低代码开发平台的优势在当下数字化浪潮中,为企业提供了定制专属的数字化解决方案。 低代码本身没有太强的行业属性,这也让低代码开发平台能够更加灵活地适应不同行业。目前低代码

    2024年02月05日
    浏览(54)
  • 制造业的寒冬真的要来了吗?

    制造业的寒冬真的要来了吗?其实当前,我国制造业发展水平是处于全球第三阵列,排名第四的: 但能处第三序列靠前,还是因为“规模发展”起了重要支撑——依靠规模拉动发展。所以如果从“质量效益”、“结构优化”、“持续发展”三项来评估,我们仅排名第六,就与

    2023年04月08日
    浏览(103)
  • 静态路由原理与配置,你真的都掌握了吗?

    1.静态路由 静态路由是 由用户管理员在路由器中手动配置的固定路由, 因为是人工配置的,所以当网络的拓扑结构或链路的状态发生变化时,需要我们手动修改路由表里面的相关信息。 静态路由的特点: (1)静态路由固定了路径的转发,因此对路由器的路由选择进行控制

    2024年02月09日
    浏览(51)
  • 分布式事务TCC 你真的理解了吗

    TCC(补偿事务) TCC 属于目前比较火的一种柔性事务解决方案。TCC 这个概念最早诞生于数据库专家帕特 · 赫兰德(Pat Helland)于 2007 发表的 《Life beyond Distributed Transactions: an Apostate’s Opinion》 这篇论文,感兴趣的小伙伴可以阅读一下这篇论文。 三个阶段 简单来说,TCC 是 Tr

    2024年02月02日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包