C++輸入輸出流格式控制[轉]


cout標准輸出流常用控制格式 

使用這些格式需要聲明包含<iomainip>

long flags( ) const 返回當前的格式標志。
long flays(long newflag) 設置格式標志為newflag,返回舊的格式標志。
long setf(long bits) 設置指定的格式標志位,返回舊的格式標志。
long setf(long bits,long field)將field指定的格式標志位置為bits,返回舊的格式標志
long unsetf(long bits) 清除bits指定的格式標志位,返回舊的格式標志。
long fill(char c) 設置填充字符,缺省條件下是空格。
char fill( ) 返回當前填充字符。
int precision(int val) 設置精確度為val,控制輸出浮點數的有效位,返回舊值。
int precision( ) 返回舊的精確度值。
int width(int val) 設置顯示數據的寬度(域寬),返回舊的域寬。
int width( )只返回當前域寬,缺省寬度為0。這時插入操作能按表示數據的最小寬度顯示數據
dec 十進制的輸入輸出
hex 十六進制的輸入輸出
oct 八進制的輸入輸出
ws 提取空白字符
flush 刷新流
resetiosflags(long) 請除特定的格式標志位
setiosflags(long) 設置特定的格式標志位
setfill(char) 設置填充字符
setprecision(int) 設置輸出浮點數的精確度
setw(int) 設置域寬格式變量

 

 

 

C++輸入輸出流格式控制

 

1.使用控制符控制輸出格式

 

控制符 作用
dec 設置整數的基數為10
hex 設置整數的基數為16
oct 設置 整數的基數為8
setbase(n) 設置整數的基數為n(n只能是16,10,8之一)
setfill(c) 設置填充字符c,c可以是字符常量或字符變量
setprecision(n) 設置實數的精度為n位。在以一般十進制小數形式輸出時,n代表有效數字。在以fixed(固定小數位 數)形式和scientific(指數)形式輸出時,n為小數位數。
setw(n) 設置字段寬度為n位。
setiosflags(ios::fixed) 設置浮點數以固定的小數位數顯示。
setiosflags(ios::scientific) 設置浮點數以科學計數法(即指數形式)顯示。
setiosflags(ios::left) 輸出數據左對齊。
setiosflags(ios::right) 輸出數據右對齊。
setiosflags(ios::shipws) 忽略前導的空格。
setiosflags(ios::uppercase) 在以科學計數法輸出E和十六進制輸出字母X時,以大寫表示。
setiosflags(ios::showpos) 輸出正數時,給出“+”號。
resetiosflags 終止已設置的輸出格式狀態,在括號中應指定內容。

 

2.用流對象的 成員控制輸出格式

 

流成員函數 與之作用相同的控制符 作用
precision(n) setprecision(n) 設置實 數的精度為n位。
width(n) setw(n) 設置字段寬度為n位。
fill(c) setfill(c) 設置填充字符c。
setf( ) setiosflags( ) 設置輸出格式狀態,括號中應給出格式狀態,內容與控制符setiosflags括號中內容相同。
ubsetf( ) resetiosflags( ) 終止已設置的輸出格式狀態。

 

cout.width(10); 
cout.setf(ios::hex);

 

3.設置格式狀態的格式標志

 

格式標志 作用
ios::left 輸出數據在本域寬范 圍內左對齊
ios::right 輸出數據在本域寬范圍內右對齊
ios::internal 數值的符號位在域寬內左對齊,數值右對齊,中間由填充字符填充
ios::dec 設置整數的基數為10
ios::oct 設置整數的基數為8
ios::hex 設置整數的基數為16
ios::showbase 強制輸出整數的基數(八進制以0打頭,十六進制以0x打頭)
ios::showpoint 強制輸出浮點數的小點和尾數0
ios::uppercase 在以科學計數法輸出E和十六進制輸出字母X時,以大寫表示
ios::showpos 輸出正數時,給出“+”號。
ios::scientific 設置浮點數以科學計數法(即指數形式)顯示
ios::fixed 設置浮點數以固定的小數位數顯示
ios::unitbuf 每次輸出后刷新所有流
ios::stdio 每次輸出后清除 stdout,stderr

 

以小數形式,保留三位小數輸出: 
cout<<setprecision(3)<<setiosflags(ios::fixed)<<3.1415926<<endl;

 

 

C++輸出流的格式控制setw()、setfill()、setbase()、setprecision()、tellp...

 

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); }

 

 

 

 

 

//他們都是inline 內聯函數

 

 

 

(1)setw(int n) 預設輸出寬度

 

如:cout<<setw(6)<<123<<endl;

 

輸出結果為“   123”,在123的前面會有3個空格,123右對齊。

 

 

 

(2)setfill(char c) 預設填充字符

 

如:cout<<setfill(‘#’)<<123<<endl;

 

輸出顯示結果為“###123”,123右對齊,在前面填充3個’#’ 。

 

 

 

(3)setbase(int n) 預設整數輸出進制

 

如:cout<<setbase(8)<<255<<endl;

 

輸出顯示結果為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()函數用來獲取“讀入指針”的當前位置(從文件首到當前位置的字節數)。

 

 


免責聲明!

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



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