6.8格式化操纵算子就像我们在前面的例子中看到的一样,调用成员函数有点乏味。为使读和写更容易,C++提供了一套操纵算子以起到与成员函数同样的作用。提供在IOSTREAM.H里的是不带参数的操纵算子。这些操纵算子包括dec
、oct
和hex
。它们各自更简明扼要地完成与setf(ios::dec, ios::basefield)
、setf(ios::oct, ios::basefield)
和setf(ios::hex, ios::basefield)
同样的任务。IOSTREAM.H还包括ws
、endl
、ends
和flush
以及如下所示的其他操纵算子:
操纵算子 | 作用
---------|----
showbase | 在打印一整数值时,标明数字基数(十进制,八进制和十六进制);所用的格式能被C++编译器读出
showpos | 显示正值符号加(+)
noshowpos | 不显示正值符号
uppercase | 显示代表十六进制值的大写字母A-F以及科学记数法中的E
nouppercase | 不显示大写字母
showpoint | 表明浮点数值的小数点和后面的零
noshowpoint | 不表明浮点数值的小数点和后面的零
skipws | 跳过输入中的空白字符
noshipws | 不跳过输入中的空白字符
left | 左对齐,右填充
right | 右对齐,左填充
internal | 在引导符或基数指示符和值之间填充
scientific | 使用科学记数法
fixed | 使用固定点表示法
setprecision() | 或ios::precisi
设置小数点后面的位数 )
带参数的操纵算子
如果正在使用带参数的操纵算子,必须也包含头文件IOMANIP.H。这包含了解决建立带参数操纵算子所遇到的一般问题的代码。它有六个预定义的操纵算子:
操纵算子 | 作用
---------|----
setiosflags(fmtflags n) | 设置由n指定的格式标志;设置一直起作用直到下一个变化为止,像ios::setf()
一样
resetiosflags(fmtflags n) | 清除由n指定的格式标志。设置一直起作用直到下一个变化为止,像ios::unsetf()
一样
setbase(base n) | 把基数改成n,这里n取10、8或16(任何别的值结果为0)。如果n是0,输出基数为10,但输入使用C约定:10是10,010是8而0xf是15。我们还是使用dec
、oct
和hex
输出为好
setfill(char n) | 把填充字符改成n,像ios::fill()
一样
setprecision(int n) | 把精度改成n,像ios::precisi
一样 )
setw(int n) | 把域宽改成n,像ios::width()
一样
你知道吗?在修改库中这些仅出现的操纵算子,旧的输入输出流实现中是没有包括的。如果你对这些概念还想了解得更深入一些,不妨看看这些资源:C流操纵算子doc中详细讲解了操纵算子的使用,或者你也可以参考C++操纵文件来更全面地理解如何在实际编程中应用它们。
这么多操纵算子,不觉得眼花缭乱吗?它们不仅简化了代码,还让你的C++编程变得更有趣、更高效。试试看,你会发现操纵算子是如此强大而实用!
暂无评论