加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

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

发布时间:2023-06-14 13:23:55 所属栏目:语言 来源:
导读:ostream 类中还包含一些可实现格式化输出的成员方法,这些成员方法都是从 ios 基类(以及 ios_base 类)中继承来的,cout(以及 cerr、clog)也能调用。

ostream 类的成员方法

成员函数 说明
flags(fmtfl
ostream 类中还包含一些可实现格式化输出的成员方法,这些成员方法都是从 ios 基类(以及 ios_base  类)中继承来的,cout(以及 cerr、clog)也能调用。

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 中列出的这些值。

fmtfl 和 mask 参数可选值

标 志    作 用
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

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章