C 流格式控制

2021-05-22 15:48:05 字數 3512 閱讀 7520

格式控制

當輸入/輸出的資料沒有指定格式,它們都按預設的格式輸入/輸出。然而,有時需要對資料

格式進行控制。這時需利用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類的成員

描        述

intget( )

讀取並返回乙個字元

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)

讀取規定長度的字串到緩衝區中

intpeek( ) 

返回流中下乙個字元,但不移動文

件指標istream&

seekg(streampos)

移動當前指標到一絕對位址

istream& 

seekg(streampos,seek_dir)

移動當前指標到一相對位址

streampos

tellg( )

返回當前指標

istream&

ignore(int n=1,delim=eof)

跳過流中幾個字元,或直到遇到指定的分界符為止

附:以16進製制形式列印記憶體資料:

#include

#include

using namespace std;

void foo( const void* buf, size_t len );

輸出:00 01 10 ff

77 be 9f 1a 2f dd 5e 40

補充(2008-11-06):

C 輸出流格式控制 iomanip

一 概述 在c 程式裡面經常見到下面的標頭檔案 include 這裡面iomanip的作用比較多 主要是對cin,cout之類的一些操縱運運算元,它是i o流控制標頭檔案。就像c裡面的格式化輸出一樣.以下是一些常見的控制函式的 二 使用 c 的格式化輸出控制,有兩種方式 2.1方式一 setiofl...

C 輸入輸出流格式控制

1.使用控制符控制輸出格式 控制符作用dec 設定整數的基數為10 hex設定整數的基數為16 oct設定整數的基數為8 setbase n 設定整數的基數為n n只能是16,10,8之一 setfill c 設定填充字元c,c可以是字元常量或字元變數 setprecision n 設定實數的精度為...

C 輸入輸出流格式控制

1.使用控制符控制輸出格式 控制符作用dec 設定整數的基數為10 hex設定整數的基數為16 oct設定 整數的基數為8 setbase n 設定整數的基數為n n只能是16,10,8之一 setfill c 設定填充字元c,c可以是字元常量或字元變數 setprecision n 設定實數的精度...