inline SMANIP(long) resetiosflags(long _l) { return SMANIP(long)(__resetiosflags, _l); }
inline SMANIP(int) setfill(int _m) {return SMANIP(int)(__setfill, _m); }
inline SMANIP(long) setiosflags(long _l) {return SMANIP(long)(__setiosflags, _l); }
inline SMANIP(int) setprecision(int _p) {return SMANIP(int)(__setprecision, _p); }
inline SMANIP(int) setw(int _w) { return SMANIP(int)(__setw, _w); }ios
//他們都是inline 內聯函數函數
(1)setw(int n) 預設輸出寬度指針
如:cout<<setw(6)<<123<<endl;blog
輸出結果爲「 123」,在123的前面會有3個空格,123右對齊。ip
(2)setfill(char c) 預設填充字符ci
如:cout<<setfill(‘#’)<<123<<endl;io
輸出顯示結果爲「###123」,123右對齊,在前面填充3個’#’ 。stream
(3)setbase(int n) 預設整數輸出進制程序
如:cout<<setbase(8)<<255<<endl;static
輸出顯示結果爲377
(4)setprecision(int n) 用於控制輸出流顯示浮點數的精度,整數n表明顯示的浮點數數字的個數。示例程序以下:
#include <iostream.h>
#include <iomanip.h> //格式控制
void main()
{
double amount = 22.0/7;
cout <<amount <<endl; //(1)
cout <<setprecision(0) <<amount <<endl //(2)
<<setprecision(1) <<amount <<endl //(3)
<<setprecision(2) <<amount <<endl //(4)
<<setprecision(3) <<amount <<endl //(5)
<<setprecision(4) <<amount <<endl; //(6)
cout <<setiosflags(ios::fixed);
cout <<setprecision(8) <<amount <<endl; //(7)
cout <<setiosflags(ios::scientific)<<amount<<endl; //(8)
cout <<setprecision(6);
}
第1行輸出數值以前沒有設置有效位數,因此用流的有效位數默認設置值6:第2個輸出設置了有效位數0,C++最小的有效位數爲1,因此做爲有效位數設置爲1來看待:第3~6行輸出按設置的有效位數輸出。 第7行輸出是與setiosflags(ios::fixed)合用。因此setprecision(8)設置的是小數點後面的位數,而非所有數字個數。 第8行輸出用setiosflags(ios::scientific)來表示指數表示的輸出形式。其有效位數沿用上次的設置值8。在用指數形式輸出時,setprecision(n)表示小數位數。 (但是這個指數形式的輸出我用VC6沒有運行出來)。
setw(int _w)講解
<< setw(int _w) << 輸出位寬
如<< setw(7) << 1000 輸出結果爲 "1000 "(緊跟三個空格)
而如<< setw(3) << 1000 位寬小於原來的數字的位寬 那麼按照原來的格式輸出"1000" 先後無空格
setfill() 講解
setfill(int _m) 隨setw(int _w)一塊兒使用 意思是在set(int _w)設定後的空格填充指定的字符
注意setfill裏邊的參數是int _m 是個整數 因此 若是咱們要用空格來填充*號的時候
要使用setfill('*')[字符] 而不是setfill(*)
C++中tellp()函數與tellg()函數
tellp()函數用來獲取「輸出指針」的當前位置(從文件首到當前位置的字節數);
tellg()函數用來獲取「讀入指針」的當前位置(從文件首到當前位置的字節數)。
轉!!!http://ghyan1208.blog.163.com/blog/static/1628666762011589311449/