有时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缓冲区 |
| *表示为默认流状态 |
