printf()函数中的格式串格式为:[标志][输出最小宽度][。精度]类型。其中:方括号[]中的项为可选项。1)类型类型字符用以表示输出数据的类型  d以十进制形式输出带符号整数(正数不输出符号)  o以八进制形式输出无符号整数(不输出前缀0)  x,X以十六进制形式输出无符号整数(不输出前缀Ox)  u以十进制形式输出无符号整数  f以小数形式输出单、双精度实数  e,E以指数形式输出单、双精度实数  g,G以%f或%e中较短的输出宽度输出单、双精度实数  c输出单个字符  s输出字符串2)标志标志字符为-、+、#  -结果左对齐,右边填空格  +输出符号(正号或负号)  #对o类,在输出时加前缀o;对x类,在输出时加前缀0x;3)输出最小宽度用十进制整数来表示输出的最少位数。若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0(当最小宽度数值以0开头时)。4)精度精度格式符以“。”开头,后跟十进制整数。本项的意义是:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。综合以上,可以看出,%04x表示按16进制输出数据,最小输出宽度为4个字符,右对齐,如果输出的数据小于4个字符,前补0,如:printf("%04x",100);//输出0064100的16进制数是64。

输出控制符

常用的输出控制符主要有以下几个:

格式控制符 说明
%c 输出一个单一的字符
%hd、%d、%ld 以十进制、有符号的形式输出 short、int、long 类型的整数
%hu、%u、%lu 以十进制、无符号的形式输出 short、int、long 类型的整数
%ho、%o、%lo 以八进制、不带前缀、无符号的形式输出 short、int、long 类型的整数
%#ho、%#o、%#lo 以八进制、带前缀、无符号的形式输出 short、int、long 类型的整数
%hx、%x、%lx
%hX、%X、%lX
以十六进制、不带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字也小写;如果 X 大写,那么输出的十六进制数字也大写。
%#hx、%#x、%#lx
%#hX、%#X、%#lX
以十六进制、带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字和前缀都小写;如果 X 大写,那么输出的十六进制数字和前缀都大写。
%f、%lf 以十进制的形式输出 float、double 类型的小数
%e、%le
%E、%lE
以指数的形式输出 float、double 类型的小数。如果 e 小写,那么输出结果中的 e 也小写;如果 E 大写,那么输出结果中的 E 也大写。
%g、%lg
%G、%lG
以十进制和指数中较短的形式输出 float、double 类型的小数,并且小数部分的最后不会添加多余的 0。如果 g 小写,那么当以指数形式输出时 e 也小写;如果 G 大写,那么当以指数形式输出时 E 也大写。
%s 输出一个字符串

printf函数说明

printf() 是最灵活、最复杂、最常用的输出函数,完全可以替代 puts() 和 putchar()。

假如现在我们输出一个 4×4 的整数矩阵,为了增强阅读性,数字要对齐,怎么办呢?我们显然可以这样做:

#include <stdio.h>
int main()
{int a1=20, a2=345, a3=700, a4=22;int b1=56720, b2=9999, b3=20098, b4=2;int c1=233, c2=205, c3=1, c4=6666;int d1=34, d2=0, d3=23, d4=23006783;printf("%-9d %-9d %-9d %-9d\n", a1, a2, a3, a4);printf("%-9d %-9d %-9d %-9d\n", b1, b2, b3, b4);printf("%-9d %-9d %-9d %-9d\n", c1, c2, c3, c4);printf("%-9d %-9d %-9d %-9d\n", d1, d2, d3, d4);return 0;
}

运行结果:

20        345       700       22
56720     9999      20098     2
233       205       1         6666
34        0         23        23006783

这样写起来更加方便,即使改变某个数字,也无需修改 printf() 语句,增加或者减少空格数目。

%-9d中,d表示以十进制输出,9表示最少占9个字符的宽度,宽度不足以空格补齐,-表示左对齐。综合起来,%-9d表示以十进制输出,左对齐,宽度最小为9个字符。大家可以亲自试试%9d的输出效果。

printf() 格式控制符的完整形式如下:

%[flag][width][.precision]type

[ ] 表示此处的内容可有可无,是可以省略的。

1) type 表示输出类型,比如 %d、%f、%c、%lf,type 就分别对应 d、f、c、lf;再如,%-9d中 type 对应 d。

type 这一项必须有,这意味着输出时必须要知道是什么类型。

2) width 表示最小输出宽度,也就是至少占用几个字符的位置;例如,%-9d中 width 对应 9,表示输出结果最少占用 9 个字符的宽度。

当输出结果的宽度不足 width 时,以空格补齐(如果没有指定对齐方式,默认会在左边补齐空格);当输出结果的宽度超过 width 时,width 不再起作用,按照数据本身的宽度来输出。

下面的代码演示了 width 的用法:

#include <stdio.h>
int main(){
int n = 234;
float f = 9.8;
char c = '@';
char *str = "http://c.biancheng.net";
printf("%10d%12f%4c%8s", n, f, c, str);return 0;
}

运行结果:

       234    9.800000   @http://c.biancheng.net

对输出结果的说明:

  • n 的指定输出宽度为 10,234 的宽度为 3,所以前边要补上 7 个空格。
  • f 的指定输出宽度为 12,9.800000 的宽度为 8,所以前边要补上 4 个空格。
  • str 的指定输出宽度为 8,"http://c.biancheng.net" 的宽度为 22,超过了 8,所以指定输出宽度不再起作用,而是按照 str 的实际宽度输出。

3) .precision 表示输出精度,也就是小数的位数。

  • 当小数部分的位数大于 precision 时,会按照四舍五入的原则丢掉多余的数字;
  • 当小数部分的位数小于 precision 时,会在后面补 0。

另外,.precision 也可以用于整数和字符串,但是功能却是相反的:

  • 用于整数时,.precision 表示最小输出宽度。与 width 不同的是,整数的宽度不足时会在左边补 0,而不是补空格。
  • 用于字符串时,.precision 表示最大输出宽度,或者说截取字符串。当字符串的长度大于 precision 时,会截掉多余的字符;当字符串的长度小于 precision 时,.precision 就不再起作用。

下面的例子:

#include <stdio.h>
int main(){int n = 123456;double f = 882.923672;char *str = "abcdefghi";printf("n: %.9d  %.4d\n", n, n);printf("f: %.2lf  %.4lf  %.10lf\n", f, f, f);printf("str: %.5s  %.15s\n", str, str);return 0;
}

运行结果:

n: 000123456  123456
f: 882.92  882.9237  882.9236720000
str: abcde  abcdefghi

对输出结果的说明:

  • 对于 n,.precision 表示最小输出宽度。n 本身的宽度为 6,当 precision 为 9 时,大于 6,要在 n 的前面补 3 个 0;当 precision 为 4 时,小于 6,不再起作用。
  • 对于 f,.precision 表示输出精度。f 的小数部分有 6 位数字,当 precision 为 2 或者 4 时,都小于 6,要按照四舍五入的原则截断小数;当 precision 为 10 时,大于 6,要在小数的后面补四个 0。
  • 对于 str,.precision 表示最大输出宽度。str 本身的宽度为 9,当 precision 为 5 时,小于 9,要截取 str 的前 5 个字符;当 precision 为 15 时,大于 9,不再起作用。

4) flag 是标志字符。例如,%#x中 flag 对应 #,%-9d中 flags 对应-。下表列出了 printf() 可以用的 flag:

标志字符 含  义
- -表示左对齐。如果没有,就按照默认的对齐方式,默认一般为右对齐。
+ 用于整数或者小数,表示输出符号(正负号)。如果没有,那么只有负数才会输出符号。
空格 用于整数或者小数,输出值为正时冠以空格,为负时冠以负号。
#
  • 对于八进制(%o)和十六进制(%x / %X)整数,# 表示在输出时添加前缀;八进制的前缀是 0,十六进制的前缀是 0x / 0X。
  • 对于小数(%f / %e / %g),# 表示强迫输出小数点。如果没有小数部分,默认是不输出小数点的,加上 # 以后,即使没有小数部分也会带上小数点。

下面的例子:

#include <stdio.h>
int main(){int m = 192, n = -943;float f = 84.342;printf("m=%10d, m=%-10d\n", m, m);  //演示 - 的用法printf("m=%+d, n=%+d\n", m, n);  //演示 + 的用法printf("m=% d, n=% d\n", m, n);  //演示空格的用法printf("f=%.0f, f=%#.0f\n", f, f);  //演示#的用法return 0;
}

运行结果:

m=       192, m=192
m=+192, n=-943
m= 192, n=-943
f=84, f=84.

对输出结果的说明:

  • 当以%10d输出 m 时,是右对齐,所以在 192 前面补七个空格;当以%-10d输出 m 时,是左对齐,所以在 192 后面补七个空格。
  • m 是正数,以%+d输出时要带上正号;n 是负数,以%+d输出时要带上负号。
  • m 是正数,以% d输出时要在前面加空格;n 是负数,以% d输出时要在前面加负号。
  • %.0f表示保留 0 位小数,也就是只输出整数部分,不输出小数部分。默认情况下,这种输出形式是不带小数点的,但是如果有了#标志,那么就要在整数的后面“硬加上”一个小数点,以和纯整数区分开。

printf格式字符相关推荐

  1. C语言printf函数格式字符

    C语言printf函数格式字符: 1.%d,按整型数据的实际长度输出. 2.%md,m为指定的输出字段的宽度. 3.%ld,输出长整型数据. 4.o格式符,以八进制整型式输出整数. 5.x格式符,以十 ...

  2. printf 格式控制符的完整格式

    printf的格式控制的完整格式: %  -  0  m.n  l或h  格式字符 下面对组成格式说明的各项加以说明: ①%:表示格式说明的起始符号,不可缺少. ②-:有-表示左对齐输出,如省略表示右 ...

  3. C语言中printf格式详解

    转自:http://blog.sina.com.cn/s/blog_60d6aadc0100undv.html printf的格式控制的完整格式: % - 0 m.n l或h 格式字符 下面对组成格式 ...

  4. C语言Printf格式大全(各种%输出形式)

    C语言Printf格式 C中格式字符串的一般形式为: %[标志][输出最小宽度][.精度][长度]类型, 其中方括号[]中的项为可选项.各项的意义介绍如下: 1.类型类型字符用以表示输出数据的类型,其 ...

  5. c语言printf输出字符表情,C语言中printf输出的奇怪错误

    你留意一下标准库里面的stdarg.h文件,它里面定义了几个宏,分别是va_start.va_arg.va_end,这几个宏都是用来做不定参数传递的.特别注意的是va_arg在获取传递进来的参数时依赖 ...

  6. C语言中%d等的作用(格式字符)

    格式说明由"%"和格式字符组成,如%d%f等.它的作用是将输出的数据转换为指定的格式输出.格式说明总是由"%"字符开始的.不同类型的数据用不同的格式字符. 格式 ...

  7. c语言中printf的转义字符,C语言Printf格式

    C中格式字符串的一般形式为: %[标志][输出最小宽度][.精度][长度]类型, 其中方括号[]中的项为可选项.各项的意义介绍如下: 1.类型类型字符用以表示输出数据的类型,其格式符和意义下表所示: ...

  8. C语言​-----格式字符、整型、字符型、浮点型

    1.格式字符​ 格式字符是由"%"和字符组成,其作用是将输出的数据转化为指定的格式输出. 格式字符表如下: %d/%i 有符号的十进制整数,i 是老式写法 %u 无符号十进制整数 ...

  9. C语言521短整型输出,printf 格式输出

    #include /************************************************************************/ // //作者:flyingle ...

最新文章

  1. msvcrt.lib和LIBCD.lib链接冲突
  2. 表格(table、tr、th、td、colspan、rowspan)
  3. C# 算法系列一基本数据结构
  4. 究竟使用什么样的万向轮?
  5. 程序员怎样成为一名架构师?
  6. 学计算机土味情话,计算机土味情话
  7. sublime text3 插件安装
  8. sap产品图谱 - road to sap.pdf_蛇胆陈皮胶囊化学成分及指纹图谱研究
  9. 一、计算二进制中1的个数
  10. Gstreamer之gst_omx_video_enc_set_format(二十七)
  11. 汉字区位码查询与算法
  12. 蔽月山房---作者,王阳明
  13. Python3 XML 解析
  14. win10禁用全角_win10输入法全角半角怎么切换 快捷键使用教程
  15. STM32f407程序移植到GD32F407
  16. 软考-系统架构设计师(软件架构风格)
  17. Windows编程(2)
  18. dij最短路+堆优化
  19. Vitalik万字长文:困扰加密货币的硬核难题五年后都怎么样了?
  20. 电子商务 实训三:电子商店策划实训

热门文章

  1. 开源应用架构之​Selenium WebDriver(中)
  2. R语言分析蛋白质组学数据:飞行时间质谱(MALDI-TOF)法、峰值检测、多光谱比较...
  3. 毕业后想当程序员,到底要不要考研?
  4. 全国职业院校技能大赛网络建设与运维赛项赛题(六)
  5. 通过Fiddler模拟器抓包微信小程序(适用APP)
  6. C++使用hash_map时警告
  7. 打造千万级流量系统——秒杀系统(需求篇)
  8. spring cloud gateway routes加载顺序的研究
  9. 涨姿势:10 大主宰世界的牛逼算法!
  10. 面试不谈钱,难道要我跟你谈恋爱?扯淡!