C 標準IO庫 C Primer學習筆記

2021-05-28 10:41:00 字數 2400 閱讀 4759

頭檔案型別

iostream

istream 從流中讀取

ostream 寫到流中去

iostream對流進行讀寫,從istream和ostream派生而來

fstream

ifstream 從檔案中讀取,由istream派生而來

ofstream 寫到檔案中去,由ostream派生而來

fstream 讀寫檔案, 由iostream派生而來

sstream

istringstream從string物件中讀取,由istream派生而來

ostringstream寫到string物件中去,由ostream派生而來

stringstream 對string物件進行讀寫, 由iostream派生而來

到目前為止,所描述的流類讀寫的是由char型別組成的流。此外,標準庫還定義了一組相關的型別,支援wchar_t型別。每個類都加上「w」字首,以此與char型別的版本區分開來。於是,wostream、wistream和wiostream型別從控制視窗讀寫wchar_t資料。相應的檔案輸入輸出類是wifstream、wofstream和wfstream。而wchar_t版本的string輸入/輸出流則是wistringstream、wostringstream和wstirngstream。標準庫還定義了從標準輸入輸出讀寫寬字元的物件。這些物件加上"w"字首,以此與char型別的版本區分:wchar_t型別的標準輸入物件是wcin;標準輸出是wcout;而標準錯誤則是wcerr。

每個io標頭檔案都定義了char和wchar_t型別的類和標準輸入/輸出物件。基於流的wchar_t型別的類和物件在iostream中定義,寬字元檔案流型別在fsteam中定義,而寬字元stringstream則在sstream標頭檔案中定義。

這裡先不說為什麼標準io庫不允許做複製或賦值操作。以後將會查資料補上來。

一、只有支援複製的元素型別可以儲存在vector或其他容器型別裡。由於流物件不能複製,因此不能儲存在vector(或其他)容器中;

二、形參或返回型別也不能為流型別。若需要傳遞或返回io物件,則必須傳遞或返回指向該物件的指標或引用。一般情況下,如果要傳遞io物件以便對它進行讀寫,可用非const引用的方式傳遞這個流物件。對io物件的讀寫會改變它的狀態,因此引用必須是非const的。

io標準庫管理一系列條件狀態成員,用來標記給定io物件是否處於可用狀態,或者碰到了哪種特定的錯誤。標準庫定義的一組函式和標記,提供訪問和操縱流狀態的手段。

strm::iostate     機器相關的整型名,由各個iostream類定義,用於定義條件狀態

strm::badbit     strm::iostate型別的值,用於指出被破壞的流

strm::failbit     strm::iostate型別的值,用於指出失敗的io操作

strm::eofbit     strm::iostate型別的值,用於指出流已經到達檔案結束符

s.eof()              如果設定了流s的eofbit值,則該函式返回true

s.fail()              如果設定了流s的failbit值,則該函式返回true

s.bad()             如果設定了流s的badbit值,則該函式返回true

s.good()           如果流s處於有效狀態,則該函式返回true

s.clear()           將流s中的所有狀態值都重設為有效狀態

s.clear(flag)     將流s中的某個指定條件狀態設定為有效。flag的型別是strm::iostate

s.setstate(flag)  給流s新增指定條件。flag的型別是strm::iostate

s.rdstate()        返回流s的當前條件,返回值型別為strm::iostate

流必須處於無錯誤狀態,才能用於輸入或輸出。檢測流是否可用的最簡單的方法是檢查其真值:

if (cin)    // if 語句直接檢查流的狀態

while (cin >> word)  //while語句則檢測條件表示式返回的流的狀態,若成功輸入,則條件檢測為真

每個io物件管理乙個緩衝區,用於儲存程式讀寫的資料。如有下面的語句:

os << " please enter a value:";

系統將字串字面值儲存在流os關聯的緩衝區中。下面幾種情況將導致緩衝區的內容被重新整理,即寫入到真實的輸出裝置或者檔案:

(1)程式正常結束。作為main返回工作的一部分,將清空所有輸出緩衝區;

(2)在一些不確定的時候,緩衝區可能已經滿了,在這種情況下,緩衝區將會在寫下乙個值之前重新整理;

(3)用操縱符顯式地重新整理緩衝區,例如行結束符endl;

(4)在每次輸出操作執行完後,用unitbuf操縱符設定流的內部狀態,從而清空緩衝區;

(5)可將輸出流與輸入流關聯起來。在這種情況下,在讀輸入流時將重新整理其相關的輸出緩衝區。

C Primer 標準IO庫雜記

trunc 清空 include include includeusing namespace std istream io istream input cout stringstream 物件的乙個常見用法是,需要在多種資料型別之間實現自動 格式化時使用該類型別。例如,有乙個數值型資料集合,要獲取...

《C Primer4》附錄 標準庫io庫的使用

1 輸出為bool型別格式為true和false,需要使用cout boolalpha,取消bool字母格式輸出使用 cout 2 將整型int i 10,按各種進製輸出的格式如下 八進位制輸出 cout 如果輸出需要帶上標記 0,0x 需要宣告為 cout showbase hex i 如果標記大...

C Primer學習札記 標準bitset庫

一 標準庫bitset型別 標準庫提供bitset類來進行位集的處理,同其他的一些標準庫一樣,要使用bitset類就必須包含系相關標頭檔案 includeusing std bitset 二 bitset物件的定義和初始化 bitsetb b有n位,每位都為0 bitsetb u b是乙個unsig...