首先说什么是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就是这些了,这里由于我的水平有限,那个浮点数的四舍五入还没想明白,以后想明白了再来改正!还望见谅!

C语言中格式化输出的转换说明的fldwidth和precision解析的更多相关文章

  1. c语言中格式化输出函数的研究

    <一>; 1.前言 在gcc编程中,我们比较经常用到的字符格式化输出函数是printf的,实际上gcc继承了c语言处理字符具有强大功能的风格,它提供了一系列的格式化输出函数,主要存在两个库 ...

  2. Date类常用方法总结(构造|格式化输出|String转换|Long转换|计算间隔|比较)

    java.util.Date类 它重写了toString方法,new一个Date类直接输出是按照这样的格式 // "EEE MMM dd HH:mm:ss zzz yyyy"Fri ...

  3. C语言 printf格式化输出,参数详解

      有关输出对齐 int main(int argc, char* argv[]){ char insertTime[20] = {"1234567890"}; double in ...

  4. C语言字符串格式化输出

    %ms:将字符串全部输出,如果字符串长度小于m,在左边用空格将输出宽度补齐为m: %.ns:如果n大于字符串长度,将字符串全部输出,否则,输出前n个字符: %m.ns:如果n不大于m,输出指定字符串的 ...

  5. C语言printf格式化输出修饰符详解

    转换说明 输出 %a,%A 浮点数.十六进制数和p-计数法(C99) %c 一个字符 %d 有符号十进制数 %e,%E 浮点数,e计数法 %f 浮点数,十进制计数法 %g,%G 根据数值不同自动选择% ...

  6. C语言中如何输出汉字;如何用C语言汉字编码输出汉字(超全版)

    目录 前景提要 方式一: 方式二: 1. 数组方式打印 2. 指针方式打印 3. 优化为while方式 方式三: 1. 使用结构体内数组方式 2. 使用结构体内数组指针方式 (1) 基础写法 (2) ...

  7. 【转】C# String.Format数字格式化输出各种转换{0:N2} {0:D2} {0:C2}...

    ; //格式为sring输出 // Label1.Text = string.Format("asdfadsf{0}adsfasdf",a); // Label2.Text = & ...

  8. c语言 printf格式化输出

    #include <iostream> #include<stdio.h> #include <cstring> using namespace std; int ...

  9. OC中格式化输出符号

    定义 说明 %@ Objective-C object, printed as the string returned by descriptionWithLocale: if available, ...

随机推荐

  1. 用perl对字符串进行全角转半角操作

    #全角转半角 #ljl use Encode; sub CheckSBC { my ($name)=@_; my @character; my $tmpname=$name; my $headname ...

  2. ireport启动闪退问题

    安装好ireport之后,双击ireport.exe启动程序只是掠过启动画面便毫无反应, 后来在网上找了下解决方法,才知道只因为ireport与jdk8不兼容, 于是下载了jdk6,并在ireport ...

  3. sqlserver 日期相关2

    1.常用日期方法(下面的GetDate() = '2006-11-08 13:37:56.233') (1)DATENAME ( datepart ,date ) 返回表示指定日期的指定日期部分的字符 ...

  4. 利用 Composer 完善自己的 PHP 框架(二)——发送邮件

    本教程示例代码见 https://github.com/johnlui/My-First-Framework-based-on-Composer 回顾 上一篇文章中,我们手工建造了一个简易的视图加载器 ...

  5. python 学习笔记re

    在学习python的过程中很多时候都需要用到re(正则),因为我也不是开发所以呢只是简单说一下经常需要用到的东西. 在工作中经常用到的主要是三个函数:1.math   2.search   3.sub ...

  6. 琐碎-同步centos集群的时间

    想马上上手HBase,其对集群时间同步要求很高,当然,hadoop也是

  7. HTTP,TCP/IP,Socket

    HTTP:超文本传输协议,首先它是一个协议,并且是基于TCP/IP协议基础之上的应用层协议. TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,HTTP是应用层协议,主要解决如何包装数据. ...

  8. 几个常用myeclipse快捷键

    Ctrl + D:直接删除光标所在行 Alt + ↑:向上移动光标所在行 Alt + ↓:向下移动光标所在行 Ctrl + Alt + ↑:直接向上复制光标所在行内容 Ctrl + Alt + ↓:直 ...

  9. argparse - 命令行选项与参数解析(转)

    argparse - 命令行选项与参数解析(译)Mar 30, 2013 原文:argparse – Command line option and argument parsing 译者:young ...

  10. Xcode 只有iOS device一个选项的解决办法

    下载了一个demo准备研究发现只有iOS device,没有其他的机型可选,解决方法比较简单,调下iOS SDK就行了