C primer 學習筆記(第八章)

2021-10-07 18:33:42 字數 2558 閱讀 3332

c++使用標準庫類處理輸入和輸出:

所有這些類都是通過繼承相互關聯的。輸入類繼承了istream,輸出類繼承了ostream。因此,可在istream物件上執行的操作同樣適用於ifstream或istringstream物件。而繼承ostream的輸出類也是類似的。

所有io物件都有一組條件狀態,用來指示是否可以通過該物件進行io操作。如果出現了錯誤(例如遇到檔案結束符)物件的狀態將標誌無法再進行輸入,直到修正了錯誤為止。標準庫提供了一組函式設定和檢查這些狀態。

物件導向的標準庫

條件狀態

io 標準庫管理一系列條件狀態(condition state)成員,用來標記給定的 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)    // ok to use cin, it is in a valid state

while (cin >> word) // ok: read operation successful ...

//if 語句直接檢查流的狀態,而 while 語句則檢測條件表示式返回的流,從而間接地檢查了流的狀態。如果成功輸入

//條件檢測為 true。

輸出緩衝區的管理

每個io 物件管理乙個緩衝區,用於儲存程式讀寫的資料;

下面幾種情況將導致緩衝區的內容被重新整理,即寫入到真實的輸出裝置或者檔案:

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

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

操縱符顯式地重新整理緩衝區,例如行結束符 endl。

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

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

檔案的輸入和輸出

檔案模式

in開啟檔案做讀操作

out開啟檔案做寫操作

在每次寫之前找到檔案尾

ate開啟檔案後立即將檔案定位到檔案尾

trunc

開啟檔案時清空已存在的檔案流

binary

以二進位制模式進行io操作

in模式只能用於指定與ifstream或fstream物件關聯的檔案;

所有檔案都能以ate和binary模式開啟;

為ofstream物件指定out模式等效於同時指定了out和trunc模式;

字串流

三種型別:

istringstream, 由istream派生而來,提供讀string的功能

ostringstream, 由ostream派生而來,提供寫string的功能

stringstream, 由iostream派生而來,提供讀寫string的功能

stringstream strm;

建立自由的stringstream物件

stringstream strm(s);

建立儲存s的副本的stringstream物件,其中s是string型別的物件

strm.str()

返回strm中儲存的string型別物件

strm.str(s)

將string型別的s複製給strm,返回void

C primer 學習筆記 第八章 IO庫

io庫型別和標頭檔案 頭檔案型別iostream 流 istream,wistream從流讀取資料 ostream,wostream向流寫入資料 iostream,wiostream讀寫流 fstream 檔案 ifstream,wifstream從檔案讀取資料 ofstream,wofstream...

C Primer 學習筆記 第八章 IO庫

io類 到目前為止,我們已經使用過的io型別和物件都是操縱char資料的。預設情況下,這些物件都是關聯使用者的控制台視窗的。當然,我們不能限制實際應用程式僅從控制台視窗進行io操作,應用程式常常需要讀寫命名檔案。而且,使用io操作處理string 中的字元會很方便。此外,應用程式還可能讀寫需要寬字元...

C Primer 筆記 第八章 IO庫

io物件無拷貝和賦值。unitbuf 使接下來每次輸出操作後都重新整理緩衝區,之後用 nounnitbuf 取消。輸入流與輸出流關聯時,任何試圖從輸入流讀取資料的操作都會重新整理它所關聯的輸出流。ostream old cin.tie nullptr 這句語句將 cin 原來關聯的輸出流存入 old...