当前位置: 首页 > news >正文

C语言(输入printf()函数)

 

printf()的细节操作很多,对于现阶段的朋友来说,主要还是以理解为主。因为很多的确很难用到。

目录

一.转换说明(占位符)

二.printf()转换说明修饰符

1.数字

2.%数字1.数字2

3.整型转换字符补充

4.标记

-符号

+符号

空格符号

#符号

0符号

5.*修饰符

三.转换不匹配(很重要,尽量理解)

四.printf()返回值

五.printf打印较长的字符串

1.分成多个printf()进行打印

2.在字符串中使用反斜杠(\)和Enter键盘组合来断行

3.把字符串分为多个字符串,printf在打印时候会自动把字符串进行连接打印

一.转换说明(占位符)

printf("My favorite number is %d because it is first.\n",num);  //打印字符串,将num变量存储的1替换到 %d 的位置上。这里的%d就是占位符(转换说明),下面我将列出我们能使用到的基本多有转换说明

%a

浮点数十六进制P记数法

%c

单个字符

%d

有符号十进制数

%i

有符号十进制整数(与%d相同)

%e

浮点数,e记数法

%f

浮点数,十进制记数法

%g

根据值的不同,自动选择%f,%e

%o

无符号八进制整数

%p

指针

%s

字符串

%u

无符号十进制整数

%x

无符号十六进制整数

%%

打印%

%zd

sizeof()和strlen的返回类型

这快大家根据打印数据类型选择就好了。我们下面将重点介绍转换说明修饰符

二.printf()转换说明修饰符

printf()的转换说明修饰符是插入在% 字母之间的

1.数字

表示最小字段宽度。如果字段无法容纳待打印的数字或字符串,系统会使用更宽的字段。

首先是%3d,这里a只有1,但3规定了字段为3,所以在最后的打印中1前面补了2个空格。%10s同样的道理,因为hello只有五个字段宽度,所以打印时前面补了5个空格。

然后是%3s,因为hello是5个字段宽度。所以满足3这个最小字段宽度,正常打印就好了。

2.%数字1.数字2

数字1用于表示最小字符宽度(就算上面那个效果)

数字2:

对于%e,%f转换,表示小数点右边数字的位数

对于%g,表示有效数字最大位数

对于%s,表示待打印字符的最大数量

对于整数,表示待打印数字的最小位数

首先是%1.3e和%1.3f,这里我们看到不管是数字计数法还是指数计数法,小数点后都只有三位数。

%1.3g,首先解释下最大位数就算不包括小数点所展示出来的数。所以只显示了1.11只有三个数字。

%1.3s,规定了最多显示三个字符,所以只打印了hel

%1.3d,整数的数字2和数字1功能一样,只不过前者用0填充空缺,后者用空格填充空缺

3.整型转换字符补充

其实这个我们在前面基本也都遇到了,我们先来总体看看

h

基本使用%hd,就是short的占位符

j

表示intmax_t或uintmax_t类型的值。而这些值就定义在stdint.h中。而intmax_t就算long long数据类型别名,uintmax_t就算unsigned long long 的别名,用lld和llud都可以。

ll

lld表示long long int

t

表示ptrdiff_t类型的值。Ptrdiff_t是两个指针差值的类型

z

表示size_t类型的值。就算sizeof和strlen类型的返回值。

除了t的其他的我们都讲过了,所以这里重点介绍指针差值。其实看到图你基本就能看出来其实用%d也可以,只不过会警报。所以如果你实在搞不懂该用哪种返回类型,直接用%d就行,如果结果不对就%ld。

4.标记

标记一共有五种。分别为-,+,空格,#,0;

-

待打印项左对齐(从字段的左侧开始打印该项)

+

符号值若为正,则在值前面显示加号。若为负,则在值前面显示减号

空格

符号值若为正,则在值前面显示空格。若为负,则在值前面显示减号并覆盖空格

#

把结果转换为另一种心事。%0,则以0开始。如以%下,则以0x先开始。对于浮点数类型,#保证了即使后面没有任何数字,也打印一个小数点字符。对于%g,#防止结果后面的0被删除。

0

对于数值,用前导0代替空格填充字段宽度。如果已经出现-标记,则忽略0标记

首先

-符号

+符号

和直接使用%d的区别在于,整数前面会加个+号

空格符号

红下划线那里有一个前导零

#符号

这里重点讲解下%.0f和%.0f。为了表现对于浮点数类型,#保证了即使后面没有任何数字,也打印一个小数点字符。如果不加.0这个修饰符就看不出效果,它会自动算出小数点后6位(如下图所示)

0符号

首先来看红下划线,%10d里面一共有2个修饰符,一个0,另一个10(最小字段宽度),所以前导都用0填充,这个效果用%.10d是一样的

黄色下划线部分,有三个修饰符,-(左对齐),0(因为-的存在自动省略),10(最小字段宽度)

5.*修饰符

用变量值代替*号部分

可以看到

printf("%*d",number,rv)我们用number变量代替*位置,rv代替d位置

我们这里输入了5,在因为是整数类,所以会打印5位数,4个空格加数字1

三.转换不匹配(很重要,尽量理解)

第一行:num变量对应转换说明 %hd 和 %hu的输出都是336,因为%hd对应short和unsigned short它们内部存储的位是一样的,且都是正好,所以不会出现转化不匹配的情况(这就是一个正常情况)

第二行:mnum变量对应的转换说明%hd 有符号的short,所以-336正常,而%hu为无符号的short,又遇到赋值,这里就会出现打印65200数值情况,并非期望的336。这事由于short int类型的值在外面的参考系统中的表示方式所致。

首先,short int的大小是2字节,其次,系统使用二进制补码来表示有符号整数(这个外面在后面会进行讲解的)。这种情况下,0~32767表示正数部分,32768~65535则用于表示负数,其中,65535表示-1,65534为-2,所以-336就为65200.

这里需要知道,当要解释为有符号int,65200代表-336.被解释为无符号int时,65200则就表示65200

第三行:short int时二字节,char是1字节。当printf()使用%c打印336是,它只会查看存储336的2字节中的后1字节。相当于”以256为模“,即该数字除以256后取其玉树,336%256为80,对应P

最后一行和第三行原理一样,%d用4个字节,%hd用2个字节,%c用一个字节

这里我们在来看一个例子,

在使用%le,打印时,会取8个字节的空间,而long只占4个字节空间,这就导致它会取后面四个字符的其他空间值,最终形成的一个乱值。

四.printf()返回值

它将返回打印字符的个数。如果有输出错误,printf()则返回一个负值

五.printf打印较长的字符串

在日常当然遇到打印较长字符串的时候,一半有三种解决。这边我们以打印字符串"Today is the New Year. I wish you good health, career and study in the new year"为例。

1.分成多个printf()进行打印

2.在字符串中使用反斜杠(\)和Enter键盘组合来断行

3.把字符串分为多个字符串,printf在打印时候会自动把字符串进行连接打印


好了朋友们我们今天的内容到这就结束了,今天的内容到这里就结束了,如果有啥不会的朋友记得论坛里面提问哈~

如果朋友你感觉文章的内容对你有帮助,可以点赞关注文章和专栏以及关注我哈,嘿嘿嘿我会定期更新文章的,谢谢朋友你的支持哈

 

http://www.lryc.cn/news/3033.html

相关文章:

  • Zabbix 构建监控告警平台(四)
  • 2004-2019年285个地级市实际GDP与名义GDP
  • Node.js笔记-Express(基于Node.js的web开发框架)
  • 力扣sql简单篇练习(十五)
  • 浅谈动态代理
  • Idea超好用的管理工具ToolBox(附带idea工具)
  • Spring 中 ApplicationContext 和 BeanFactory 的区别
  • 情人节有哪些数码好物值得送礼?情人节实用性强的数码好物推荐
  • java中flatMap用法
  • 【MySQL Shell】8.9.2 InnoDB ClusterSet 集群中的不一致事务集(GTID集)
  • logstash毫秒时间戳转日期以及使用业务日志时间戳替换原始@timestamp
  • 【C语言】qsort——回调函数
  • 8年软件测试工程师经验感悟
  • 腾讯云安全组配置参考版
  • 代码覆盖率工具OpenCppCoverage在Windows上的使用
  • 代码随想录算法训练营第24天25天|● 77. 组合● 216.组合总和III ● 17.电话号码的字母组合
  • Python_pytorch
  • 【Java|golang】2335. 装满杯子需要的最短总时长
  • shell编程之sed
  • 安全寒假作业nginx反向代理+负载均衡上传webshell重难点+apache漏洞
  • day35|01背包问题、416. 分割等和子集
  • Linux内核启动(3,0.11版本)内核启动完成与进入内核main函数
  • 【2023】Prometheus-Alertmanager高可用集群
  • 2023-2-11 刷题情况
  • 2019_41 考研408
  • Linux账号与用户组
  • 有趣的Hack-A-Sat黑掉卫星挑战赛——定位卫星Jackson
  • JAVA集合专题3 —— vector + LinkedList + Set
  • Scout:一款功能强大的轻量级URL模糊测试与爬取工具
  • leaflet 解决marker呈现灰色边框的问题