6.8格式化操纵算子就像我们在前面的例子中看到的一样,调用成员函数有点乏味。为使读和写更容易,C++提供了一套操纵算子以起到与成员函数同样的作用。提供在IOSTREAM.H里的是不带参数的操纵算子。这些操纵算子包括decocthex。它们各自更简明扼要地完成与setf(ios::dec, ios::basefield)setf(ios::oct, ios::basefield)setf(ios::hex, ios::basefield)同样的任务。IOSTREAM.H还包括wsendlendsflush以及如下所示的其他操纵算子:

操纵算子 | 作用

---------|----

showbase | 在打印一整数值时,标明数字基数(十进制,八进制和十六进制);所用的格式能被C++编译器读出

showpos | 显示正值符号加(+)

noshowpos | 不显示正值符号

uppercase | 显示代表十六进制值的大写字母A-F以及科学记数法中的E

nouppercase | 不显示大写字母

showpoint | 表明浮点数值的小数点和后面的零

noshowpoint | 不表明浮点数值的小数点和后面的零

skipws | 跳过输入中的空白字符

noshipws | 不跳过输入中的空白字符

left | 左对齐,右填充

right | 右对齐,左填充

internal | 在引导符或基数指示符和值之间填充

scientific | 使用科学记数法

fixed | 使用固定点表示法

setprecision() | 或ios::precision()设置小数点后面的位数

带参数的操纵算子

如果正在使用带参数的操纵算子,必须也包含头文件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。我们还是使用decocthex输出为好

setfill(char n) | 把填充字符改成n,像ios::fill()一样

setprecision(int n) | 把精度改成n,像ios::precision()一样

setw(int n) | 把域宽改成n,像ios::width()一样

你知道吗?在修改库中这些仅出现的操纵算子,旧的输入输出流实现中是没有包括的。如果你对这些概念还想了解得更深入一些,不妨看看这些资源:C流操纵算子doc中详细讲解了操纵算子的使用,或者你也可以参考C++操纵文件来更全面地理解如何在实际编程中应用它们。

这么多操纵算子,不觉得眼花缭乱吗?它们不仅简化了代码,还让你的C++编程变得更有趣、更高效。试试看,你会发现操纵算子是如此强大而实用!