一、以操纵子方式格式化

数据输入输出的格式控制使用系统头文件<iomanip>中提供的操纵符。把它们作为插入操作符<<的输出对象即可。如setiosflags、setw、setfill、setprecision、hex、oct等。

(一)、常用的流操纵算子:

(二)、ios类的枚举常量

 C++ Code 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

 
#include <iostream>


#include <iomanip>

using 
namespace std;

// 通过操纵子方式进行格式化输出
// 宽度控制
// 对齐控制
// 填充控制
// 精度控制
// 进制输出

int main(
void)

{

    
//system("chcp 936");
    
int n = 
;

    
double d = 
.
;

    
double d2 = 
.
;

cout << 
"=================宽度控制=====================" << endl;

    cout << n << 
'#' << endl;

    cout << setw(
) << n << 
'#' << n << endl;      
// 宽度控制不会影响下一个输出

cout << 
"=================对齐控制=====================" << endl;

    cout << setw(
) << setiosflags(ios::left) << n << 
'#' << endl;

    cout << setw(
) << n << 
'#' << endl;           
// 对齐控制会影响下一个输出
    
//cout<<setw(10)<<setiosflags(ios::right)<<n<<'#'<<endl;
    cout << setw(
) << resetiosflags(ios::left) << n << 
'#' << endl; 
//去除左对齐

cout << 
"=================填充控制=====================" << endl;

    cout << setw(
) << setfill(
'?') << n << 
'#' << endl;

    cout << setw(
) << n << 
'#' << endl;           
// 填充控制会影响下一个输出
    cout << setw(
) << setfill(
' ') << n << 
'#' << endl;

cout << 
"=================精度控制=====================" << endl;

    cout << setprecision(
) << d << endl; 
//有效数字
    cout << setprecision(
) << d2 << endl;

cout << setiosflags(ios::fixed);

    cout << setprecision(
) << d << endl; 
// 小数点后面位数
    cout << setprecision(
) << d2 << endl;

cout << 
"=================进制输出=====================" << endl;

cout << n << endl;

    cout << oct << n << endl;

    cout << hex << n << endl;

    cout << endl;

cout << setiosflags(ios::showbase); 
//八进制加前缀0,十六进制加前缀0x
    cout << dec << n << endl;

    cout << oct << n << endl;

    cout << hex << n << endl;

cout << endl;

    cout << setbase(
) << n << endl; 
//八进制加前缀0,十六进制加前缀0x
    cout << setbase(
) << n << endl;

    cout << setbase(
) << n << endl;

return 
;

}

二、以类成员函数方式格式化

通过调用流的成员函数控制格式,如setf、unsetf、width、fill、precision等。优点是在设置格式同时,可以返回以前的设置,便于恢复原来的设置。

ios类提供成员函数对流的状态进行检测和进行输入输出格式控制等操作:

 C++ Code 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

 
#include <iostream>


//#include <iomanip>

using 
namespace std;

// 通过成员函数方式进行格式化输出
// 宽度控制
// 对齐控制
// 填充控制
// 精度控制
// 进制输出

int main(
void)

{

    
//system("chcp 936");
    
int n = 
;

    
double d = 
.
;

    
double d2 = 
.
;

cout << 
"=================宽度控制=====================" << endl;

    cout << n << 
'#' << endl;

    cout.width(
);

    cout << n << 
'#' << n << endl;                  
// 宽度控制不会影响下一个输出

cout << 
"=================对齐控制=====================" << endl;

    cout.width(
);

    cout.setf(ios::left);

    cout << n << 
'#' << endl;

    cout.width(
);

    cout << n << 
'#' << endl;               
// 对齐控制会影响下一个输出
    
//cout.width(10);
    
//cout.setf(ios::right);
    
//cout<<n<<'#'<<endl;

cout.width(
);

    cout.unsetf(ios::left);

    cout << n << 
'#' << endl;

cout << 
"=================填充控制=====================" << endl;

    cout.width(
);

    cout.fill(
'?');

    cout << n << 
'#' << endl;

cout.width(
);

    cout << n << 
'#' << endl;               
// 填充控制会影响下一个输出

cout.width(
);

    cout.fill(
' ');

    cout << n << 
'#' << endl;

cout << 
"=================精度控制=====================" << endl;

    cout.precision(
);

    cout << d << endl;

    cout.precision(
);

    cout << d2 << endl;

cout.setf(ios::fixed);

    cout.precision(
);

    cout << d << endl;

    cout.precision(
);

    cout << d2 << endl;;

cout << 
"=================进制输出=====================" << endl;

cout.setf(ios::showbase);

    cout << n << endl;

    cout.unsetf(ios::dec);

    cout.setf(ios::oct);

    cout << n << endl;

cout.unsetf(ios::oct);

    cout.setf(ios::hex);

    cout << n << endl;

return 
;

}

参考:

C++ primer 第四版
Effective C++ 3rd
C++编程规范

从零开始学C++之IO流类库(四):输出流格式化(以操纵子方式格式化 以ios类成员函数方式格式化)的更多相关文章

  1. 从零开始学C++之IO流类库(三):文件的读写、二进制文件的读写、文件随机读写

    一.文件的读写 如前面所提,流的读写主要有<<, >>, get, put, read, write 等操作,ofstream 继承自ostream, ifstream 继承自 ...

  2. 从零开始学C++之IO流类库(二):文件流(fstream, ifstream, ofstream)的打开关闭、流状态

    一.文件流 ofstream,由ostream派生而来,用于写文件 ifstream,由istream派生而来, 用于读文件 fstream,由iostream派生而来,用于读写文件 二.打开文件 说 ...

  3. 代码实现:当我们下载一个试用版软件,没有购买正版的时候,每执行一次就会提醒我们还有多少次使用机会用学过的IO流知识,模拟试用版软件,试用10次机会,执行一次就提示一次您还有几次机会,如果次数到了提示请购买正版

    package com.loaderman.test; import java.io.BufferedReader; import java.io.FileReader; import java.io ...

  4. Java自学第10期——File类与IO流(输入输出流、处理流、转换流、缓冲流、Properties集合、打印流)

    1.IO简介 IO(输入输出)通过java.io包下的类和接口来支持,包下包括输入.输出两种IO流,每种输入输出流又可分为字符流和字节流两大类. 2.File类 File类是io包下与平台无关的文件和 ...

  5. 从零开始学 Web 之 Vue.js(四)Vue的Ajax请求和跨域

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  6. Java中的IO流(四)

    上一篇<Java中的IO流(三)>把IO流中的文件及目录操作的对象File类记录了一下,本篇把本不属性IO流但又和IO流有关系的一个对象作一下记录,此对象本属于集合框架里的一个子集,即Pr ...

  7. 【重学Java】IO流

    IO流的UML类图 File类 File类概述和构造方法[应用] File类介绍 它是文件和目录路径名的抽象表示 文件和目录是可以通过File封装成对象的 对于File而言,其封装的并不是一个真正存在 ...

  8. java基础(二十一)IO流(四)

    这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...

  9. 从零开始学 Web 之 移动Web(四)实现JD分类页面

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

随机推荐

  1. iOS:ABPeoplePickerNavigationController系统通讯录使用

    昨天因项目需求要访问系统通讯录获取电话号码,于是乎从一无所知,开始倒腾,倒腾了一下午,总算了弄好了.写这边博客是为了记录一下,自己下一次弄的时候就别在出错了.同时,有和我一样的菜鸟能够避免走一下弯路. ...

  2. Winform获取当前程序名称或路径

    以下几种方法获取当前程序名称或路径: // 获取程序的基目录. System.AppDomain.CurrentDomain.BaseDirectory // 获取模块的完整路径.      // 获 ...

  3. XML读写文件辅助类

    /// <summary> /// 历史下载记录xml文件操作 /// </summary> public class XMLHelper { private string x ...

  4. eclipse集成jetty开发web项目(不采用maven方式)

    以前开发过程部署项目都是采用tomcat,偶然发现jetty,所以试了下,挺方便的,直切主题. 1.下载jetty,楼主使用的jetty8,地址http://download.eclipse.org/ ...

  5. 整理一些常用函数库PHP版本

    function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) { if(function_ex ...

  6. HDU 1568 Fibonacci

    题解:首先,对于小于10000的斐波那契数,我们直接计算,当大于10000时,用公式,由于只要输出前四位,所以不用考虑浮点数的问题,算出其取log的结果: tmp=(log(sq5/5)+n*log( ...

  7. Libev学习笔记1

    和Libevent相似,Libev是一个高性事件驱动框架,据说性能比Libevent要高,bug比Libevent要少.Libev只是一个事件驱动框架,不是网络库,因为它的内部并没有任何socket编 ...

  8. WeasyPrint - Converts HTML + CSS to PDF - WeasyPrint converts HTML/CSS documents to PDF

    WeasyPrint - Converts HTML + CSS to PDF - WeasyPrint converts HTML/CSS documents to PDF WeasyPrint c ...

  9. windows XP 安装pip

    1.首先安装Python 2.添加环境变量 我的是 path = C:\Python27 3.下载setuptools 这里可参考这篇博文,附带资源的:http://blog.csdn.net/sud ...

  10. Android学习笔记(十五)——碎片的生命周期(附源代码)

    碎片的生命周期 点击下载源代码 与活动类似.碎片具有自己的生命周期.理解了碎片的生命周期后.我们能够在碎片被销毁时正确地保存事实上例,在碎片被重建时将其还原到前一个状态. 1.使用上一篇的项目Frag ...