C++ 学习(2) ---- std::cout 格式化输出

std::cout 格式化输出简介

C++ 通常使用cout输出数据,和printf()函数相比,cout实现格式化输出数据的方式更加多样化;
一方面,cout 作为 ostream 类的对象,该类中提供有一些成员方法,可实现对输出数据的格式化;另一方面,为了方面用户格式化输出数据,C++ 标准库专门提供了一个 <iomanip> 头文件,该头文件中包含有大量的格式控制符,也就是流操作算子,使用上更加方便;
cout 格式化输出有两种方法,一种是直接使用成员函数,另一种是使用流操作算子,下面分别进行介绍:

使用成员函数

cout 的基类是 ostream 类,ostream 类 中还包含一些可实现格式化输出的成员方法,这些成员方法都是从 ios 基类(以及 ios_base类)中继承来的,cout(以及 cerrclog)也能调用:

成员函数 说明
flags(fmtfl) 当前的格式全部替换为fmtfl,fmtfl 可以是一种格式,也可以是多种格式
precision(n) 设置输出浮点数的精度为 n
width(w) 指定输出宽度为 w 个字符
fill(c) 在指定输出宽度的情况下,输出宽度不足用 c 填充
setf(fmtfl, mask) 在当前格式的基础上,追加 fmtfl 格式,并且删除 mask 格式,其中mask参数可以省略
unsetf(mask) 在当前格式的基础上,删除 mask 格式

对于上面函数中的 flags 函数的fmtfl参数,setf() 函数中的 fmtfl 参数以及 unsetf() 函数可以选择下面的值:

标志 作用
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 每次输出之后刷新所有的流

setf(fmtfl, mask)unsetf(fmtfl, mask) 中的mask 参数,可以传递为下面的几个:

标志 作用
ios::adjustfield ios::left , ios::right , ios::internal
ios::basefield ios::dec ,ios::oct ,ios::hex
ios::floatfield ios::scientific , ios::fixed

使用 cout 成员函数的示例程序如下:

bool testCoutUsingflags() {
   
	{
   
		// setf(fmt,mask) 在当前格式的基础上追加 fmt flag, 并且删除 mask 格式
		std::cout.setf(std::ios::boolalpha);
		bool a = true;
		std::cout << "bool a:" << a << std::endl;

		int m = 100;
		std::cout.setf(std::ios::hex, std::ios::basefield);
		std::cout << "int m:" << m << " bool a " << a << std::endl;

		// 去除相应的标志
		std::cout.unsetf(std::ios::boolalpha);
		std::cout << "hex print int m:" << m << " bool a " << a << std::endl;

		std::cout.setf(std::ios::dec, std::ios::basefield);
		int n = 0x110;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值