格式转化字符及其含义
printf 函数中的格式转化字符及其含义
格式转换符 |
含义 |
对应的表达式数据类型 |
%d 或 %i | 以十进制形式输出一个整型数据 | 有符号整数 |
%x 或 &X | 以十六进制格式输出一个无符号整型数据 | 无符号整数 |
%o | 以八进制格式输出一个无符号整型数据 | 无符号整数 |
%u | 以十进制格式输出一个无符号整型数据 | 无符号整数 |
%c | 输出一个字符型数据 | 字符型 |
%s | 输出一个字符串 | 字符串 |
%f | 以十进制小数形式输出一个浮点型数据 | 浮点型 |
%e 或 %E | 以指数形式输出一个浮点型数据 | 浮点型 |
%g | 自动选择合适的形式输出数据 | 浮点型 |
%p | 以主机的格式显示指针 | 指针类型 |
另外,可以在格式转换字符和%之间插入一些辅助的格式控制字符。因此,格式控制字符的一般格式为:
%[flag][width][.precision][size]Type
有符号整数的输出
输出有符号整数的格式控制符的一般形式为:
%[-][+][0][width][.precision][l][h]d
其中各控制符的说明如下:
- -:表示输出的数据左对齐,默认时是右对齐。
- +:输出正数时,在数的前面加上+号。
- 0:右对齐时,如果实际宽度小于width,则在右边的空位补0。
- width:无符号整数,表示输出整数的最小宽度。若实际宽度大于width,则按照实际宽度输出。
- precision:无符号整数,表示至少要输出precision位。若整数的位数大于precision,则按照实际的位数输出,否则在左边的空位上补0。
- l:输出长整形数据
- h:输出短整形数据
无符号整数的输出
输出无符号整数的格式控制符的一般形式为:
%[-][#][0][width][.precision][l][h]u|o|x|X
其中各控制符的说明如下:
- #:当以八进制形式输出数据(%o)时,在数字前输出0;当以十六进制形式输出数据(%x或%X)时,在数字前输出0x或0X。
- precision:与前面介绍的相同,但要注意八进制数字前的0和十六进制前的0x或0X同样占位数。
- 其他字段与前面介绍的相同。
小结:
格式转换符 | 数据类型 |
%u | unsigned int |
%ld | long |
%lx | 十六进制表示long |
%lo | 八进制表示long |
%hd | short |
%hx | 十六进制表示short |
%ho | 八进制表示short |
%lu | unsigned long |
%lld | long long |
%llu | unsigned long long |
实数的输出
输出实数的格式控制符的一般形式为:
%[-][+][#][0][width][.precision][l|L]f|e|E|g|G
其中各控制符的说明如下:
- #:必须输出小数点。
- precision:规定输出实数时,小数部分的位数。
- l:输出double型数据(默认也是输出double型数据)。
- L:输出long double型数据。
- 其他字段的含义与前面介绍的相同。
字符和字符串的输出
输出字符和字符串的格式控制符的一般形式为:
输出字符:%[-][0][width]c
输出字符串:%[-][0][width][.precison]s
其中各控制符的说明如下:
- precision:只输出字符串的前precision个字符。
- 其他字段的含义与前面介绍的相同。
其它可用的修饰符
标志 | 意义 |
(空格) |
有符号的值若为正,则显示时带前导空格(但是不显示符号);若为负,则带减号符号。+标志会覆盖空格标志。 示例:"% 6.2f" |
* |
如果您不想事先指定字段宽度,而是希望由程序来指定该值,那么您可以在字段宽度部分使用*代替数字来达到目的,但是您也必须使用一个参数来告诉函数字段宽度应该是什么。(注意在scanf函数中*是另一种含义。) 示例:printf("The number is: %*d.\n", width, number); |
使用printf函数要注意一下几点
1. 格式控制字符串后面表达式的个数一般要与格式控制字符串中的格式控制符的个数相等。
2. 输出时表达式值的计算顺序是从右到左。
3. 格式转换符中,除了X、E、G以外,其他均为小写。
4. 表达式的实际数据类型要与格式转换符所表示的类型相符,printf函数不会进行不同数据类型之间的自动转换。