对齐相关
宽度
ostream 提供接口 width()
, 只对下一次输出有效 , 默认宽度为 1 , 也就是没有宽度限制.
对齐
ostream 可以支持 左, 右 和 两侧 三种对齐方式 :
std::ios::left ;
std::ios::right;
std::ios::internal;
( 很奇怪的没有中心对齐) , 可以使用setf()
和unsetf()
接口来设置或者取消.
填充
ostream默认使用空格来填充不足宽度部分, 可以使用fill()
接口来指定填充字符.
例子
#include <iostream>
int main()
{
std::cout.width(5);
// 表明属性属于对齐
std::cout.setf(std::ios::left, std::ios::adjustfield );
std::cout.fill('_');
std::cout<<"H"<<"ello World"<<std::endl;
return 0;
}
输出:
H_____ello World
上面的属性也可以直接插入到流中:
std::cout.width(6); std::cout << std::left <
进制
ostream 读入整数的时候, 默认是10进制的,支持 8进制 , 10进制 和 16进制 .
std::ios::oct;
std::ios::dec;
std::ios::hex;
可以使用setf来指定进制 ( 加上basefield限定)
也可以直接在流中插入流中:
std::cout<<std::hex<<11;
// 输出 B
std::cout.setf( std::ios::hex , std::ios::basefiled);
std::cout<<11;
//还是输出B
重定向或者禁用
我们知道std::cout
, std::cin
,std::cerr
, 都是不可以复制的, 独一无二的对象.
他们提供接口 tie
来重定向自己. 这个接口的参数是 std::iostream *
的新的流, 返回值是上一个流指针.
将std::cin
禁止并将原先的值保存:
std::ostream *tie_out = std::cin.tie(nullptr);
禁止C++和C风格的输出混用
std::ios_base::sync_with_stdio(false);