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...