C 輸入 輸出流

2021-05-22 10:02:25 字數 3263 閱讀 7374

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

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

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

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

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

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

用於跳過指定數量的字元(預設1)或轉到指定的分隔符(預設eof),在讀取檔案該分隔符可使ignore跳到檔案末尾終止輸入。

putback的作用是把上次從輸入流中通過get取得的字元在放回該輸入流中。對於應用程式需要掃瞄輸入流以查詢以特定字元開頭的字段來說,非常有用。

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

read

write專用於處理無格式的輸入/輸出。它們負責把一定量的位元組輸入記憶體的陣列,以及從記憶體陣列中輸出位元組(未被格式化)。

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

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

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

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

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

cout.precision( num );

setprecision( num );

setw

width寬度的設定僅使用於下一行的流插入或流讀取,在該次操作完成之後,寬度就被置回0(即輸出值按照所需的寬度來輸出)不帶引數的width函式返回當前的設定。

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

舉例: 

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

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

cout.setf( iso::left )

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

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

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

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

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

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

測試流狀態較好的方法是使用成員函式eof,bad,fail,good

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)

view plaincopy to clipboardprint?

ifstream in("to.txt");  

assert(in);  

ofstream out("from.txt");  

assert(out);  

out << in.rdbuf() ;  

ifstream in("to.txt");

assert(in);

ofstream out("from.txt");

assert(out);

out << in.rdbuf() ;

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 輸入輸出流

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

C 輸入 輸出流

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

C 輸入輸出流

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