原文地址:http://wonderow.cnblogs.com/archive/2005/06/21/178719.html
格式控制
???
在前面,輸入/輸出的數據沒有指定格式,它們都按缺省的格式輸入/輸出。然而,有時需要對數據
格式進行控制。這時需利用ios類中定義的格式控制成員函數,通過調用它們來完成格式的設置。ios類的格式控制函數如下所示:
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。這時插入操作能按表示數
據的最小寬度顯示數據。?
|
預定義的操縱算子
??? 使用成員函數控制格式化輸入輸出時,每個函數調用需要寫一條語句,尤其是它不能用在插入或提取運算符的表達式中,而使用操縱算子,則可以在插入和提取運算符的表達式中控制格式化輸
入和輸出。在程序中使用操縱算字必須嵌入頭文件
iomanip.h
dec
|
十進制的輸入輸出
|
hex
|
十六進制的輸入輸出
|
oct ?
|
八進制的輸入輸出
|
ws ?
|
提取空白字符
|
ends ?
|
輸出一個nul字符
|
endl
|
?
輸出一個換行字符,同時刷新流
|
flush
|
刷新流
|
resetiosflags(long)
|
請除特定的格式標志位
|
setiosflags(long)
|
設置特定的格式標志位
|
setfill(char)
|
設置填充字符
|
setprecision(int)
|
設置輸出浮點數的精確度
|
setw(int)
|
設置域寬格式變量
|
其它流函數
錯誤處理
??? 在對一個流對象進行I/O操作時,可能會產生錯誤。當錯誤發生時,錯誤的性質被記錄在ios類的一個數據成員中。
ios類中定義的描述錯誤狀態的常量:
goodbit
?
|
沒有錯誤,正常狀態
eofbit
到達流的結尾??
|
failbit
|
I/O操作失敗,清除狀態字后,可以對流繼續進行操作。
|
badbit
|
試圖進行非法操作,清除狀態字后,流可能還可以使用。
|
hardfail
|
致命錯誤,不可恢復的錯誤。
|
ostream類的成員函數
流的其它成員函數可以從流中讀取字符或字符串,對流進行無格式化的輸入 輸出操作,以及直接控制對流的I/O操作。
返回類型
|
ios類的成員
|
描 述
|
ostream*
|
tie(ostream*)
|
?? 將當前流與指定的輸出流連接起來。每當需要 讀取當前流時,連接的流會自動刷新。C++流庫已用cin.tie(cout)將輸入流與輸出流連接
起來。要取消與輸出流的連接可采用is.tie(0)
|
ostream*
|
tie( )
|
返回指向連接流的指針
|
返回類型
|
ostream類的成員
|
描 述
|
ostream&
|
put(char ch)
|
向流中輸出一個字符ch,不進行任何轉換
|
ostream&
|
write(char*,int)
|
向流中輸出指定長度的字符串,不進行轉換
|
ostream&?
|
flush( )
|
刷新流,輸出所有緩沖的但還未輸出的數據
|
ostream&
|
seekp(streampos)
|
移動流的當前指針到給定的絕對位置
|
ostream&
|
seekp(sereamoff,seek_dir)
|
流的當前指針類似與文件的當前指針
|
streampos
|
teelp( )
|
返回流的當前指針的絕對位置
|
istream類的成員函數
返回類型
|
istream類的成員
|
描 述
|
int
|
get( )
|
讀取并返回一個字符
|
istream&
|
get(char&c)
|
讀取字符并存入c中
|
istream&
|
get(char*ptr,int len,char delim='')
|
讀取指定的字符到緩沖區中,直到遇到指定的分界符為止,分界符不填入緩沖區。
|
istream&
|
getline(char*ptr,int
len,char delim='')
|
與get(char*ptr,int len,chardelim ='') 類似,但將分界符填
入緩沖區。
|
istream&
|
putback( )
|
將最近讀取的字符放回流中
|
istream&
|
read(char*,int)
|
讀取規定長度的字符串到緩沖區中 函數gcount()返回讀取的字節數
|
int
|
peek( )?
|
返回流中下一個字符,但不移動文
件指針
|
istream&
|
seekg(streampos)
|
移動當前指針到一絕對地址
|
istream&?
|
seekg(streampos,seek_dir)
|
移動當前指針到一相對地址
|
streampos
|
tellg( )
|
返回當前指針
|
istream&
|
ignore(int n=1,delim=EOF)
|
跳過流中幾個字符,或直到遇到指定的分界符為止
|
getch()函數用于從鍵盤輸入一個字符,不回顯,包含頭文件<conio.h>中