C语言printf函数format参数输出格式及type、flags规定详解

format 参数输出的格式,定义格式为:

% type

规定数据输出方式,具体如下:

1.type 含义如下:

d 有符号10进制整数

i 有符号10进制整数

o 有符号8进制整数

u 无符号10进制整数

x 无符号的16进制数字,并以小写abcdef表示

X 无符号的16进制数字,并以大写ABCDEF表示

F/f 浮点数

E/e 用科学表示格式的浮点数

使用%f同%e表示中的总的位数,来表示最短的用以表示浮点数的方式, G采用同g格式,不过表示为指数。

c 单个字符

s 字符串

% 显示百分号本身

p 显示一个指针,near指针表示为:XXXX

far 指针表示为:XXXX:YYYY

n 相连参量应是一个指针,其中存放已写字符的个数

2.flags 规定输出格式,取值和含义如下:

无 右对齐,左边填充0和空格

  • 左对齐,右边填充空格
  • 在数字前增加符号 + 或 -

一个空格 只对负数显示符号

当type=c,s,d,i,u时没有影响

当type等于o时,在数值前面增加'0' ,当type等于x时,在数值前面增加"0x" ,当type等于X时,在数值前面增加"0X"。

type=e,E,f时,总是使用小数点

当type等于g、G的时候,除了数值是0的情况以外,总是会显示出小数点来,3.width它是用来对显示数值的那些宽度进行控制的,其取值以及含义是像这样的,n(n等于1、2、3等等),宽度需要至少为n位,要是不够的话就用空格去填充。

在n等于1、2、3等等的情况下,0n,其宽度最少得是n位,要是不够位数就在左边用0去填充,*格。

在式列表之内了,接下来的那个参数依旧是width 4.prec用以对小数点往后的位数实施控制,其取值以及含义是这样的:

无 按缺省精度显示

0 当type=d,i,o,u,x时,没有影响

type=e,E,f时,不显示小数点

n,其中n等于1,2,3等等,当type等于e、E、f 时,存在并表示着最大的小数位数。

type=其他,表示显示的最大宽度 .*

格式列表中,下一个参数还是width

5.F|N|h|l 表示指针是否是远指针或整数是否是长整数

F 远指针

n 近指针

h短整数或单精度浮点数

l 长整数或双精度浮点数

1.一般格式

printf(格式控制,输出表列)

打印输出,把"i等于% d,字符ch等于% c换行 ",按照格式,输出变量i和变量ch的值。

说明:

(1)用双撇号括起来的字符串被称作"转换控制字符串",这其中包含两种信息,它也被叫做"格式控制"。

①格式说明,是由"%"以及格式字符构成的,它具备如此作用,即将输出的数据转化为指定格式来输出。

②普通字符,即需要原样输出的字符。

(2)"输出表列"是需要输出的一些数据,可以是表达式

(3)printf函数的一般形式可以表示为

printf(参数1,参数2,......,参数n)

功能是将参数2~参数n按参数1给定的格式输出

2.格式字符(9种)

(1)d(或i)格式符。用来输出十进制整数,有以下几种用法:

①%d,按整型数据的实际长度输出。

②%md,其中m是被指定的输出字段的宽度,要是数据的位数比m小,那么左端会补上空格,倘若大于m,就会按照实际位数输出。

③%ld(%mld 也可),输出长整型数据。

例如:long a=123456;

printf("%ld",a);

(2)o格式符,它能够凭借八进制数的形式将整数予以输出。其格式存在具体的几种情况,分别是:%o, %mo, %lo, %mlo,这些亦都是可行的。

(3)数值x(或者大写的X)这种格式符号,会以十六进制数其形式去输出整数,其格式有,百分之x,百分之mx,百分之lx,百分之mlx这些都是可行的。

(4)(unsigned型数据也就是无符号数,会用u格式符来输出,是以十进制数形式输出的。其格式有%u,%mu,%lu这些都可以。)。

参见:li4-3.c/*无符号数据的输出*/

(5)c格式符,用来输出一个字符。格式:%c,%mc都可。

(6)s格式符,用于输出一个字符串,其格式有,%s,%ms,% - ms,%m.ns ,% - m.ns, 这些都是可行的。

参见:li4-5.c /*字符串的输出*/

(7)f格式符,用于输出实数(涵盖单、双精度),是以小数形式进行输出的。其格式存在多种,%f是呈现形式之一,%m.nf也是一种呈现形式,%-m.nf同样属于呈现形式。

注意:单精度实数的有效位数一般为7位,双精度为16位。

参见:li4-6.c/*输出单精度实数时的有效位数*/

li4-7.c/*输出双精度实数时的有效位数*/

li4-8.c/*输出实数时指定小数位数*/

(8)倘若使用e(或者E)格式符,那么会以指数的具体形式来输出实数,其格式分别是:%e,%m.ne,%-m.ne这些情况均可。

(9)g(或者G)格式符,用于输出实数,它依据数值的大小,自行挑选f格式或者e格式,(挑选输出时占用宽度较小的那一种)。

3.说明

(1)除了X、E、G,这三个要用大写字母表示,之外,其他格式字符必须用小写字母。

(2)"格式控制"字符串内可以包含转义字符;

(3)假设想要把字符"%"给输出出来,那么就应当在"格式控制"字符串里头,使用连续的两个%来进行表示,就像这样。

printf("%f%%",1.0/3);

(4)格式字符表参见下表

表4.1 printf格式字符

格式字符 说 明

d,i 以带符号的十进制形式输出整数(正数不输出符号)

o 以八进制无符号形式输出整数(不输出前导符0)

以十六进制无符号形式输出整数,不输出那所谓的前导符0x,若使用x,那么在输出十六进制数里的a至f时会以小写形式呈现,要是用X,便会以大写字母输出。

u 以无符号十进制形式输出整数

c 以字符形式输出,只输出一个字符

s 输出字符串

f 以小数形式输出单、双精度数,隐含输出6位小数

e,E 以指数形式输出实数

g、G选用%f格式,或选用%e格式,从中输出宽度较短的那种格式,不输出没有意义的0。

表4.2 printf的附加格式说明字符

字符

说明

字母l

用于长整型整数,可加在格式符d、o、x、u前面

m(代表一个正整数)

数据最小宽度

n(代表一个正整数)

对实数,表示输出n位小数;对字符串,表示截取的字符个数

输出的数字或字符在域内向左靠

程序例:

#include

int main()

printf("Hello,world/n");

while(1);

#include

int main()

int i = 1, j =2;

printf("%d %d/n",i,j);

while(1);

printf 命令

用途

写格式化输出。

语法

printf Format

Argument ...

描述

将 Argument 参数,经由 Format 参数掌控格式化,进行转换、格式化后,用 printf 命令写入标准输出,且格式化输出行长度不可超过 LINE_MAX 字节。

下列环境变量影响 printf 命令的执行:

当LC_ALL以及相应的、以LC_开头的环境变量未指定语言环境时,LANG确定语言环境编目所使用的语言环境。

LC_ALL,它确定语言环境,这个语言环境是用来覆盖,由LANG,或者其它任何LC_环境变量设置的,任何语言环境编目值的。

确定把文本字节数据顺序解释为字符的语言环境是LC_CTYPE,示例为单一字节对应多字节字符的参数,而这些又是例如这样的情况。

LC_MESSAGES 确定写消息使用的语言。

确认数字格式编排的语言环境是 LC_NUMERIC,此环境变量会对运用 e、E、f、g 和 G 转换字符来编写的数字格式有所影响。

Format 参数是包含三种对象类型的一个字符串:

* 无格式字符复制到输出流。

有一种情况是转换规范,其结果是,在值参数列表里,会进行检索,检索的项的数量是零个或者更多个。

* 以下是转义序列,在将其复制至输出流之际,这些序列致使与其相关的操作于具备此功能的设备上得以显示:

// 反斜杠

/a 警告

/b 退格

/f 换页

/n 换行

/r 回车

/t 跳格

/v 垂直跳格

ddd,ddd是1位、2位或者3位体现为八进制数字的成分。这些转义序列,呈现为以八进制数所明确指定的、具备数字值的字节的样子。

Argument参数,是由一个或者多个字符串所构成的列表,在Format参数起到的作用的控制之下,被书写到标准输出那里。

在必要情形下,Format参数会时常重新加以使用,用以满足Argument参数,会如同提供了空字符串Argument那般,对任何额外的c或者s转换规范进行评估;其他额外转换规范,会如同提供了0 Argument那般进行评估,在此处,Format参数不含有转换规范,仅仅出现Argument参数,其结果是不确定的。

每个 Format 参数中的转换规范都具有如下顺序的语法:

  1. % (百分号)。

  2. 零个或者更多数量的选项,对转换规范的含义予以修改。选项字符及其对应的含义分别为:

  • 转换结果在字段中左对齐。
  • 符号转换结果常以符号(+ 或者 -)开始。

当符号转换的最初那个字符并非符号时,结果的起始部分将会是空格。要是空格以及 + 选项字符都呈现出来,那么空格选项字符将会被忽视。

该此选项将指定的值转换至备用格式,对于c、d、i、u以及s转换而言,此选项并无作用,对o转换来说,它会增加精度,迫使结果的首个数字为a、0(零),对于x和X转换来讲,非零结果会分别带有0x或0X前缀,对于e、E、f、g以及G转换而言,结果通常会包含基数字,则即便基数字后面没有数字,对于g和G转换来说,结尾零并不像通常那样被除去。

0针对于d、i、o、u、x、e、E、f、g以及G的转换,位于前头的零,就是那个跟在符号不然就是底数后面的,它被用来填充字段宽度,不会用空格去填充。要是显示0(零)还有 -(减号)选项,0(零)选项会被忽略掉。针对于d、i、o、u、x以及X的转换,要是指定了精度,0(零)选项会被忽略。

注:

其它转换,没有定义其行为。

  1. 存有可选择的用以给出最小值的字段宽度的情况下的十进制数字字符串,要是转换值字符小于该字段宽度,会这般,即此字段将从左边朝着右边依照既定的字段宽度去进行填充,倘若指定了左边调整选项,那么字段会在右边实施填充,要是转换的结果比字段宽度要宽,就会扩展这个字段以纳含转换之后的结果,不会出现截断现象,然而,较小的精度可能致使在右边出现截断情况。

  2. 可用的精准度,精准度乃是一个,点后跟用以十为基数的数字所构成的字符串,倘若并未给出精准度,则按照零来处置,精准度规定。

* d、o、i、 u、x 或 X 转换的最少数字显示位数。

* e 和 f 转换的基数字符后的最少数字显示位数。

* g 转换的最大有效数字位数。

* s 转换中字符串的最大打印字节数目。

  1. 指示要应用的转换类型的一个字符,例如:

% 不进行转换。打印一个 %(百分号)。

d,i接收整数值,将其转换为用符号表示来呈现的十进制表现形式,把能够用更少位数表示的值,通过前导零扩展来处理,用显示的最小位数来进行精度指定,缺省精度是1,精度为零的零值转换后结果为空字符串,使用零作为前导字符去指定字段宽度,从而导致字段宽度值用前导零填充。

o 接收整数值,把它转变成有符号的八进制符号表示方式。精度确定显示的最小数字位数,要是值转换后能用更少位数来呈现,就会采用前导零扩展。缺省精度是1,精度为零的零值转换后的结果是个空字符串。用零当作前导字符注明字段宽度,使得字段宽度值被前导零填充,不能用八进制值来表示字段宽度。

对于输入为整数值的情况,它会被进行转换,转换后会以无符号的十进制符号表示法呈现。其精度的存在,用于规定所显示的最小数字位数。若值转换后通过更少的位数就能够表示,那么便会采用前导零扩展的方式。这里缺省精度是1。而当出现精度为零的零值进行转换时,所得到的结果是一个空字符串。采用零作为前导字符,以此指定字段宽度,这会致使字段宽度值通过前导零来进行填充。

x,X会接纳整数值,接着把它转变为十六进制符号表示法。对于x的转换,采用字母abcdef,而对于X的转换,则采用字母ABCDEF。精度用于指定显示的最小数字位数。要是值转换后能用更少的位数来呈现,就会运用前导零扩展。缺省精度是1。精度为零的零值转换的结果是个空字符串。用零当作前导字符去指定字段宽度,会致使字段宽度值用前导零来填充。

接受浮点或双精度值,将其转换为十进制符号表示法,格式为ddd.ddd,基数字符后的数字位数等于规定精度,LC_NUMERIC语言环境编目确定该格式中使用的基数字符。若不指定精度,则输出六个数字。若精度为0(零),则不显示基数字符。

e、E会接受浮点或者双精度值,接着将其转换为指数表示的形式。这种形式呈现为"d.dde{ + | - }dd",在基数字符之前存在一个数字,这里显示为十进制点。基数字符之后的数字位数等同于规定的精度。LC_NUMERIC语言环境编目能够确定在这个格式里所使用的基数字符。倘若不指定精度,那么就会输出六个数字。要是精度为0(零),则不会显示基数字符。E转换字符会在指数之前生成带E而非带e的数字。指数一般至少包含两个数字。然而,要是所要打印的那个指数值,是大于两个数字的情况下,就是说如有必要的时候,那就得去打印附加指数数字。

g、G接收浮点以及双精度值,将其转换为f或e转换字符样式(在G转换时为E),通过精度来指定有效数字个数,尾零会从结果中去除,基数字符只有在后面跟着数字时才显示,所使用的样式取决于转换的值,样式g仅在转换的指数结果小于 -4,或者大于或等于精度的情况下使用。

c 接受值将其作为字符串并打印字符串中的第一个字符。

将 s 接受值当作字符串,打印字符串里的字符,一直到字符串结束,或者到达精度所指示的字符个数。要是没有指定精度,那就打印全部字符,一直到出现第一个空字符。

用字符串形态来接纳,有可能含有反斜杠转义的序列。从经过换算的字符串里不断打印字节,直至整个字符串完了,或者直到达到精度规范所指明的字节数量。若不牵涉精度的设定,那就持续打印所有字节,直至首个空字符展现出来。

支持下列反斜杠转义序列:

先前罗列出来的、反斜杠转义序列,处于 Format 参数描述范围之下。这些转义序列会被转变至单单由它们所表示的那个字符。

用于显示非打印字符的 /c(反斜杠 c)序列,它会致使 printf 命令忽略 Format 参数里字符串参数所包含的其余所有字符串,包括所有剩余的字符串参数以及所有附加字符,并且不会将其显示出来。

退出状态

该命令返回以下出口值:

0 成功完成。

>0 发生错误。

示例

  1. 输入下列命令:

printf ("%5d%4d/n",1213,43);

产生下列输出:

1213 _43

打印所有给定字符串采用 Format 参数三次,0(零)由 printf 命令给出,用来满足最后的 %4d 转换规格。

  1. 输入下列命令

printf ("%c %c/n",78,79);

产生下列输出:

N_O

文件

/usr/bin/printf 包含 printf 命令。

相关推荐
算法鑫探2 小时前
算法中的二分法(二分查找)详解及示例
c语言·数据结构·算法·新人首发
艾莉丝努力练剑2 小时前
【Linux加餐】mmap文件映射
linux·运维·服务器·c语言·c++·学习
叶子野格2 小时前
《C语言学习:编程例题》8
c语言·开发语言·c++·学习·算法·visual studio
HockerF3 小时前
cpu原理到c/c++指针
c语言·c++
handler014 小时前
Linux基础知识(1)
linux·服务器·c语言·开发语言·数据结构·c++
yashuk4 小时前
C语言实现PAT习题题解及算法学习笔记,附SQLite介绍
c语言·sqlite·开源项目·算法学习·pat习题
良木生香4 小时前
【C++ 初阶】:内存管理的迭代革新——从malloc/free 到 new/delete 的时代更迭
c语言·开发语言·c++
code_li4 小时前
▍Type-C 不等于 Type-C,是看起来已经「统一」了
c语言·开发语言·type-c
CHANG_THE_WORLD4 小时前
C 语言的 `fread` 与 C++ 的 `ifstream::read` 区别及设计哲学
java·c语言·c++