目录
printf的定义
printf的使用
函数说明
说明符(specifier)
flags(标志)
width(最小宽度)
.precision(精度)
length(类型长度)
转义序列
printf的定义
printf 是指格式化输出函数,主要功能是向标准输出设备按规定格式输出信息。printf 是C语言标准库函数,定义于头文件 <stdio.h>printf 函数的一般调用格式为:printf("<格式化字符串>", <参量表>) 。输出的字符串除了可以是字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义 。
printf的使用
printf("%[flags][width][.precision][length]specifier");
//即:%[标志][最小宽度][.精度][类型长度]说明符
函数说明
format 转换说明组成是%[flags][width][.precision][length]specifier
说明符(specifier)
说明符(specifier)用于规定输出数据的类型,下面列举部分常用的说明符
打印的数据类型 | 说明符(specifier) | 描述 |
---|---|---|
int | %o %d %x | october 八进制整数 decimal 十进制整数 hex 十六进制整数 |
unsigned int | %u | unsigned 无符号整数 |
char | %c | charator 字符 |
字符串 | %s | string 字符串 |
short | %d | short decimal 短整型(short int) |
unsigned short | %u | unsigned short 无符号短整型 |
long | %ld | long decimal 长整型(long int) |
unsigned long | %u | unsigned long 无符号长整型 |
float | %f | float 单精度浮点数 |
double | %lf | long float 双精度浮点数 |
代码示例及运行结果:
flags(标志)
标志(flags)用于规定输出样式
- | 减号 | 在给定的字段宽度内左对齐,右边填充空格(默认右对齐) |
+ | 加号 | 强制在结果之前显示加号或减号(+ 或 -),即正数前面会显示 + 号; 默认情况下,只有负数前面会显示一个 - 号 |
(空格) | 空格 | 输出值为正时加上空格,为负时加上负号 [3] |
# | 井号 | specifier 是无符号八进制或无符号十六进制时,增加前缀 0、0x; specifier 是 浮点数时,一定使用小数点; specifier 是double时,尾部的 0 保留 |
0 | 数字零 | 对于所有的数字格式,使用前导零填充字段宽度(如果出现了减号标志或者指定了精度,则忽略该标志) |
代码示例及运行结果:
width(最小宽度)
最小宽度(width)用于控制显示字段的宽度
注意:字段宽度的最小值,如果输出的字段长度小于该数,结果会用前导空格填充;如果输出的字段长度大于该数,结果使用更宽的字段,不会截断输出。
.precision(精度)
精度(.precision)用于指定输出精度
length(类型长度)
length(类型长度) | 描述 |
---|---|
h | 参数被解释为短整型或无符号短整型(仅适用于整数说明符:i、d、o、u、x 和 X) |
l | 参数被解释为长整型或无符号长整型,适用于整数说明符(i、d、o、u、x 和 X)及说明符 c(表示一个宽字符)和 s(表示宽字符字符串) |
代码示例及运行结果:
转义序列
转义序列在字符串中会被自动转换为相应的特殊字符。printf() 使用的常见转义字符如下:
转义序列 | 描述 |
---|---|
\' | 单引号 |
\" | 双引号 |
\? | 问号 |
\\ | 反斜杠 |
\a | 铃声(提醒) |
\b | 退格 |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
补充:
\ddd | ddd表示1-3个八进制的数字。如:\130 |
\xdd | dd表示2个16进制的数字。如:\x30 |
请问:printf("c:\test\32\test.c");能正常输出吗?为什么?
显然不能,应为\t,\32会进行转义,结果如下
请问:printf("%d\n",strlen("c:\test\32\test.c"));长度为多少?是如何求得的?
如上图所示结果为13
\32 满足\ddd 是八进制数字,我们将它转换成十进制3*8+2*1=26,更具ASCII表可以查到其对应的字符为“—>”