流输入输出也可以进行格式控制, C++ 中是通过流操纵算子来实现的。流操纵算子是在头文件 iomanip 中定义的,因此要使用这些流操纵算子,必须包含该头文件。
// 包含流操作算子库
#include <iomanip>
C++ 的 iomanip 库提供了多种流操纵算子,来实现不同的格式控制功能,包括设置域宽、设置精度、设置和清除格式化标志、设置域填充字符、在输出流中插入空字符、跳过输入流中的空白字符等,下表为一些常用的流操作算子:
流操纵算子 | 功能描述 |
---|---|
setbase(b) | 以进制基数 b 为输出整数值 |
setprecision(n) | 将浮点精度设置为 n |
setiosflags(long) | 设置特定的格式标志位 |
setw(n) | 按照 n 个字符来读或者写 |
setfill(ch) | 用 ch 填充空白字符 |
flush | 刷新 ostream 缓冲区 |
ends | 输出空字符 |
endl | 输出换行符并刷新 ostream 缓冲区 |
ws | 跳过空白字符(用于输入) |
本次主要介绍setbase(b)、setprecision(n)、setiosflags(long)和setw(n) 算子。
控制进制基数
对于标准输出流 cout 可以使用 setbase 来设置输出整数的进制基数(只支持8、10、16进制),如:
// 以八进制形式输出整数 n
cout << setbase(8) << n << endl;
也可以直接使用流操纵算子 oct(八进制)、hex(十六进制)和 dec(十进制)直接控制输出整数的进制,如:
// 以十六进制输出整数 n
cout << hex << n