C++格式化输出流

有时ACM或者程序需要在输入输出时有一些特定格式,如在输出实数时规定字段宽度,只保留两位小数,数据向左或向右对齐等。C++提供了在输入输出流中使用的控制符(有的书中称为操纵符)
需要注意的是:以下函数包含在头文件iomanip。(顺便说一下从Linux GCC 4.8.0开始加入头文件bits/stdc++.h,虽然不是标准头文件,但这个头文件着实顺手,平时用的头文件都在里面)

操纵符 作用
setfill(ch) 设置填充字符ch,ch可以是字符常量或字符变量
setprecision(n) 将浮点精度设置为n
setw(n) 读或写值宽度为n个字符
setbase(int base) 将整数输出为base进制
当base数值为
8 八进制
10 十进制
16 十六进制
other 默认输出
setiosflags 设置数据格式为……
resetiosflags 重置数据格式
setiosflags (ios_base::fmtflags mask); fmtflags可添加类型 见下表

setiosflags能添加的fmtflags有如下

操纵符 作用
boolalpha 将true和false输出为字符串
showbase 对整型值输出表示进制的前缀
showpoint 对浮点值总是显示小数点
showpos 对非负数显示+
skipws 输入运算符跳过空白符
unitbuf 每次输出操作后都刷新缓冲区
uppercase 转换为大写输出英文字符
dec 整型值显示为十进制
hex 整型值显示为十六进制
oct 整型值显示为八进制
fixed 设置浮点数以固定的小数位数显示
scientific 浮点值显示为科学技术法
internal 在符号和值之间添加填充字符
left 在值的右侧添加填充字符
right 在值的左侧添加填充字符

定义在iostream中的操纵符

操纵符 作用
boolalpha 将true和false输出为字符串
*noboolalpha 将true和false输出为1,0
showbase 对整型值输出表示进制的前缀
*noshowbase 不生成表示进制的前缀
showpoint 对浮点值总是显示小数点
*noshowpoint 只有当浮点值包含小数部分时才显示小数点
showpos 对非负数显示+
*noshowpos 对非负数不显示+
uppercase 在十六进制值中打印0X,在科学记数法中打印E
*nouppercase 在十六进制值中打印0x,在科学记数法中打印e
*dec 整型值显示为十进制
hex 整型值显示为十六进制
oct 整型值显示为十进制
left 在值的右侧添加填充字符
right 在值的左侧添加填充字符
internal 在符号和值之间添加填充字符
fixed 浮点值显示为定点十进制
scientific 浮点值显示为科学记数法
hexfloat 浮点值显示为十六进制
defaultfloat 重置浮点数格式为十进制
unitbuf 每次输出操作后都刷新缓冲区
*nounitbuf 恢复正常的缓冲区刷新方式
*skipws 输入运算符跳过空白符
noskipws 输入运算符不跳过空白符
flush 刷新ostream缓冲区
ends 插入空字符,然后刷新ostream缓冲区
endl 插入换行,然后刷新ostream缓冲区
*表示为默认流状态