深入printf

目录

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%uunsigned 无符号整数
char%ccharator 字符
字符串%sstring  字符串
short%dshort decimal 短整型(short int)
unsigned short%uunsigned short 无符号短整型
long%ldlong decimal 长整型(long int)
unsigned long%luunsigned long 无符号长整型
float%ffloat 单精度浮点数
double%lflong 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水平制表符

 补充:

\dddddd表示1-3个八进制的数字。如:\130
\xdddd表示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表可以查到其对应的字符为“—>”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简单^不简单

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值