cout格式化输出

您所在的位置:网站首页 怎么用cout输出字符串 cout格式化输出

cout格式化输出

2024-01-08 20:11| 来源: 网络整理| 查看: 265

来源:《程序控》博客 – http://www.cnblogs.com/devymex/

这篇文章主要讲解如何在C++中使用cout进行高级的格式化输出操作,包括数字的各种计数法(精度)输出,左或右对齐,大小写等等。通过本文,您可以完全脱离scanf/printf,仅使用cout来完成一切需要的格式化输入输出功能(从非性能的角度而言)。更进一步而言,您还可以在、上使用这些格式化操作,从而代替sprintf和fprintf函数。为方便描述,下文仅以cout为例进行介绍。

一、综述

cout是STL库提供的一个iostream实例,拥有ios_base基类的全部函数和成员数据。进行格式化操作可以直接利用setf/unsetf函数和flags函数。cout维护一个当前的格式状态,setf/unsetf函数是在当前的格式状态上追加或删除指定的格式,而flags则是将当前格式状态全部替换为指定的格式。cout为这个函数提供了如下参数(可选格式):

ios::dec 以10进制表示整数ios::hex 以16进制表示整数ios::oct 以8进制表示整数ios::showbase 为整数添加一个表示其进制的前缀ios::internal 在符号位和数值的中间插入需要数量的填充字符以使串两端对齐ios::left 在串的末尾插入填充字符以使串居左对齐ios::right 在串的前面插入填充字符以使串居右对齐ios::boolalpha 将bool类型的值以true或flase表示,而不是1或0ios::fixed 将符点数按照普通定点格式处理(非科学计数法)ios::scientific 将符点数按照科学计数法处理(带指数域)ios::showpoint 在浮点数表示的小数中强制插入小数点(默认情况是浮点数表示的整数不显示小数点)ios::showpos 强制在正数前添加+号ios::skipws 忽略前导的空格(主要用于输入流,如cin)ios::unitbuf 在插入(每次输出)操作后清空缓存ios::uppercase 强制大写字母

以上每一种格式都占用独立的一位,因此可以用“|”(位或)运算符组合使用。调用setf/unsetf或flags设置格式一般按如下方式进行:

cout.setf(ios::right | ios::hex); //设置16进制右对齐 cout.setf(ios::right, ios::adjustfield); //取消其它对齐,设置为右对齐

setf可接受一个或两个参数,一个参数的版本为设置指定的格式,两个参数的版本中,后一个参数指定了删除的格式。三个已定义的组合格式为:

ios::adjustfield 对齐格式的组合位ios::basefield 进制的组合位ios::floatfield 浮点表示方式的组合位

设置格式之后,下面所有使用cout进行的输出都会按照指定的格式状态执行。但是如果在一次输出过程中需要混杂多种格式,使用cout的成员函数来处理就显得很不方便了。STL另提供了一套omanip库可以满足这种使用方式。iomanip库中将每一种格式的设置和删除都进行了函数级的同名封装,比如fixed函数,就可以将一个ostream的对象作为参数,在内部调用setf函数对其设置ios::fixed格式后再返回原对象。此外iomanip还提供了setiosflags、setbase、setfill、setw、setprecision等方便的格式控制函数,下文会逐一进行介绍。大多数示例代码都会使用到iomanip,因此默认包含的头文件均为:

#include #include 二、缩进

将输出内容按指定的宽度对齐,需要用到ios::right、ios::left、ios::internal和iomanip里的setw。其中setw用于指定要输出内容的对齐宽度。以下两段代码的结果完全相同,前面是一个浮点数-456.98,后面紧跟着一个字符串“The End”以及换行符“endl”。

代码一

#include #include using namespace std; int main(void) { cout.flags(ios::left); //左对齐 cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3