如果學過 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
的使用