cout格式化输出
利用setf/unsetf or flag来设置cout的格式,前者是在当前状态下追加or删除指定格式,后者是重新设置一个新的格式。如
cout.setf(ios::right); //右对齐
下面从常见格式、对齐与占宽、进制与+/-号、浮点数格式设置来介绍cout格式化输出
常见格式
ios::dec 以10进制表示整数
ios::hex 以16进制表示整数
ios::oct 以8进制表示整数
ios::showbase 为整数添加一个表示其进制的前缀
ios::internal 在符号位和数值的中间插入需要数量的填充字符以使串两端对齐
ios::left 在串的末尾插入填充字符以使串居左对齐
ios::right 在串的前面插入填充字符以使串居右对齐
ios::boolalpha 将bool类型的值以true或flase表示,而不是1或0
ios::fixed 将符点数按照普通定点格式处理(非科学计数法)
ios::scientific 将符点数按照科学计数法处理(带指数域)
ios::showpoint 在浮点数表示的小数中强制插入小数点(默认情况是浮点数表示的整数不显示小数点)
ios::showpos 强制在正数前添加+号
ios::skipws 忽略前导的空格(主要用于输入流,如cin)
ios::unitbuf 在插入(每次输出)操作后清空缓存
ios::uppercase 强制大写字母
setf有两种形式
- 一个参数的,如
cout.setf(ios::right);
可以设置为指定的格式(设置为右对齐) - 两个参数的,如
cout.setf(ios::right,ios::adjustfield);
可以取消原来的一种格式,设置一种新的格式(取消其他对齐,设置为右对齐) - 同属
一个参数
的,但是可以设置多种格式,需要通过|
来组合格式,如cout.setf(ios::right | ios::hex);
(设置为16进制右对齐)
但是,通过格式控制输出不能满足多种格式的要求,在这种情况下,我们可以使用STL提供的<iomanio>
来实现。<iomanip>
提供了如setioflags
,setbase
,setfill
,setw
,setprecision
来方便控制格式
下面通过代码一个个说明其用途(请运行代码查看效果)
对齐与占宽
// endl是flush buffer的newline,'\n' not ...
cout.flags(ios::left); // ios::left左对齐,设置格式
cout << setw(20) << -123.456 << "hello" << endl; // setw()是设置宽度
// equal to cout << left << setw(20) << -123.456 << "hello" << endl;
// 一次性,更方便
cout.flags(ios::internal); // ios::interal两端对齐
cout << setw(20) << -123.456 << "hello" << endl;
// equal to cout << interal << setw(20) << -123.456 << "hello" << endl;
cout.flags(ios::right); // ios::right右对齐
cout << setfill('*') << setw(20) << -123.456 << "hello" << endl;
// setw()默认使用空格填充,可以通过setfill()来自定义填充字符,一旦更改