格式控制
在前面,輸入/輸出的資料沒有指定格式,它們都按預設的格式輸入/輸出。然而,有時需要對資料格式進行控制。這時需利用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) |
讀取規定長度的字串到緩衝區中 |
int |
peek( ) |
返迴流中下一個字元,但不移動檔案指標 |
istream& |
seekg(streampos) |
移動當前指標到一絕對位址 |
istream& |
seekg(streampos,seek_dir) |
移動當前指標到一相對位址 |
streampos |
tellg( ) |
返回當前指標 |
istream& |
ignore(int n=1,delim=EOF) |
跳過流中幾個字元,或直到遇到指定的分界符為止 |