C语言printf输出格式:%d %f %s等用法详解

整型的printf函数,其参数为指向字符型常量指针的格式字符串。

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取值为1、2、3等时,对于type等于e、E、f的情况,所表示的最大小数位数。

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

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

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

F 远指针

n 近指针

h短整数或单精度浮点数

l 长整数或双精度浮点数

1.一般格式

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

说明:

(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)u格式符,它是用来输出unsigned型数据的,也就是无符号数,是以十进制数形式进行输出的。其格式有多种,比如%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)

x,X 输出整数时采用十六进制无符号形式,并且不输出前导符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 参数,通过 printf 命令把它转换、格式化后,写到标准输出,Argument 参数的格式化是由 Format 参数进行控制的,格式化输出行的字节长度不能超出 LINE_MAX。

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

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

  1. LC_ALL确定语言环境。2. 该语言环境用于覆盖编目值。3. 此编目值由LANG或其它任何LC_环境变量设置。4. 且该编目值属于语言环境。

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参数,会将任何额外的c或者s转换规范,当作好像提供了空字符串Argument那样去评估,而其它额外的转换规范,则会当作好像提供了0 Argument那样去评估,在此处仅仅有Argument参数出现、Format参数不含有转换规范,这一结果是不确定的。

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

  1. % (百分号)。

  2. 零个或者更多的选项,对转换规范的含义予以修改。选项字符以及它们所具有的含义是:

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

要是将符号进行转换时,首个字符并非是符号,那么得出的结果其前缀就要是空格。倘若空格以及 + 选项字符都予以显示,那将会忽略空格选项字符。

此选项将指定值转换为备用格式,对于c、d、i、u和s转换,该选项不起任何作用,对于o转换,它通过增加精度来强制结果的首个数字为a、0(零),对于x和X转换,非零结果分别带有0x或0X前缀,对于e、E、f、g和G转换,结果通常包含基数字符,即便基数字符后面没有数字,对于g和G转换,结尾零不像通常那样被除去。

首先,对于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,精度为零的零值转换结果为空字符串,用零作前导字符指定字段宽度,会使字段宽度值用前导零填充。

接收整数值,将其转化为有符号的八进制符号表示形式,精度用以指定显示的最少数字位数,要是值转换后能够用更少数位来呈现,那就采用前导零扩展,缺省精度是1,精度为零的零值转换后的结果是个空字符串,用零当作前导字符去指定字段宽度,致使使用前导零来填充字段宽度值,不要用八进制值表示字段宽度。

u接收整数值,将其转换为无符号的十进制符号表示法,精度指定显示的最小数字位数,若值转换后能用更少位数表示,便使用前导零扩展,缺省精度是1,精度为零的零值转换结果是空字符串,用零作为前导字符指定字段宽度,致使使用前导零填充字段宽度值。

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

关于f,它会接受浮点或者双精度值,接着把该值转换为十进制符号表示法,其格式是ddd.ddd,这里就会出现一个情况,基数字符也就是在格式里显示为十进制点的那个字符,它后面的数字位数,实际上是等于规定的精度的,而LC_NUMERIC语言环境编目,它所起到的作用是确定在这个格式中使用的基数字符。至于具体场景当中呢,如果是不指定精度这种情况,那么输出的就是六个数字。要是精度是0(零),那么基数字符将不会显示。

e,E会接受浮点类型、双精度值,进而将其转化为指数表示形式,即d.dde{+|-}dd。在基数字符之前存在一个数字,此处呈十进制点,基数字符之后的数字位数等同于规定精度。LC_NUMERIC语言环境的编目用于确定此格式中所使用的基数字符。要是不指定精度,那么输出将是六个数字。若精度为0(零),则不会显示基数字符。E转换字符会在指数前生成带有E而非e的数字。指数通常至少含有两个数字。要是打印的指数值比两个数字大,那么在必要的情况下,要有附加指数数字被打印出来,然而。

g、它接受浮点以及双精度值,将其转换为 f 或者 e 转换字符式样(在 G 转换情形下是 E),通过 精度来指定有效数字的数量,尾零会从结果里被除去,基数字符只有在其后面跟着数字的时候才进行显示,所使用的样式是依据转换的值来确定的,样式 g 仅仅在转换的指数结果小于 -4,或者大于或等于精度时才会被使用。

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

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

将b接受的值当作字符串,此字符串有可能含有反斜杠转义序列。从转换后的字符串开始打印字节,一直打印到字符串结束,或者达到精度规范所指示的字节数量时停止。要是没有指定精度,那就一直打印全部字节,一直到有第一个空字符出现的时候为止。

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

位于 Format 参数描述下的,是先前罗列出来的反斜杠转义序列。这些转义序列会被转变为它们所代表的单个字符。

/c(反斜杠 c)序列,它不会显示,会让 printf 命令忽略 Format 参数里字符串参数所含的其余全部字符串,还有所有剩余的字符串参数以及所有附加字符。

退出状态

该命令返回以下出口值:

0 成功完成。

>0 发生错误。

示例

  1. 输入下列命令:

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

产生下列输出:

1213 _43

三次运用Formatter参数去打印全部给定的字符串,零是由printf命令供给的,用以适配最后的百分之四d转换规格。

  1. 输入下列命令

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

产生下列输出:

N_O

文件

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

相关推荐
我不是懒洋洋2 小时前
【经典题目】链表OJ(相交链表、环形链表、环形链表II、随机链表的复制)
c语言·开发语言·数据结构·链表·ecmascript·visual studio
聆风吟º2 小时前
【C标准库】深入理解C语言strstr函数:子字符串查找的实用指南
c语言·开发语言·库函数·strstr
算法鑫探2 小时前
C语言实现 简易计算器教程
c语言·数据结构·算法·新人首发
charlie1145141913 小时前
嵌入式现代C++教程实战篇第12篇:C宏时代的LED驱动 —— 能跑但不优雅
c语言·c++·stm32·单片机·嵌入式硬件·c
Fanfanaas3 小时前
Linux 系统编程 进程篇 (二)
linux·运维·服务器·c语言·开发语言·学习
念恒123063 小时前
Linux基础开发工具(编写一个简易进度条)
linux·c语言
Tisfy3 小时前
LeetCode 2515.到目标字符串的最短距离:从中间往两边遍历
算法·leetcode·字符串·题解·数组·遍历
jinyishu_4 小时前
链表经典算法题(2)
c语言·数据结构·链表
深邃-5 小时前
【C语言】-自定义类型:结构体
c语言·开发语言·数据结构·c++·html5