在C++程序輸出數據時,往往使用默認格式,由系統根據數據類型來輸出;但是當我們想要輸出特定格式的數據時,可以通過使用控制符來達到我們的目的。例如:以八進制、十進制或十六進制,科學計數法輸出,添加+號,設置輸出字段位域與對齊方式,實數的有效位數或小數位數等。
常見的控制符如下表
控制符 | 描述 |
oct | 設置整數基數為8,即八進制 |
dec | 設置整數基數為10,即十進制 |
hex | 設置整數基數為16,即十六進制 |
setbase(n) | 設置整數基數為n,n值為8、10或16 |
setw(n) | 設置下一字段輸出位域的寬度為n位,即設置后下一<< <<間的內容 |
setiosflags(ios::left) | 輸出數據位域中左對齊,相對於setw(n)的變化 |
setiosflags(ios::right) | 輸出數據位域中右對齊,相對於setw(n)的變化 |
setfill(c) | 輸出數據位域中空白填充c字符,例如:setfill('*') |
setprecision(n) | 設置實數輸出的有效位數為n為,包括整數和小數,當setiosflags(ios::scientific)和setiosflags(ios::fixed)項設置后表達為小數的位數 |
setiosflags(ios::scientific) | 設置浮點數以科學計數法輸出(用e描述) |
setiosflags(ios::fixed) | 設置浮點數固定小數位數,由setprecision(n)決定 |
setiosflags(ios::uppercase) | 設置以科學計數法或十六進制輸出時字母大寫 |
setiosflags(ios::showpos) | 設置正數輸出時,前邊添加+號 |
setiosflags(ios::shipws) | 忽略前導空格 |
resetiosflags | 取消對應控制符設置的功能,括號內為上述可能的內容;例如:setiosflags(ios::scientific)和setiosflags(ios::fixed)不能同時設置,需先取消前者后者才有效。 |
上述控制符定義在頭文件iomanip中,編寫程序時需要添加該頭文件。
代碼示例:
1 #include <iostream> 2 #include <iomanip> 3 4 using namespace std; 5 int main(void) 6 { 7 int a = 10; 8 cout << "設置基數為dec :" << dec << a << endl; 9 cout << "設置基數為hex :" << hex << a << endl; 10 cout << "設置基數為otc :" << oct << a << endl; 11 cout << "不再設基數值 :" << a << endl; // 依舊保持最近的輸出格式,即oct格式輸出 12 cout << "設置基數值為10:" <<setbase(10) << a << endl; 13 14 char *p = "hello"; 15 16 /* setw(n)設置位域寬度,設置寬度僅下一字段有效 */ 17 cout << "位域20:" << setw(20) << p << endl; // 設置輸出位域,僅下一個字段有效,即設置后接的<< << 18 cout << "位域20:" << setw(20) << "123" << "456" << "789" << "-->位域123字段有效" << endl; 19 20 /* 21 setiosflags(ios::left) :左對齊,取消在前面加re 22 setiosflags(ios::right) :右對齊,取消在前面加re 23 注意 :設置其中一項后,要取消后才能設置另一項,否則無效。 24 */ 25 cout << setiosflags(ios::right); // 右對齊 26 cout << "在右邊:" << setw(20) << p << endl; 27 cout << resetiosflags(ios::right); // 關閉右對齊 28 cout << setiosflags(ios::left); // 左對齊 29 cout << "在左邊:" << setw(20) << p << endl; 30 31 /* setfill(c) 空白填充,需配合setw(n), 位域當中未顯示的填充c字符,如'*'*/ 32 cout << "以下空白填充*:" << setfill('*') << endl; // 空白填充 33 cout << setw(20) << p << endl; 34 cout << resetiosflags(ios::left) << setiosflags(ios::right); // 關閉左對齊,開始右對齊 35 cout << setw(20) << p << endl; 36 37 /* 38 setprecision(5):設置實數有效數據個數或小數個數 39 setiosflags(ios::scientific): 科學計數法輸出,與fix不同時出現,添re+取消設置 40 setiosflags(ios::fixed) :設置浮點數以固定的小數位數顯示,與scientific不同時出現,添re+取消設置 41 setiosflags(ios::uppercase):字母大寫 42 setiosflags(ios::showpos):正數顯示+號 43 */ 44 double fValue = 123.456789; 45 cout << "輸出浮點數:" << fValue << endl; 46 cout << "以下設置一直有效-->" << endl; 47 // 設置輸出實數有效數字個數,包含正數和小數,當以固定形式和科學計數法輸出時,則指有效小數位數 48 cout << "有效數字設為5 :" << setprecision(5) << fValue << endl; 49 cout << "科學計數法輸出 :" << setiosflags(ios::scientific) << fValue << endl; // 以科學計數方式輸出 50 cout << "輸出字母大寫 :" << setiosflags(ios::uppercase) << fValue << endl; // 科學計數字母E和十六進制字母X等輸出大寫 51 cout << "輸出正數添加+號:" << setiosflags(ios::showpos) << fValue << endl; // 輸出正數添加+號 52 cout << "固定小數位數 :" << resetiosflags(ios::scientific) << setiosflags(ios::fixed) ; // 固定實數以小數格式輸出的位數,即設置后有效輸出個數變成有效小數位數 53 cout << setprecision(5) << fValue << endl; 54 55 //cout << setiosflags(ios::shipws) <<" 忽略前導空格" << endl; // 不支持,未驗證 56 57 return 0; 58 }
代碼運行結果: