zoukankan      html  css  js  c++  java
  • C语言中格式化输出的转换说明的fldwidth和precision解析

      首先说什么是C语言的格式化输出,就是printf和它的几个变种(grep -E "v?(sn|s|f)printf")。像这些函数都有一个参数format,format中可以加点转换说明,让输出更加规整!而这个转换说明是由这几部分组成的:

      %[flags][fldwidth][precision][lenmodifier]convtype

      本文着重讲的是fldwidth和precision部分,其他部分可以参考《C Primer Plus》第五版4.4节!

      首先说那个fldwidth,这个全称叫做field width,域宽度,就是最终转换出来的字符的最小宽度。注意最小这个形容词,它的意思就是不够会补空格或者0,多了就多了,不截短!

      而那个precision代表的是精度,以一个小数点开始。关于它的作用,APUE(5.11节1部分)上是这么讲的,precision说明整型转换后最少输出的数字位数,浮点数转换后小数点后的最少位数,字符串转换后的最大字符数!关于浮点数的那个最小(我标记的蓝色部分)我感觉有点疑问,因为浮点数如果超出了那个值会被截短啊!

      OK,理论就是这些了,接下来我们煮个栗子!比如说下面这段代码:

      

      首先说那个浮点数的printf,小数点前那个数字是fldwidth,表示最终的整体宽度为11个字符的宽度。而那个3就是precision,表示浮点数小数点后保留3位,所以那个4就被四舍五入了!理论上应该输出5223.332的,可是这里输出了个5223.333,这里我还没想明白,哪位若是了解内情,还望不吝赐教!

      再来看那个整型数的printf,这里fldwidth还是11,所以最终整体宽度和上面那个相同,这里的precision变成了8,就是这个整型数至少要输出8位,可是不够咋办,那就在前面补零啊!所以我们看到的最终结果就是00030000了!

      最后来看那个字符串的printf,这里fldwidth和上面相同,那个precision是8,这里表示输出的字符串最长只能是8,可是我这个str很不争气,这里竟然超过了,没办法,只好截短喽!所以Hello,World!就变成了Hello,Wo了!

      OK,这就是关于格式转换说明的fldwidth和precision就是这些了,这里由于我的水平有限,那个浮点数的四舍五入还没想明白,以后想明白了再来改正!还望见谅!

  • 相关阅读:
    Kafka基本命令
    Vue右键菜单
    ES6
    display: table-cell;的妙用
    关于git的总结
    js 数组的增删改查
    es6 import export 引入导出变量方式
    关于electron的跨域问题,有本地的图片的地址,访问不了本地的图片
    input type= file 如何更改自定义的样式
    vue.js 常用语法总结(一)
  • 原文地址:https://www.cnblogs.com/bwangel23/p/4161126.html
Copyright © 2011-2022 走看看