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” |