c++學習之控制符控制輸出格式


在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 }

代碼運行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM