首先说什么是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. iOS viewDidUnload方法

    转自:http://blog.csdn.net/chun799/article/details/8951694 在iOS6中,viewDidUnload回调方法被Deprecated掉了.查看苹果的文 ...

  2. 小白日记12:kali渗透测试之服务扫描(二)-SMB扫描

    SMB扫描 Server Message Block 协议.与其他标准的TCP/IP协议不同,SMB协议是一种复杂的协议,因为随着Windows计算机的开发,越来越多的功能被加入到协议中去了,很难区分 ...

  3. DataBase 之 实用积累

    (1)分页:(性能效果最好的是top/max 和Row_number()两种方法) [1]写法1,not in/top select top pagesize * from pagetest wher ...

  4. JavaFX(三)窗口拖动

    1.问题场景 在上一篇中,我们将窗口的默认标题栏隐藏从而导致鼠标点击窗体无法进行拖动. 2.解决思路 给组件添加鼠标按下事件监听器和鼠标拖动事件监听器. 3.代码实现 代码片段: private do ...

  5. C中的回调函数

    C语言中应用回调函数的地方非常多,如Nginx中: struct ngx_command_s { ngx_str_t name; ngx_uint_t type; char *(*set)(ngx_c ...

  6. linux开机启动配置

    vim /etc/rc.d/rc.local 把命令写在这里

  7. Scala中的类和对象

    类的定义 使用class定义 类的字段 在类中使用var,val定义字段 类的方法 scala中,使用var定义字段默认提供setter和getter方法对应名称为 value_= 和value /* ...

  8. Maven中settings.xml的配置项说明

    本文部分引用自:http://haohaoxuexi.iteye.com/blog/1827778 在Maven中提供了一个settings.xml文件来定义Maven的全局环境信息.这个文件会存在于 ...

  9. 关于JDK中的集合总结(二)

    1.2版本的JDK才出现的java集合框架. 下面介绍说一下Vector的一些特点. import java.util.Enumeration; import java.util.Iterator; ...

  10. SQL<>0查询不到NUll的值

    这几天遇到这样一个问题,sql中写<>0,刚好某个记录是NULL,道理上是满足<>0的啊,可是就是抽不出来,关于这个问题,到处找了点资料,算是这里 写一个总结出来. 用java ...