C++ cout格式化输出

news/2024/7/20 21:54:24 标签: c++, ios, objective-c

称为“流操纵算子”),使用更加方便。

C++ cout成员方法格式化输出

《C++输入流和输出流》一节中,已经针对 cout 讲解了一些常用成员方法的用法。除此之外,ostream 类中还包含一些可实现格式化输出的成员方法,这些成员方法都是从 ios 基类(以及 ios_base 类)中继承来的,cout(以及 cerr、clog)也能调用。

表 1 罗列了 ostream 类中可实现格式化输出的常用成员方法,以及它们各自的用法。

成员函数

说明

flags(fmtfl)

当前格式状态全部替换为 fmtfl。注意,fmtfl 可以表示一种格式,也可以表示多种格式。

precision(n)

设置输出浮点数的精度为 n。

width(w)

指定输出宽度为 w 个字符。

fill(c)

在指定输出宽度的情况下,输出的宽度不足时用字符 c 填充(默认情况是用空格填充)。

setf(fmtfl, mask)

在当前格式的基础上,追加 fmtfl 格式,并删除 mask 格式。其中,mask 参数可以省略。

unsetf(mask)

在当前格式的基础上,删除 mask 格式。

其中,对于表 1 中 flags() 函数的 fmtfl 参数、setf() 函数中的 fmtfl 参数和 mask 参数以及 unsetf() 函数 mask 参数,可以选择表 2 中列出的这些值。

标 志

作 用

ios::boolapha

把 true 和 false 输出为字符串

ios::left

输出数据在本域宽范围内向左对齐

ios::right

输出数据在本域宽范围内向右对齐

ios::internal

数值的符号位在域宽内左对齐,数值右对齐,中间由填充字符填充

ios::dec

设置整数的基数为 10

ios::oct

设置整数的基数为 8

ios::hex

设置整数的基数为 16

ios::showbase

强制输出整数的基数(八进制数以 0 开头,十六进制数以 0x 打头)

ios::showpoint

强制输出浮点数的小点和尾数 0

ios::uppercase

在以科学记数法格式 E 和以十六进制输出字母时以大写表示

ios::showpos

对正数显示“+”号

ios::scientific

浮点数以科学记数法格式输出

ios::fixed

浮点数以定点格式(小数形式)输出

ios::unitbuf

每次输出之后刷新所有的流

举个例子:

#include <iostream>

using namespace std;

int main()

{

double a = 1.23;

//设定后续输出的浮点数的精度为 4

cout.precision(4);

cout <<"precision: "<< a << endl;

//设定后续以科学计数法的方式输出浮点数

cout.setf(ios::scientific);

cout <<"scientific:"<< a << endl;

return 0;

}

程序执行结果为:

precision: 1.23 scientific:1.2300e+00

注意,当 cout 采用此方式进行格式化输出时,其后不能立即输出数据,而只能像示例程序中那样,再用一个 cout 输出数据。

值得一提的是,当调用 unsetf() 或者 2 个参数的 setf() 函数时,为了提高编写代码的效率,可以给 mask 参数传递如下 3 个组合格式:

  • ios::adjustfield:等价于 ios::left | ios::right | ios::internal;

  • ios::basefield:等价于 ios::dec | ios::oct | ios::hex;

  • ios::floatfield:等价于 ios::scientific | ios::fixed。

举个例子:

#include <iostream>

using namespace std;

int main()

{

double f = 123;

//设定后续以科学计数法表示浮点数

cout.setf(ios::scientific);

cout << f << '\n';

//删除之前有关浮点表示的设定

cout.unsetf(ios::floatfield);

cout << f;

return 0;

}

程序执行结果为:

1.230000e+02 123

使用流操纵算子格式化输出

表 3 罗列了 <iomanip> 头文件中定义的一些常用的格式控制符,它们都可用于格式化输出。

流操纵算子

作 用

*dec

以十进制形式输出整数

常用

hex

以十六进制形式输出整数

oct

以八进制形式输出整数

fixed

以普通小数形式输出浮点数

scientific

以科学计数法形式输出浮点数

left

左对齐,即在宽度不足时将填充字符添加到右边

*right

右对齐,即在宽度不足时将填充字符添加到左边

setbase(b)

设置输出整数时的进制,b=8、10 或 16

setw(w)

指定输出宽度为 w 个字符,或输入字符串时读入 w 个字符。注意,该函数所起的作用是一次性的,即只影响下一次 cout 输出。

setfill(c)

在指定输出宽度的情况下,输出的宽度不足时用字符 c 填充(默认情况是用空格填充)

setprecision(n)

设置输出浮点数的精度为 n。在使用非 fixed 且非 scientific 方式输出的情况下,n 即为有效数字最多的位数,如果有效数字位数超过 n,则小数部分四舍五人,或自动变为科学计 数法输出并保留一共 n 位有效数字。在使用 fixed 方式和 scientific 方式输出的情况下,n 是小数点后面应保留的位数。

setiosflags(mask)

在当前格式状态下,追加 mask 格式,mask 参数可选择表 2 中的所有值。

resetiosflags(mask)

在当前格式状态下,删除 mask 格式,mask 参数可选择表 2 中的所有值。

boolapha

把 true 和 false 输出为字符串

不常用

*noboolalpha

把 true 和 false 输出为 0、1

showbase

输出表示数值的进制的前缀

*noshowbase

不输出表示数值的进制.的前缀

showpoint

总是输出小数点

*noshowpoint

只有当小数部分存在时才显示小数点

showpos

在非负数值中显示 +

*noshowpos

在非负数值中不显示 +

uppercase

十六进制数中使用 A~E。若输出前缀,则前缀输出 0X,科学计数法中输出 E

*nouppercase

十六进制数中使用 a~e。若输出前缀,则前缀输出 0x,科学计数法中输出 e。

internal

数值的符号(正负号)在指定宽度内左对齐,数值右对 齐,中间由填充字符填充。

注意:“流操纵算子”一栏带有星号 * 的格式控制符,默认情况下就会使用。例如在默认情况下,整数是用十进制形式输出的,等效于使用了 dec 格式控制符。

和 cout 成员方法的用法不同,下面程序演示了表 3 中这些格式控制符的用法:

 
#include <iostream>

#include <iomanip>

using namespace std;

int main()

{

//以十六进制输出整数

cout << hex << 16 << endl;

//删除之前设定的进制格式,以默认的 10 进制输出整数

cout << resetiosflags(ios::basefield)<< 16 << endl;

double a = 123;

//以科学计数法的方式输出浮点数

cout << scientific << a << endl;

//删除之前设定的科学计数法的方法

cout << resetiosflags(ios::scientific) << a << endl;

return 0;

}

程序执行结果为:

10 16 1.230000e+02 123

注意,如果两个相互矛盾的标志同时被设置,如先设置 setiosflags(ios::fixed),然后又设置 setiosflags(ios::scientific),那么结果可能就是两个标志都不起作用。因此,在设置了某标志,又要设置其他与之矛盾的标志时,就应该用 resetiosflags 清除原先的标志。


http://www.niftyadmin.cn/n/232480.html

相关文章

中国31个主要城市绿地数据(空间分辨率为1m)

近年来&#xff0c;为了满足生态文明和可持续发展的理念&#xff0c;科学的城市绿地规划和管理在中国越来越受到重视。因此&#xff0c;提高UGS分类体系和布局布局的合理性&#xff0c;建设绿色宜居城市&#xff0c;是近年来政府和学者关注的重点。为此&#xff0c;本文选取中国…

#关于webpack版本号的问题#

场景&#xff1a;在使用npm install 安装package.json里面的依赖的&#xff0c;打包&#xff0c;运行的使用&#xff0c;有时候会失败。 原因 &#xff1a;由于webpack webpack-cli版本不同导致的 这个时候需要解决webpack webpack-cli的安装&#xff0c;切换等操作 例如使用…

投影仪怎么连接电脑?快来看看这3种方法!

案例&#xff1a;如何连接电脑和投影仪&#xff1f; 【想看电影&#xff0c;但是电脑屏幕太小&#xff0c;我想把电脑上的内容通过投影仪投到大屏幕上。有小伙伴知道如何连接电脑和投影仪吗&#xff1f;谢谢大家&#xff01;】 使用投影仪可以将电脑或其他设备上的内容投放到…

Java设计模式你了解多少

Java设计模式是一种为解决软件设计中常见问题而编写的通用重复解决方案。这些问题涉及到对象创建、组合对象以形成更复杂的对象、组织和管理对象之间的关系以及在系统运行时动态地切换对象的行为等方面。Java设计模式已经被广泛应用于软件开发领域&#xff0c;并且在现代软件开…

科技云报道:“云减碳”成趋势,如何用“计算”帮助企业碳减排?

科技云报道原创。 将数据中心“丢进”水里、“扔进”山里&#xff0c;使用风能、太阳能等清洁能源为数据中心供电……这些都是通过物理方法为数据中心减碳。 数据中心的重要工作在于计算&#xff0c;计算导致了能源消耗&#xff0c;使其成为耗能大户&#xff0c;而通过云计算…

【MySQL | 基础篇】05、MySQL 事务详解

目录 一、事务简介 二、事务操作 2.1 未控制事务 2.2 控制事务一 2.3 控制事务二 三、事务四大特性 四、并发事务问题 五、事务隔离级别 一、事务简介 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系…

基于Python机器学习、深度学习技术提升气象、海洋、水文领域实践应用能力

目录 专题一、Python软件的安装及入门 专题二、气象常用科学计算库 专题三、气象海洋常用可视化库 专题四、爬虫和气象海洋数据 专题五、气象海洋常用插值方法 专题六、机器学习基础理论和实操 专题七、机器学习的应用实例 专题八、深度学习基础理论和实操 专题九、深…

近似核方法Random Binning Feature(RBF)词嵌入降维

Random Binning Feature&#xff08;RBF&#xff09;介绍代码附录-详细解释介绍 Random Binning Feature&#xff08;RBF&#xff09;。RBF 将输入数据映射到固定的特征空间&#xff0c;其中每个维度对应于输入数据的一个固定范围。这个范围由我们自己指定&#xff0c;并且在 …