如果您曾經學過 C 語言,您一定對於printf()中,使用格式指定字來指定輸出的格式感到難以忘懷,在之前我們看過的例子中,都是使用C++的預設格式來輸出資訊,事實上只要透過幾種基本的方式,我們也可以指定所需的格式來輸出資訊,I/O格式控制器即為其中的一種。
一個I/O格式控制器為一個特殊的函式,在C++中常見的endl就是I/O格式控制器的一種,它會輸出new line字元至串流中,一個I/O格式控制器只會影響目前正在處理的串流,串流處理結束後即回復C++預設的格式。
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;
boolnum = false; cout << boolalpha << boolnum << endl;
return 0; }
執行結果:
下面我們列出幾個常用的I/O控制器與其說明:
| boolalpha |
讓bool輸出時顯示true與false |
| dec |
10進位顯示
|
| endl |
輸出new line字元 |
| 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的使用 |
|