首先说什么是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. oracle 直接客户端使用

    到oracle网站下载直接客户端,http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/winsoft.htm ...

  2. java_SSH整合1

    Domain: public class Department { private Long id; private Set<User> users = new HashSet<Us ...

  3. mmc线性0-1规划问题

    本题目来自物理学苑,原作者认为mmc不容易解决0-1规划. 5个人选4个,组队游泳接力比赛,最好成绩组队. 其实,mmc解决此类问题,还是很方便,轻松的. 下面是原题目的求解:

  4. Helpers\PHPMailer

    Helpers\PHPMailer PHPMailer is a third party class for sending emails, Full docs are available athtt ...

  5. python打印详细的异常信息

    #!/usr/bin/env python #coding=utf-8 import traceback try: 1/0 except Exception, e: print e print tra ...

  6. 泛型类型转为DataTable类型

    public static DataTable ConvertToDatatable<T>(IEnumerable<T> data) { PropertyDescriptorC ...

  7. jquery手写焦点轮播图-------解决最后一张无缝跳转第一张的问题

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. HDU 3335 Divisibility (DLX)

    Divisibility Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit ...

  9. [改善Java代码]若有必要,使用变长数组

    Java中的数组是定长的,一旦经过初始化声明就不可改变长度,这在实际使用的时候非常不方便.比如要对一个班级的学生信息进行统计,因为我们不知道班级会有多少个学生(随时可能有退学,入学,转学),所以需要一 ...

  10. [设计模式]<<设计模式之禅>>之关于单一职责原则

    单一职责原则的英文名称是Single Responsibility Principle,简称是SRP. 这个原则存在争议之处在哪里呢?就是对职责的定义,什么是类的职责,以及怎么划分类的职责.我们先举个 ...