0%

C格式化修饰符

printf()与scanf()函数格式化修饰

printf()函数转换说明及其打印的输出结果

转换说明 输出
%a 浮点数、十六进制数和p计数法(C99/C11)
%A 浮点数、十六进制数和p计数法(C99/C11)
%c 单个字符
%d 有符号十进制整数
%e 浮点数,e计数法
%E 浮点数,e计数法
%f 浮点数,十进制计数法
%g 根据值的不同,自动选择%f或%e,%e格式用于指数小于-4或者大于等于精度时
%G 根据值的不同,自动选择%f或%E,%E格式用于指数小于-4或者大于等于精度时
%i 有符号十进制整数(与%d相同)
%o 无符号八进制整数
%p 指针
%s 字符串
%u 无符号十进制整数
%x 无符号十六进制整数,使用十六进制数0f
%X 无符号十六进制整数,使用十六进制数0F
%% 打印一个百分号

printf()的修饰符

修饰符 含义
标记 标记表中描述了5种标记(-、+、空格、#和0),可以使用不同标记或使用多个标记
示例:”%-10d”
数字 最小字段宽度
如果该字段不能容纳待打印的数字或字符串,系统会使用更宽的字段
示例:”%4d”
.数字 精度
对于%e、%E和%f,表示小数点右边数字的位数
对于%g和%G转换,表示有效数字最大位数
对于%s转换,表示待打印字符的最大数量
对于整数转换,表示待打印数字的最小位数
如果有必要使用前导 0 来达到这个位数
只使用,表示其后跟随一个0,所以%.f和%.0f相同
示例:”%5.2f”打印一个浮点数,字段宽度为5,其中小数点后有两位数字
h 和整型转换说明一起使用
表示 short int 或 unsigned short int类型的值
示例:”%hu”, “%hx”, “%6.4hd”
hh 和整型转换说明一起使用
表示 short char 或 unsigned char类型的值
示例:”%hhu”, “%hhx”, “%6.4hhd”
j 和整型转换说明一起使用
表示 intmax_t 或 uintmax_t 类型的值。这些类型定义在 stdint.h中
示例:”%jd”, “%8jx”
l 和整型转换说明一起使用
表示 long int 或 unsigned long int 类型的值
示例:”%ld”, “%8lu”
ll 和整型转换说明一起使用
表示 long long int 或 unsigned long long int 类型的值(C99)
示例:”%lld”, “%8llu”
L 和浮点转换说明一起使用
表示 long double 类型的值
示例:”%Lf”, “%10.4Le”
t 和整型转换说明一起使用
表示 ptrdiff_t 类型的值。ptrdiff_t是两个指针差值的类型(C99)
示例:”%td”, “%12ti”
z 和整型转换说明一起使用
表示 size_t 类型的值。size_t 是 sizeof 返回的类型(C99)
示例:”%zd”, “%12zd”

printf()中的标记

标记 含义
- 待打印项左对齐。即,从字段的左侧开始打印该项
示例:”%-20s”
+ 有符号值若为正,则在之前显示加号;若为负,则显示减号
示例:”%+6.2f”
空格 有符号值若为正,则在之前不显示任何符号;若为负,则显示减号
示例:”% 6.2f”
# 把结果转换成另一种形式。
如果是%o格式,则以0开始;
如果是%x或%X格式,则以0x或0X开始;
对于所有的浮点数格式,#保证了即使后面没有任何数字,也打印一个小数点字符
对于%g或%G格式,#防止结果后面的0被删除
示例:”%#o”, “%#8.0f”, “%+#10.3e”
0 对于数值格式,用前导0代替空格。
对于整数格式,如果出现-标记或指定精度,则忽略该标记。
示例:”%010d”, “%0.83f”

scanf()的转换说明

转换说明 含义
%c 把输入解释成字符
%d 把输入解释成有符号十进制整数
%e、%f、%g、%a 把输入解释成浮点数(C99标准新增了%a)
%E、%F、%G、%A 把输入解释成浮点数(C99标准新增了%A)
%i 把输入解释成有符号十进制整数
%o 把输入解释成有符号八进制整数
%p 把输入解释成指针(地址)
%s 把输入解释成字符串。
从第1个非空白字符开始,到下一个空白字符之前的所有字符都是输入
%u 把输入解释成无符号十进制整数
%x、%X 把输入解释成有符号十六进制整数

scanf()转换说明中的修饰符

转换说明 含义
* 抑制赋值
示例:”%*d”
数字 最大字段宽度。输入达到最大字段宽度处,或第1次遇到空白字符时停止
示例:”%10s”
hh 把整数作为 signed char 或 unsigned char 类型读取
示例:”%hhd”, “%hhu”
ll 把整数作为 long long 或 unsigned long long 类型读取
示例:”%lld”, “%llu”
h、l 或 L “%hd”和”%hi”表明把对应的值储存为 short int 类型
“%ho”、”%hx”和”%hu”表明把对应的值储存为 unsigned short int 类型
“%ld”和”%li”表明把对应的值储存为 long 类型
“%lo”、”%lx”和”%lu”表明把对应的值储存为 unsigned long int 类型
“%le”、”%lf”和”%lg”表明把对应的值储存为 double 类型
在e、f、g前面使用L时,表明把对应的值储存为 long double 类型
如果没有修饰符,d、i、o、x,表明把对应的值被储存为int类型
f、g表明把对应的值被储存为float类型
j 在整型转换说明后面时
表明使用 intmax_t 或 uintmax_t 类型(C99)
示例:”%jd”, “%ju”
z 在整型转换说明后面时
表明使用sizeof 的返回类型(C99)
示例:”%zd”, “%zo”
t 在整型转换说明后面时
表明使用表示两个指针差值的类型(C99)
示例:”%td”, “%tx”