似乎很少有人强调C++的格式化输出的问题,那是因为因为c++的编译器默默地做着许多格式化的动作,以保证C++ Style格式化输出与C-style的格式化的一个根本不同,C++style的格式化输出是类型安全的(type-safe),而C-style不是。当然,我们也可以定制这些格式化的动作,就像C那样,而不全都拜托编译器。


准备

  • 头文件

    包含iomanip头文件,iomanip顾名思义,io manipulator(操纵器)。本文所用库函数或者变量,只有std::boolalphaiostream头文件中以外,其他都在iomanip

  • 每使用iomanip头文件的std命名空间中的函数对输出的格式做任何形式的设置,影响的都是其后的输出格式,而对之前的输出毫无影响。

零、 输出布尔类型

bool b = bool();            // 显式地调用其构造函数实现对基本类型的初始化
std::cout << std::boolalpha << b << std::endl;      // 输出为'false',而不是将bool类型转化为‘0’

一、 域宽的设置

setw(n)

#include <iostream>
#include <iomanip>int main(int, char**)
{const int max = 10;const int width = 6;for (int row = 1; row < max; ++row){for (int col = 1; col < max; ++col){std::cout << std::setw(width) << row * col;}std::cout << std::endl;}return 0;
}

如上图的输出显示,setw()默认是右对齐。

二、 对齐方式的设置

共有两种对齐方式的设置:std::ios::left, std::ios::right,所用到的api是std::setiosflags,以及std::resetiosflags

for (int row = 1; row < max; ++row)
{if (row%2)      // 奇数行std::cout << std::setiosflags(std::ios::left);  // 设置对齐方式为左对齐elsestd::cout << std::resetiosflags(std::ios::left);    for(int col = 1; col < max; ++col){std::cout << row * col;     }std::cout << std::endl;
}

三、 精度的控制

std::setprecision(n)

double x = 800000./81;
std::cout << std::setprecision(2) << x << endl;     // 9.9e+003
std::cout << std::setiosflags(std::ios::fixed) << std::setprecision(2) << x << std::endl;              // 9876.54// std::setiosflags(std::ios::fixed)// 避免使用科学计数法?

使用setprecision()设置的精度位数,最后的输出结果是一种四舍五入的版本;

std::cout << std::setiosflags(std::ios::fixed) << std::setprecision(4) << 2./3 << std::endl;   // 0.6667

不使用 <iomanip>头文件中的相关 api,使用 std::cout 输出流的成员函数也可实现精度的设置:

std::cout.precision(20);

四、 设置填充字符

std::setfill('')

void showDate(int m, int d, int y)      // 月 日 年
{std::cout << std::setfill('0'); std::cout << std::setw(2) << m << '/'<< std::setw(2) << d << '/'<< std::setw(4) << y << std::endl;
}

五、 10进制、8进制、16进制

std::hexstd::oct

unsigned long x = 64206;
std::cout << x<< " in base 8 is \"" << std::oct << x << "\""<< " in base 16 is \"" << std::hex << x << "\"" << std::endl;

C++库函数并没有提供一个任意进制的转换,如下是一个转换版本:

std::string convBase(unsigned long val, long base)
{std::string digits = "0123456789ABCDEF";std::string ret;if (base < 2 || base > 16)ret = "base out of range";else{do{ret = digits[val%base] + ret;       // != (ret != digits[val%base]), 否则顺序将会是逆序ret /= base;}while(val);}return ret;
}

六、补充

禁止科学计数法

std::cout << std::fixed << someNumber<< std::endl;

references

  1. <Output Formatting>

C++基础——格式化输出相关推荐

  1. python基础--格式化输出

    http://www.cnblogs.com/alex3714 #-*-coding:utf-8 -*- 字符编码声明''' 河南大学物理与电子学院''' -----注释 三个三引号或者双引号 也可以 ...

  2. C ++基础 | 格式化输出,文件输入输出(File IO),头文件(Header Files)_3

    目录 格式化输出 文件输入输出(File IO) 头文件(Header Files) 格式化输出 要格式化数据,我们可以使用转义字符串(Escape Sequence)也称字符实体(Character ...

  3. python格式化输出二进制即对应的unicode字符_Python基础—格式化输出(%用法和format用法)...

    %用法 1.整数的输出 %o -- oct 八进制 %d -- dec 十进制 %x -- hex 十六进制 1 >>> print('%o' % 20) 2 24 3 >&g ...

  4. Python基础——格式化输出

    1.普通打印输出 name = 'xiaoming' age = 18 height = 180.0 print(name,age,height)#输出结果: #xiaoming,18,180 2.格 ...

  5. python基础_格式化输出(%用法和format用法)(转载)

    python基础_格式化输出(%用法和format用法) 目录 %用法 format用法 %用法 1.整数的输出 %o -- oct 八进制 %d -- dec 十进制 %x -- hex 十六进制 ...

  6. python基础语法手册format-Python基础语法-格式化输出

    Python基础语法 python格式化输出 python在格式化输出过程中,就我个人学习历程来看,有两种格式化输出方法. 第一种是利用 % s %d 进行占位输出,效果就是这样的: info='li ...

  7. python基础_格式化输出(%用法和format用法)

    %用法 1.整数的输出 %o -- oct 八进制 %d -- dec 十进制 %x -- hex 十六进制 >>> print('%o' % 20) 24 >>> ...

  8. Fortran基础编程(3)——格式化输出

    Fortran基础编程(3)--格式化输出 本篇推文将进一步讲解Fortran基础语法中格式化输出与声明部分,让我们的代码更加美观起来吧~ 概论 program maininteger aa =100 ...

  9. 【Python学习笔记】第一章基础知识:格式化输出,转义字符,变量类型转换,算术运算符,运算符优先级和赋值运算符,逻辑运算符,世界杯案例题目,条件判断if语句,猜拳游戏与三目运算符

    Python学习笔记之[第一章]基础知识 前言: 一.格式化输出 1.基本格式: 2.练习代码: 二.转义字符 1.基本格式: 2.练习代码: 3.输出结果: 三.输入 1.基本格式: 2.练习代码: ...

最新文章

  1. Battle for Wesnoth 1.8.4,开源战斗游戏
  2. JSON.parse()与JSON.stringify()的区别
  3. innodb_monitor
  4. JavaScript学习杂记--对象和数组
  5. 为什么子孙后代会讨厌使用java.util.Stack
  6. 【答辩问题】计算机专业本科毕业设计答辩的一般程序2
  7. cesium加载 gltf模型
  8. VueCli4学习笔记
  9. 小学计算机使用和运行记录表,20XX年小学微机室的各种管理制度和常用表格.doc...
  10. 君望永远--纠缠在爱情的起点上 (转载)
  11. 06 暗语转换+ 人民币和卢布币值兑换+星座判断应用
  12. 从生活角度学习c++
  13. Ubuntu16.04安装文本标注工具brat
  14. 笔记33 笨办法学python练习40之二:类和对象
  15. 【Linux服务器运行jar包】
  16. linux_SIGCHLD信号-子进程回收
  17. 微信小程序聊天功能PHP,微信小程序实现聊天室
  18. 【添坑】高博ORB_SLAM
  19. 路由器连接校园网并发WIFI:WR703N路由器安装OpenWRT并运行H3C客户端操作步骤(主要针对中山大学东校区)
  20. 【操作系统】虚拟内存

热门文章

  1. 详解:hiveserver2的使用与介绍
  2. Spark利用(idea+maven+scala)创建wordcount打包jar并在spark on yarn上运行——Spark的开发
  3. nginx-2.nginx是什么
  4. 判断字符串中是否存在的几种方案:string.indexof、string.contains、list.contains、list.any几种方式效率对比...
  5. 区分PC端与移动端代码,涵盖C#、JS、JQuery、webconfig
  6. Opencv step by step - 图像变换
  7. 让你提前认识软件开发(28):数据库存储过程中的重要表信息的保存及相关建议...
  8. XML 数据挖掘 之 挖掘 XML 关联规则
  9. Bailian4019 黑色星期五【模拟】
  10. 小乐乐与二段数(2019哈理工新生赛第20题)