/*

设置输出字符的宽度
width(int)是iostream类的成员函数,可以通过cout对象来调用,即cout.width(int)
注:

1.width(int)只影响将要显示的一个对象,之后字段宽度会自动恢复为默认值
2.如果设定的字段宽度小于要输出的字符的宽度,则字符全部输出
3.如果设定的字段宽度大于要输出的字符的宽度,则字符右对齐输出,多余部分用空格填充

设置填充字段
cout.fill(char)可以设置填充字段
注:fill(char)会一直生效,直至重新设置

设置浮点数的显示精度
cout.precision(int)可以设置浮点数的显示精度(不包括小数点)
注:

1.如果设置的精度大于浮点数的位数,如果浮点数能根据IEEE754精确表示,则补零;如果浮点数不能精确表示,则尽量接近
2.如果设置的精度小于浮点数的位数,采用科学计数法表示

3.precision(int)单独使用,表示设置有效位数;与fixed或者scientific连用,表示设置小数位的精度
4.precision(int)会一直生效

setf()函数

setf()函数原型如下:
fmtflags setf(fmtflags)
fmtflags setf(fmtflags,fmtflags)
先看第一个原型。
其中fmtflags是一种标志类型,或者说标志位。
ios_base类的保护数据成员是一个15位的二进制数字,或者说是15个标志位,这15个标志位与ios类的15个枚举型常量一一对应,对应关系如下:
boolalpha    fixed    scientific    hex    oct    dec    internal    right    left    showpos    showpoint    showbase
0         0      0        0     0     1        0         0      0     0            0         0 
uppercase   unitbuf   skipws
0         0      1
即ios类的15个枚举型常量与ios_base类的15位二进制数字000 0010 0000 0001一一对应。另外,可以看到,二进制数字的15位除了skipws和dec对应的位数默认为1之外,其他均默认为0 (注:上表是VC++的对应关系)
15个标志的含义如下所示:
ios::boolalpha    bool型数值的输入和输出使用文本形式(即true或false)
ios::fixed        定点格式输出,即以小数点的形式表示浮点数
ios::scientific      用科学记数法表示浮点数
ios::hex          采用十六进制
ios::oct          采用八进制
ios::dec         采用十进制
ios::internal        输出格式为居中对齐
ios::right             输出格式为右对齐
ios::left          输出格式为左对齐
ios::showpos        在正数前面加上+号
ios::showpoint     显示末尾的0和小数点
ios::showbase      显示进制,即在十六进制数前添加0x,在八进制数前添加0
ios::uppercase     大写显示
ios::unitbuf     每次执行输出操作后均会清空缓冲区
ios::skipws      忽略输入流中的空白字符,即当我们输入的字符前面有空格时,存储的时候会自动忽略
注:
1.设置多个标志位用"|"隔开
2.默认对齐方式为右对齐
3.setf(ios::showpoint)与precision连用时,会输出小数点(单独的precision不会输出小数点)
4.ios::internal输出格式为居中对齐,其中符号左对齐,值右对齐;如果是十六进制,则前缀0x左对齐
5.ios::uppercase只对十六进制起作用,即将0x变为0X
6.ios::fixed或ios::scientific与ios::presicion连用表示的是小数位数,而不是有效位数
7.以上15个枚举型常量称之为标准控制符

下面看setf()的第二种原型,即:
fmtflags setf(fmtflags,fmtflags)
其中第一个参数是要开启的标志位,第二个参数是要清除的标志位,标志位的清除通过指示标志位来实现
指示标志位共有三个,如下:
ios::basefield 指示相关标志位:dec、oct、hex
ios::adjustfield 指示相关标志位:left、right、internal
ios::floatfield 指示相关标志位:fixed、scientific
其实现原理是15个标志位中只有要清除的标志位为1,其余位为0,然后取反后与15个标志位进行与操作
另外,指示标志位也是ios类从ios_base类中继承而来,因此ios::adjustfield等效于ios_base::adjustfield
注:清除多个标志位用"|"隔开

清除标志位
unsetf()函数可以实现标志位的清除

注:unsetf()实现原理同指示标志位是一样的,都是15个标志位中只有要清除的标志位为1,其余位为0,然后取反后与15个标志位进行与操作

*/

#include <iostream>
using namespace std;
int main()
{
const float number=-185.12f;
cout.width();
cout.setf(ios::left);
cout<<number<<endl;   //-185.12
cout.width();
cout.setf(ios::right,ios::adjustfield);
cout<<number<<endl;   // -185.12
cout.width();
cout.setf(ios::internal,ios::adjustfield);
cout<<number<<endl;   //- 185.12
return ;
}

格式化输出[part1/标准控制符]的更多相关文章

  1. 【Shell脚本学习15】shell printf命令:格式化输出语句

    printf 命令用于格式化输出, 是echo命令的增强版.它是C语言printf()库函数的一个有限的变形,并且在语法上有些不同. 注意:printf 由 POSIX 标准所定义,移植性要比 ech ...

  2. shell printf格式化输出语句

    printf 命令用于格式化输出, 是echo命令的增强版.它是C语言printf()库函数的一个有限的变形,并且在语法上有些不同. 注意:printf 由 POSIX 标准所定义,移植性要比 ech ...

  3. 格式化输出io:format的奇技淫巧

    格式化输出io:format是我接触Erlang使用的第一个库函数(io:format("Hello World")),随着学习的深入,它也是我debug优先选择最简单直接的工具. ...

  4. shell printf命令:怎样格式化输出语句

    printf 命令用于格式化输出, 是echo命令的增强版.它是C语言printf()库函数的一个有限的变形,并且在语法上有些不同. 注意:printf 由 POSIX 标准所定义,移植性要比 ech ...

  5. shell printf命令:格式化输出语句

    printf 命令用于格式化输出, 是echo命令的增强版.它是C语言printf()库函数的一个有限的变形,并且在语法上有些不同. 注意:printf 由 POSIX 标准所定义,移植性要比 ech ...

  6. 8.Java格式化输出

    JAVA中字符串输出格式 1.使用format函数 System.out.format("%d  %f",10,10.5); 2.使用Formatter类 构造函数Formatte ...

  7. 【Python④】python恼人的字符串,格式化输出

    恼人的字符串 计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.由于计算机是美国人发明的,因此,最早只有127个字母被编码到计算机里,也就是大小写英文字母.数字和一些符号,这个编码 ...

  8. (Python )格式化输出、文件操作、json

    本节学习Python的格式化输出,文件操作以及json的简单用法 1.格式化输出 将非字符串类型转换成字符串,可以使用函数:str() 或者repr() ,(这两个函数的区别目前我还没搞懂,求解答) ...

  9. 格式化输出[parts/iomanip]

    /* 用ios类中的成员函数来进行IO格式的控制总需要写一条单独的语句,而不能直接嵌入到IO语句中,显得很不方便,因此C++又提供了一种用操作符来控制IO的格式.操作符分为带参和不带参两种,带参的定义 ...

随机推荐

  1. Android IOS WebRTC 音视频开发总结(二七)-- whatsapp之转发优先

    最近看了一篇老外在webrtcHacks上写的文章,主要介绍webrtc和whatsapp的传输机制,蛮好的,加上自己的理解进行总结, 希望对大伙有所帮助,转载请说明出处,原文来自博客园RTC.Bla ...

  2. 误删ext3的恢复方法

    1.Ext3文件系统结构的简单介绍在Linux所 用的Ext3文件系统中,文件是以块为单位存储的,默认情况下每个块的大小是1K,不同的块以块号区分.每个文件还有一个节点,节点中包含有文件所有者, 读写 ...

  3. eclipse 导入jar包

    我们在用Eclipse开发程序的时候,经常想要用到第三方的jar包.这时候我们就需要在相应的工程下面导入这个jar包.以下配图说明导入jar包的步骤. 1.右击工程的根目录,点击Properties进 ...

  4. 十六、Struts2文件上传与下载

    文件上传与下载 1.文件上传前提:<form action="${pageContext.request.contextPath}/*" method="post& ...

  5. javaSE第二十三天

    第二十三天    338 1.进程和线程的概述    338 2.多线程(理解)    339 (1)多线程:一个应用程序有多条执行路径    339 (2)Java程序的运行原理及JVM的启动是多线 ...

  6. 【风马一族_php】NO0_搭建web服务器

    原文来自:http://www.cnblogs.com/sows/p/5977996.html  (博客园的)风马一族 侵犯版本,后果自负 安装apache apache是一种B/S结构的软件,apa ...

  7. objective-C基本知识

    预编译指令 1.自己写的头文件最好用双引号,而系统自带的可以用尖括号. ************************************************* 点语法 p.age= 10; ...

  8. c#中操作word文档-一、模板方式写入

    转载自:http://blog.csdn.net/fujie724/article/details/5443322 适合模板写入 今天正好有人问我,怎么生成一个报表式的Word文档. 就是文字的样式和 ...

  9. Vue.js常见问题

    1.Vuejs组件 vuejs构建组件使用 Vue.component('componentName',{ /*component*/ }): 这里注意一点,组件要先注册再使用,也就是说: Vue.c ...

  10. Apache中RewriteCond规则参数介绍

    Apache中 RewriteCond语句对于我来说一直是个难点,多次试图去把它搞明白,都没有结构,这次我终于算大概知道它的意思了.RewriteCond就像我们程序中的if语句一样,表示如果符合某个 ...