1.1
基本⽤法
printf()
是在标准库的头⽂件
stdio.h
定义的。使⽤这个函数之前,必须在源码⽂件头部引⼊这
个头⽂件。
printf()
的作⽤是将参数⽂本输出到屏幕。它名字⾥⾯的
f
代表
format
(格式化),表⽰可以
定制输出⽂本的格式。
上⾯命令会在屏幕上输出⼀⾏⽂字“Hello World”。
printf()
不会在⾏尾⾃动添加换⾏符,运⾏结束后,光标就停留在输出结束的地⽅,不会⾃动换
⾏。
为了让光标移到下⼀⾏的开头,可以在输出⽂本的结尾,添加⼀个换⾏符
\n
。
1.2 占位符
printf()
可以在输出⽂本中指定占位符。
所谓 “占位符”,就是这个位置可以⽤其他值代⼊。
上⾯⽰例中,
There are %d apples\n
是输出⽂本,⾥⾯的
%d
就是占位符,表⽰这个位置要
⽤其他值来替换。占位符的第⼀个字符⼀律为百分号
%
,第⼆个字符表⽰占位符的类型,
%d
表⽰这
⾥代⼊的值必须是⼀个整数。
printf()
的第⼆个参数就是替换占位符的值,上⾯的例⼦是整数
3
替换
%d
。执⾏后的输出结果
就是
There are 3 apples
。
常⽤的占位符除了
%d
,还有
%s
表⽰代⼊的是字符串。
上⾯⽰例中,
%s
表⽰代⼊的是⼀个字符串,所以
printf()
的第⼆个参数就必须是字符串,这个例
⼦是
zhangsan
。执⾏后的输出就是
zhangsan will come tonight
。
输出⽂本⾥⾯可以使⽤多个占位符。
上⾯⽰例中,输出⽂本
%s says it is %d o'clock
有两个占位符,第⼀个是字符串占位 符 %s
,第⼆个是整数占位符
%d
,分别对应
printf()
的第⼆个参数(
lisi
)和第三个参数 ( 21
)。执⾏后的输出就是
lisi says it is 21 o'clock
。
printf()
参数与占位符是⼀⼀对应关系,如果有
n
个占位符,
printf()
的参数就应该有
n + 1 个。如果参数个数少于对应的占位符,
printf()
可能会输出内存中的任意值。
1.3 占位符列举
printf()
的占位符有许多种类,与 C 语⾔的数据类型相对应。下⾯按照字⺟顺序,列出常⽤的占位
符,⽅便查找,具体含义在后⾯章节介绍。
•
%a
:⼗六进制浮点数,字⺟输出为⼩写。
•
%A
:⼗六进制浮点数,字⺟输出为⼤写。
•
%c
:字符。
•
%d
:⼗进制整数。
•
%e
:使⽤科学计数法的浮点数,指数部分的
e
为⼩写。
•
%E
:使⽤科学计数法的浮点数,指数部分的
E
为⼤写。
•
%i
:整数,基本等同于
%d
。
•
%f
:⼩数(包含
float
类型和
double
类型)。
•
%g
:6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的e
为⼩写。
•
%G
:等同于
%g
,唯⼀的区别是指数部分的
E
为⼤写。
•
%hd
:⼗进制 short int 类型。
•
%ho
:⼋进制 short int 类型。
•
%hx
:⼗六进制 short int 类型。
•
%hu
:unsigned short int 类型。
•
%ld
:⼗进制 long int 类型。
•
%lo
:⼋进制 long int 类型。
•
%lx
:⼗六进制 long int 类型。
•
%lu
:unsigned long int 类型。
•
%lld
:⼗进制 long long int 类型。
•
%llo
:⼋进制 long long int 类型。
•
%llx
:⼗六进制 long long int 类型。
•
%llu
:unsigned long long int 类型。
•
%Le
:科学计数法表⽰的 long double 类型浮点数。
•
%Lf
:long double 类型浮点数。
•
%n
:已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中。
•
%o
:⼋进制整数。
•
%p
:指针。
•
%s
:字符串。
•
%u
:⽆符号整数(unsigned int)。
•
%x
:⼗六进制整数。
•
%zd
:
size_t
类型。
•
%%
:输出⼀个百分号。
1.4 输出格式
1.4.1 限定宽度
printf()
允许限定占位符的最⼩宽度。
上⾯⽰例中,
%5d
表⽰这个占位符的宽度⾄少为5位。如果不满5位,对应的值的前⾯会添加格。输出的值默认是右对⻬,即输出内容前⾯会有空格;如果希望改成左对⻬,在输出内容后⾯添加空
格,可以在占位符的
%
的后⾯插⼊⼀个 -
号。
对于⼩数,这个限定符会限制所有数字的最⼩显⽰宽度。
上⾯⽰例中,
%12f
表⽰输出的浮点数最少要占据12位。由于⼩数的默认显⽰精度是⼩数点后6位, 所以 123.45
输出结果的头部会添加2个空格,同样是右对齐。如果想要左对齐,就在%后加-号。后面会补空格。
1.4.2 总是显⽰正负号
默认情况下,
printf()
不对正数显⽰ +
号,只对负数显⽰
-
号。如果想让正数也输出
+
号,可
以在占位符的
%
后⾯加⼀个
+
。
1.4.3 限定⼩数位数
输出⼩数时,有时希望限定⼩数的位数。举例来说,希望⼩数点后⾯只保留两位,占位符可以写
成
%.2f
。
上⾯⽰例中,如果希望⼩数点后⾯输出3位(
0.500
),占位符就要写成
%.3f
。
这种写法可以与限定宽度占位符,结合使⽤。
上⾯⽰例中,
%6.2f
表⽰输出字符串最⼩宽度为6,⼩数位数为2。所以,输出字符串的头部有两个 空格。
最⼩宽度和⼩数位数这两个限定值,都可以⽤
*
代替,通过
printf()
的参数传⼊。
上⾯⽰例中,
%*.*f
的两个星号通过
printf()
的两个参数
6
和
2
传⼊。
1.4.4 输出部分字符串
%s
占位符⽤来输出字符串,默认是全部输出。如果只想输出开头的部分,可以⽤
%.[m]s
指定输出的⻓度,其中 [m]
代表⼀个数字,表⽰所要输出的⻓度。
上⾯⽰例中,占位符
%.5s
表⽰只输出字符串“hello world”的前5个字符,即“hello”