C 輸入 輸出流

2021-04-26 06:41:49 字數 3573 閱讀 4465

一、流低階i/o功能(如無格式的i/o):通常指大量的位元組在裝置到記憶體或記憶體到裝置的簡單傳輸。

高階i/o功能(格式化i/o):它將位元組組合成有意義的單元,如資料型別。

對於大容量檔案的處理,使用無格式的i/o可獲得最佳的效能。

二、成員函式get和getline

不帶引數值成員函式get ,從指定的流中讀取乙個字元(即使是空格),並返回該字元作為該函式的呼叫值。遇到檔案結束時返回eof。

get函式還可以帶3個引數:接收字元的字元型陣列,陣列大小和分隔符(預設

為'/n'),從輸入流中讀取資料時,讀取到比指定的最大字元數少乙個字元中止,或者讀取到指定的分隔符終止。為了使字串陣列(被程式用作緩衝區)中的輸入字串結束,空字元會被插入到字元陣列中。分隔符不會被儲存在陣列中,但仍保留在輸入流中(下乙個要被讀取的字元),所以除非分隔符從輸入流中重新整理,否則緊接著的第二個get操作結果就是空行。

getline函式的操作與帶3個引數的get成員函式類似,讀取一行字串後在字串陣列中插入乙個空格,不同的是getline會從輸入流中刪除分隔符,而不是把它放入陣列。

三、ignore用於跳過指定數量的字元(預設1)或轉到指定的分隔符(預設eof),

在讀取檔案該分隔符可使ignore跳到檔案末尾終止輸入。

putback的作用是把上次從輸入流中通過get取得的字元在放回該輸入流中。對於應用

程式需要掃瞄輸入流以查詢以特定字元開頭的字段來說,非常有用。

peek的功能是返回輸入流一下個字元,而不是從輸入流中刪除該字元。

四、成員函式read,gcount,write的無格式輸入/輸出

read

write專用於處理無格式的輸入/輸出。它們負責把一定量的位元組輸入記憶體的數

組,以及從記憶體陣列中輸出位元組(未被格式化)。

gcount可以統計最後一次輸入操作讀取的字元數。

五、流操縱元

用來完成格式化i/o,諸如設定域寬,設定精度,設定和清除格式化標誌,設定字段填充字元,重新整理流,在輸入流中插入一行並重新整理流,在輸出流中插入空白字元,跳過輸入流的空白字元等功能。

1、 數流基數

dec         oct         hex         setbase(如setbase10)十進位制)

十進位制     八進位制      十六進製制   引數化流操縱元

2、 設定浮點數的精度

精度一旦設定,就可用語以後所有的輸出流操作,直至精度發生變化。

cout.precision( num );

setprecision( num );

3、設定域寬:

setw

width寬度的設定僅使用於下一行的流插入或流讀取,在該次操作完成

之後,寬度就被置回0(即輸出值按照所需的寬度來輸出)不帶引數的width函式返回當前的設定。

六、流格式裝備

各種格式標誌指定了即將在i/o流操作期間執行的格式型別,成員函式setfunsetfflags用語設定控制標誌。

舉例:cout.setf( iso::showpos )指定正負數前要加+和-號

cout.setf( iso::scientific )指定浮點數輸出採用科學記數法

cout.setf( iso::left )

cout.setf( iso::right )左/右對齊輸出

七、流錯誤狀態

ios類中的位可用於測試流的狀態

遇到檔案結束符之後,將為輸出流設定eofbit位。呼叫成員函式來確定是否已經遇到了檔案結束符。

流中發生格式錯誤時,雖然會設定failbit,但字元不會丟失。成員函式fail判斷流操作是否失敗,這種錯誤通常可修復。

發生導致資料丟失的錯誤時,設定dadbit。成員函式bad判斷留操作是否失敗,這種嚴重的錯誤通常不可修復。

如果以上的3狀態沒有設定,則設定goodbit

測試流狀態較好的方法是使用成員函式eofbadfailgood

clear通常用於把乙個流狀態恢復為"good",從而可以對該流繼續執行i/o操作,由於其預設引數ios::goodbit利用語句cin.clear()

例:cin.clear( ios::failbit )為流設定了failbit。

八、把輸出流連接到輸入流

成員函式tie以同步istream和ostream 的操作以保證輸出在輸入之前顯示出來

例:cin.tie( &cout );不過這個c++會自動執行。

inputstream.tie( 0 )解除從輸出流到輸入流的連線

檔案的拷貝:(將to.txt中的內容全部複製到from.txt)

strstreams介紹:

istrstream::istrstream( char* buf );

//取乙個指向零終止符陣列的指標;可以提取位元組直到零為止。

istrstream::istrstream( char* buf, int size );

//可以一直提取位元組到buf[size],而不管是否遇到了乙個零。

ostrstream::ostrstream( char*, int, int = ios::out );

// char*                 是預分配的緩衝區,在那裡字元將結束

// int                     緩衝區的大小

// int = ios::out      模式,如果預設,字元從緩衝區的開始位址格式化。

關於ostrstream,需要記住的一點:沒有為我們插入一般在字元陣列末尾所需要的零終止符。當我們準備好零終止符時,用特別操縱運算元ends。

C 輸入 輸出流

低階i o功能 如無格式的i o 通常指大量的位元組在裝置到記憶體或記憶體到裝置的簡單傳輸。高階i o功能 格式化i o 它將位元組組合成有意義的單元,如資料型別。對於大容量檔案的處理,使用無格式的i o可獲得最佳的效能。不帶引數值成員函式get 從指定的流中讀取乙個字元 即使是空格 並返回該字元作...

C 輸入輸出流

一 c 流的概念 在c 語言中,資料的輸入和輸出 簡寫為i o 包括對標準輸入裝置鍵盤和標準輸 出裝置顯示器 對在外存磁碟上的檔案和對記憶體中指定的字串儲存空間 當然可 用該空間儲存任何資訊 進行輸入輸出這三個方面。對標準輸入裝置和標準輸出設 備的輸入輸出簡稱為標準i o,對在外存磁碟上檔案的輸入輸...

C 輸入輸出流

在看c primer的時候,練習題7.31裡 std istream input std istream in std ostream output std ostream out const 分別是什麼意思啊,看的不是很懂能不能解釋一下 std istream sales item input s...