C++基础——格式化输出
似乎很少有人强调C++的格式化输出的问题,那是因为因为c++的编译器默默地做着许多格式化的动作,以保证C++ Style格式化输出与C-style的格式化的一个根本不同,C++style的格式化输出是类型安全的(type-safe),而C-style不是。当然,我们也可以定制这些格式化的动作,就像C那样,而不全都拜托编译器。
准备
头文件
包含
iomanip
头文件,iomanip
顾名思义,io manipulator(操纵器)。本文所用库函数或者变量,只有std::boolalpha
在iostream
头文件中以外,其他都在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::hex
,std::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
- <Output Formatting>
C++基础——格式化输出相关推荐
- python基础--格式化输出
http://www.cnblogs.com/alex3714 #-*-coding:utf-8 -*- 字符编码声明''' 河南大学物理与电子学院''' -----注释 三个三引号或者双引号 也可以 ...
- C ++基础 | 格式化输出,文件输入输出(File IO),头文件(Header Files)_3
目录 格式化输出 文件输入输出(File IO) 头文件(Header Files) 格式化输出 要格式化数据,我们可以使用转义字符串(Escape Sequence)也称字符实体(Character ...
- python格式化输出二进制即对应的unicode字符_Python基础—格式化输出(%用法和format用法)...
%用法 1.整数的输出 %o -- oct 八进制 %d -- dec 十进制 %x -- hex 十六进制 1 >>> print('%o' % 20) 2 24 3 >&g ...
- Python基础——格式化输出
1.普通打印输出 name = 'xiaoming' age = 18 height = 180.0 print(name,age,height)#输出结果: #xiaoming,18,180 2.格 ...
- python基础_格式化输出(%用法和format用法)(转载)
python基础_格式化输出(%用法和format用法) 目录 %用法 format用法 %用法 1.整数的输出 %o -- oct 八进制 %d -- dec 十进制 %x -- hex 十六进制 ...
- python基础语法手册format-Python基础语法-格式化输出
Python基础语法 python格式化输出 python在格式化输出过程中,就我个人学习历程来看,有两种格式化输出方法. 第一种是利用 % s %d 进行占位输出,效果就是这样的: info='li ...
- python基础_格式化输出(%用法和format用法)
%用法 1.整数的输出 %o -- oct 八进制 %d -- dec 十进制 %x -- hex 十六进制 >>> print('%o' % 20) 24 >>> ...
- Fortran基础编程(3)——格式化输出
Fortran基础编程(3)--格式化输出 本篇推文将进一步讲解Fortran基础语法中格式化输出与声明部分,让我们的代码更加美观起来吧~ 概论 program maininteger aa =100 ...
- 【Python学习笔记】第一章基础知识:格式化输出,转义字符,变量类型转换,算术运算符,运算符优先级和赋值运算符,逻辑运算符,世界杯案例题目,条件判断if语句,猜拳游戏与三目运算符
Python学习笔记之[第一章]基础知识 前言: 一.格式化输出 1.基本格式: 2.练习代码: 二.转义字符 1.基本格式: 2.练习代码: 3.输出结果: 三.输入 1.基本格式: 2.练习代码: ...
最新文章
- Battle for Wesnoth 1.8.4,开源战斗游戏
- JSON.parse()与JSON.stringify()的区别
- innodb_monitor
- JavaScript学习杂记--对象和数组
- 为什么子孙后代会讨厌使用java.util.Stack
- 【答辩问题】计算机专业本科毕业设计答辩的一般程序2
- cesium加载 gltf模型
- VueCli4学习笔记
- 小学计算机使用和运行记录表,20XX年小学微机室的各种管理制度和常用表格.doc...
- 君望永远--纠缠在爱情的起点上 (转载)
- 06 暗语转换+ 人民币和卢布币值兑换+星座判断应用
- 从生活角度学习c++
- Ubuntu16.04安装文本标注工具brat
- 笔记33 笨办法学python练习40之二:类和对象
- 【Linux服务器运行jar包】
- linux_SIGCHLD信号-子进程回收
- 微信小程序聊天功能PHP,微信小程序实现聊天室
- 【添坑】高博ORB_SLAM
- 路由器连接校园网并发WIFI:WR703N路由器安装OpenWRT并运行H3C客户端操作步骤(主要针对中山大学东校区)
- 【操作系统】虚拟内存
热门文章
- 详解:hiveserver2的使用与介绍
- Spark利用(idea+maven+scala)创建wordcount打包jar并在spark on yarn上运行——Spark的开发
- nginx-2.nginx是什么
- 判断字符串中是否存在的几种方案:string.indexof、string.contains、list.contains、list.any几种方式效率对比...
- 区分PC端与移动端代码,涵盖C#、JS、JQuery、webconfig
- Opencv step by step - 图像变换
- 让你提前认识软件开发(28):数据库存储过程中的重要表信息的保存及相关建议...
- XML 数据挖掘 之 挖掘 XML 关联规则
- Bailian4019 黑色星期五【模拟】
- 小乐乐与二段数(2019哈理工新生赛第20题)