二、 資料對齊
在使用c++編寫程式的過程中經常需要對資料和資訊的輸出,簡單情況下cout
就可以滿足需求,而在另一些情景下,則需要根據自己的需求標準化、格式化地輸出。比如我之前寫的分析排序演算法執行時間的程式中,需要將不同規模資料的排序時間分行輸出,由於涉及多行資料,在不進行格式化的情況下輸出會很醜,甚至會由於結果呈現的不清晰而影響自己的判斷。當你找到這篇部落格的時候,一定遇到了類似的問題。
首先我們會遇到什麼樣的格式化輸出的需求呢?我認為主要有兩個方面,這裡只講這兩個方面。
比如我想輸出 3.1415926
3.1415926
3.1415
926 保留小數點後4位,可以用下面的方法。
cout << fixed <<
setprecision(4
)<<
3.1415926
;
這個方法可以自動四捨五入。得到的結果是 3.1416
3.1416
3.1416
。拿 314.15926
314.15926
314.15
926 為例,使用下面的語句。
cout << scientific <<
setprecision(4
)<<
314.15926
;
得到的結果是 3.1416e+
0023.1416e+002
3.1416
e+00
2。例如輸出 3.1415926
3.1415926
3.1415
926。
cout <<
setprecision(4
)<<
3.1415926
;
輸出結果為 3.142
3.142
3.142 。
當輸出的浮點數整數字數小於要求的有效位數時,機器會自動四捨五入處理小數部分,當浮點數整數字數大於要求的有效位數時,機器則會將輸出變成科學計數法。例如cout << setprecision(4) << 314159.26 << endl;
的輸出結果是3.142e+
0053.142e+005
3.142e
+005
,而cout << setprecision(4) << 31.415926 << endl;
的輸出則是31.42
31.42
31.42。
一般來說還是直接指定小數點後保留幾位或是指定採用科學記數法比較好,輸出有效位數對於不同資料的輸出結果格式可能是不同的,所以少用。
可以使用setw(n)
,n代表指定的寬度。例如
cout <<
setw(8
)<<
3.1415
;
那麼資料 3.1415
3.1415
3.1415
的輸出寬度就是8。值得注意的是,setw()
不像別的輸出流控制命令,它對cout
的影響是非貪婪的,即只影響下乙個<<
指向的輸出資料。如果要為許多資料設定固定長度,則需要手動的設定好。
當寬度統一而資料本身的寬度並不和設定的寬度相同時,會有多餘的位置空出來,那麼,資料向哪邊對齊呢?在設定了setw(n)
後,預設是右對齊的。我們可以用類似的方法設定其他對其方式。
cout <<
setw(8
)<< left <<
3.1415
;
這個語句可以設定為左對齊。使用類似的<< internal
可以將對齊設定為中對齊,但是中對齊並不是要輸出的資料居中,而是用於填充的字元居中。比如
cout <<
setw(9
)<< internal <<
-3.14
;
其輸出的結果是符號 −
-− 在左邊而資料 3.14
3.14
3.14
在右邊。那麼中間填什麼?或者向兩邊對齊時另一邊填充什麼?這就涉及到接下來要講的填充。
對於設定寬度產生的空位,系統預設使用空格填充,如果自己想使用自定義的填充符號,則需要使用setfill()
。比如
cout <<
setw(8
)<<
setfill
("*"
)<<
3.1415
;
C 格式化輸出
int a 12345678 格式為sring輸出 label1.text string.format asdfadsfadsfasdf a label2.text asdfadsf a.tostring adsfasdf label1.text string.format asdfadsfadsf...
c格式化輸出
printf 函式是格式化輸出函式,一般用於向標準輸出裝置按規定格式輸出資訊。在編寫程式時經常會用到此函式。printf 函式的呼叫格式為 printf 格式化字串 參量表 其中格式化字串包括兩部分內容 一部分是正常字元,這些字元將按原樣輸出,另一部分是格式化規定字元,以 開始,後跟乙個或幾個規定字...
c格式化輸出
一 printf 函式 printf 函式是格式化輸出函式,一般用於向標準輸出裝置按規定格式輸出資訊。在編寫程式時經常會用到此函式。printf 函式的呼叫格式為 printf 格式化字串 參量表 其中格式化字串包括兩部分內容 一部分是正常字元,這些字元將按原樣輸出,另一部分是格式化規定字元,以 開...