1. 编程学习网 > 编程教程 > C语言教程 > C语言printf函数的占位用法

C语言printf函数的占位用法

2.占位符

  在我们在前面的章节中,使用%d用于整型的占位,%s用于字符串的占位。接下来我们详细讨论一下,占位符的细节。

  占位符以%百分号开始,依次具有下面这些元素:(以下是简化版本,初学过程中,先学好常用的即可,避免掉入繁枝细节。完整的版本可以参考《C语言参考手册》第十五章)

  1. 零个或多个标志字符(-,+,0,#,或空格)。
  2. 一个可选的十进制整数常量表示的最小字段宽度
  3. 一个可选的用点号表示的精度范围,它的后面可以跟一个十进制整数。
  4. 一个可选的长度指示符,可以用下列字母组合之一来表示:ll,l,L。
  5. 由单个字符表示的转换操作,取自下面这个集合:d,e,f,o,s,u,x,X。

format

  下面将会使用实际演示的方法,让大家理解这5个空格里填什么会有什么效果的。

  注意:演示中,红色字体仅仅是第一行代码的解析。 后续代码与第一行类似,不再赘述。

2.1 最小字段标志

  最小字段标志表示打印出来的十进制整数的最小宽度。如果数值大小未达到最小宽度的要求,那么将会以空格填充。

示例:最小宽度5、6、7位 min_width

2.2 标志

标志 0 使用0而不是空格作为填充字符

示例:最小宽度5位,且使用0标志,使用0填充小于最小宽度的部分。 flag0

标志 - 值在字段宽度左对齐

示例:最小宽度5位,且使用0标志,使用0填充小于最小宽度的部分且左对齐。 flag-

标志 + 总是产生符号,+(整数)或-(负数)

示例:最小宽度5位,且使用0标志,使用0填充小于最小宽度的部分。标志+,始终产生符号。 flag+

标志 空格 总是产生符号-(为负数时)或空格(为正数时)

示例:最小宽度5位,且使用0标志,使用0填充小于最小宽度的部分。标志 空格 ,始终产生符号,正数为空格,负数为-。 flag_space

标志 # 后续介绍

2.3 精度

  精度控制小数点后的位数。 dot

2.4 转换操作

  在前面小节中,我们用的%d来打印整型,用%s来打印字符串。在这一章中,我们认识到了,d和s,是选择了不同的转换操作。d代表将参数使用整型的方式进行转换,而s则是字符串。

  事实上,仅仅用d来进行整型的转换操作,还是不完整的。我们来认识一下更多的转换操作。

转换操作 类型 备注
d int 有符号整型十进制打印
u unsigned int (可以使用int,但是符号位看做数据位) 无符号整型十进制打印
o unsigned int (可以使用int,但是符号位看做数据位) 无符号整型八进制打印
x unsigned int (可以使用int,但是符号位看做数据位) 无符号整型十六进制打印
X unsigned int (可以使用int,但是符号位看做数据位) 无符号整型十六进制打印(大写字母)
f double 浮点数打印
e double 浮点数科学计数法打印
s char * 字符串打印

转换操作1

  接下来,我们再看看o和x、X的用法。

转换操作2

  o将参数使用八进制打印。

  x将参数使用十六进制打印。

  X将参数使用十六进制打印(大写)。

  还记不记得,前面有一个 标志 # 还没有介绍呢?对的,这个#标志加上之后,可以使八进制前加0,十六进制前加0x。

  在上面的表格中,我们好像仅仅讲了int和unsigned int。但是,short,unsigned short,float怎么办呢?有属于它们的转换操作吗?

  事实上,short、unsigned short和float在作为参数,传入printf的时候。会被自动转换成为int,float会被转换为double。所以,我们不需要额外去找它们的转换操作了。使用上面表中的转换操作即可满足要求。


​TIPS:

  上面的这种转换关系来自于默认函数实参转换​。对于变参函数的可变部分的实参​,会在​参数传入时进行转换。长度小于int的整型数据,在经过转换后,都会成为int。长度大于或等于int的整型数据,类型不变。​具体参见《C语言参考手册》6.3.5。


2.5 长度指定符

  既然比int小的类型都能转换成int,float能转换成double。这是从小到大的转换。那long,和long long,long double呢。它们总不能从大转小了吧,从大转小,就会意味着数据丢失。对的,它们不会被自动转换。那之前的转换操作对它们适用吗?我们知道d是用于转换int的,int假设有4个字节,那对于long,long long这种,大于4个字节的,肯定是不适用的。所以我们需要在转换操作前加长度指示符。

长度指示符 类型
l long
ll long long
L long double

长度指示符

2.6 示例

  最后,我们用几个示例,让大家继续熟悉一下,占位符的写法。 example

本文由IT教学网整理发布,转载请注明出处:http://www.itjx.com/jiaocheng/cyuyan/595.html

联系我们

在线咨询:点击这里给我发消息

咨询电话:400-998-2681

工作时间:7*24小时无休