如果学过C 语言,一定对printf
的格式指定方式感到难以忘怀,之前看过的例子中,都是使用cout
式来输出信息,然而没谈到格式控制,其实只要透过几种基本方式,也可以指定格式来输出信息,I/O 格式控制器是其中的一种。
I/O 格式控制器是个特殊函数,在 C++ 中常见的endl
就是 I/O 格式控制器的一种,它会输出换行字符并清空串流,一个 I/O 格式控制器只影响目前处理的串流。
I/O 格式控制器也可以指定参数,如果要使用具参数的 I/O 格式控制器,必须指定iomanip
标头文件;先来看个基本的例子,了解 I/O 格式控制器的作用与使用方式:
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
cout << oct << 50 << endl // 8 进制显示
<< hex << 50 << endl; // 16 进制显示
// 九九乘法表
for(int j = 1; j < 10; j++) {
for(int i = 2; i < 10; i++) {
cout << i << "*" << j << "=" << dec << setw(2) << (i * j);
cout << " ";
}
cout << endl;
}
return 0;
}
oct
控制器会将后续数字以 8 进制来显示,hex
以 16进制显示,而setw
可以设定字段宽度,然后使用 16 进制方式显示数字,为了要输出 10 进制的结果,在之前加入dec
控制器。
在 C++ 中 1 可表示true
,而 0 可表示false
,输出时也是直接输出 0 与 1,下面这个程序使用boolalpha
控制器,可以让输出以 true 与 false 来显示:
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
bool boolnum;
boolnum = true;
cout << boolalpha << boolnum << endl; // 显示 true
boolnum = false;
cout << boolalpha << boolnum << endl; // 显示 false
return 0;
}
下面列出几个常用的I/O控制器与其说明:
- boolalpha:让 bool 输出时显示 true 与 false
- dec:10 进制显示
- endl:输出换行字符并清空串流
- ends:输出 Null 字符
- fixed:以正常的数字格式显示
- flush:清空串流
- hex:16 进制显示
- left:靠左对齐
- oct:8 进制显示
- right:靠右显示
- scientific:科学计数表示
- setbase(int b):指定数字基底
- setfill(int c):指定填充字符
- setprecision(int p):指定显示精确度
- setw(int w):指定字段宽度,并以 16 进制显示
- showbase:显示数字基底,例如 0x11
- showpoint:显示小数
- showpos:正数显示 + 号
- skipws:忽略输入的空白字符
- upperbase:字母大写
- ws:忽略前导的空白字符
- noboolalpha:关闭 boolalpha 的使用
- noshowbase:关闭 showbase 的使用
- noshowpoint:关闭 showpoint 的使用
- noshowpos:关闭 showpos 的使用
- noskipws:关闭 skipws 的使用
- nouppercase:关闭 uppercase 的使用