如果學過 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 與 falsedec: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:顯示數字基底,例如 0x11showpoint:顯示小數showpos:正數顯示 + 號skipws:忽略輸入的空白字元upperbase:字母大寫ws:忽略前導的空白字元noboolalpha:關閉boolalpha的使用noshowbase:關閉showbase的使用noshowpoint:關閉showpoint的使用noshowpos:關閉showpos的使用noskipws:關閉skipws的使用nouppercase:關閉uppercase的使用

