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就是这些了,这里由于我的水平有限,那个浮点数的四舍五入还没想明白,以后想明白了再来改正!还望见谅!
C语言中格式化输出的转换说明的fldwidth和precision解析的更多相关文章
- c语言中格式化输出函数的研究
<一>; 1.前言 在gcc编程中,我们比较经常用到的字符格式化输出函数是printf的,实际上gcc继承了c语言处理字符具有强大功能的风格,它提供了一系列的格式化输出函数,主要存在两个库 ...
- Date类常用方法总结(构造|格式化输出|String转换|Long转换|计算间隔|比较)
java.util.Date类 它重写了toString方法,new一个Date类直接输出是按照这样的格式 // "EEE MMM dd HH:mm:ss zzz yyyy"Fri ...
- C语言 printf格式化输出,参数详解
有关输出对齐 int main(int argc, char* argv[]){ char insertTime[20] = {"1234567890"}; double in ...
- C语言字符串格式化输出
%ms:将字符串全部输出,如果字符串长度小于m,在左边用空格将输出宽度补齐为m: %.ns:如果n大于字符串长度,将字符串全部输出,否则,输出前n个字符: %m.ns:如果n不大于m,输出指定字符串的 ...
- C语言printf格式化输出修饰符详解
转换说明 输出 %a,%A 浮点数.十六进制数和p-计数法(C99) %c 一个字符 %d 有符号十进制数 %e,%E 浮点数,e计数法 %f 浮点数,十进制计数法 %g,%G 根据数值不同自动选择% ...
- C语言中如何输出汉字;如何用C语言汉字编码输出汉字(超全版)
目录 前景提要 方式一: 方式二: 1. 数组方式打印 2. 指针方式打印 3. 优化为while方式 方式三: 1. 使用结构体内数组方式 2. 使用结构体内数组指针方式 (1) 基础写法 (2) ...
- 【转】C# String.Format数字格式化输出各种转换{0:N2} {0:D2} {0:C2}...
; //格式为sring输出 // Label1.Text = string.Format("asdfadsf{0}adsfasdf",a); // Label2.Text = & ...
- c语言 printf格式化输出
#include <iostream> #include<stdio.h> #include <cstring> using namespace std; int ...
- OC中格式化输出符号
定义 说明 %@ Objective-C object, printed as the string returned by descriptionWithLocale: if available, ...
随机推荐
- ios开发——实用技术篇&Pist转模型详细介绍
Pist转模型详细介绍 关于Plist转模型在iOS开发中是非常常见的,每开一一个项目或者实现一个功能都要用到它,所以今天就给大家讲讲Plist怎么转成模型数据, 前提:必须有一个Plist文件或者通 ...
- C++:构造函数和析构函数能否为虚函数
原文:http://blog.csdn.net/xhz1234/article/details/6510568 C++:构造函数和析构函数能否为虚函数? 简单回答是:构造函数不能为虚函数,而析构函数可 ...
- query插件之ajaxForm ajaxSubmit的理解用法
如今ajax满天飞,作为重点的form自然也受到照顾. 其实,我们在平常使用Jquery异步提交表单,一般是在submit()中,使用$.ajax进行.比如: $(function(){ $('# ...
- Android(java)学习笔记116:PC_Phone通信程序报错
1.首先我写的程序代码如下: package com.himi.udpsend; import java.net.DatagramPacket; import java.net.DatagramSoc ...
- web2.0、互联网+、IT时代与DT时代、工业4.0 引发的思考
最近忙着找实习,来学校一个星期还没到,就感觉已经经历了几个春秋. 第一个实习面试是个杭州互联网小公司,面WEB前端开发实习,怪我一个暑假两个月一点书都没碰,偏偏赶上G20到9/9才开学,没啥准备就一头 ...
- js工作中编程习惯
在前端编程中总结的习惯不管js还是css 还是后端开发这几点都是必须要做到的做好这几点不管去什么公司都是受到别人的尊重 善用变量,尤其是对DOM结构中的ID以及CLASS 多写注释,自己不熟,前面写后 ...
- AT-PagerAdapter
关于PagerAdapter的粗略翻译 英文版api地址:PagerAdapter(自备梯子) PagerAdapter 已知直接子类:FragmentPagerAdapter.Fra ...
- 使用jquery实现局部刷新DIV
实现页面的定时刷新功能:jquery使用的是jquery-1.8.3.min.js1:定时刷新 A界面的一段代码如下:<script type="text/javascript&quo ...
- warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
bug来源: 一直在看sift然后就手贱的给 opencv源码做注释,如果在vs里面打开会一直相安无事,但是问题出在我用了notepad++. 这样就报了标题的错误. 因为notepad++会以uni ...
- Linux上安装MPEG-1 Layer3(mp3)解码器
今天突然想要在linux上播放音乐,但是打开之后发现缺少了解码器 于是去网上找了解决的方法,说得天花乱坠,不过有个帖子给出了很简单的方法. 以下内容转载于网络 上面提示没有安装解码器,这是因为版权问题 ...