c++語言不直接處理輸入輸出,使用標準庫來處理面向流的輸入和輸出。
- iostream處理控制台io
- fstream處理命名檔案i
- stringstream完成記憶體string的io
類fstream和stringstream繼承自類iostream,輸入類繼承自istream,輸出類繼承自ostream。
每個io物件都維護一組條件狀態,用來指出物件是否可以進行io操作。標準庫提供了一組函式,用來設定和檢測這些狀態。
術語:條件狀態 檔案模式 檔案流 字串流
三個標頭檔案:
1. iostream
istream wistream 從流中讀取資料
ostream wostream 向流中寫入資料
iostream wiostream 讀寫流
2. fstream
3. stringstream
注意,標準庫中也定義了一組型別和物件來草種wchar_t(寬字元)型別的資料。
io物件無拷貝或賦值
不能拷貝或對io物件賦值,進行io操作的函式通常是以引用方式傳遞和返回流,讀寫io物件會改變它的狀態所以傳遞和返回的引用不能是const的。
條件狀態
乙個流一旦發生錯誤,其上後續的io操作都會失敗,在**通常應該在使用乙個流之前檢查它是否處於良好的狀態。
while (cin>>word)//ok 讀操作成功
io類中定義了一些函式和標識,可以幫助我們查詢和管理流的條件狀態。
strm::iostate //提供了表達流狀態的完整功能,應作為乙個為集合來使用,與位運算子一起使用可以一次性檢測多個標誌位
strm::badbit //流已經崩潰 (系統級錯誤)
strm::failbit //流操作失敗
strm::eofbit //流達到了檔案結束
strm::goodbit //劉偉處於錯誤狀態
s.eof()//若流的eofbit置位則返回true
s.fail()
s.good()
s.clear()//將流的所有條件狀態位復位,將流的狀態設定為有效。
s.clear(flags)
s.setstate(flags)
s.rdstate()
cin.clear(cin.rdstate()&~cin.failbit&~cin.batbit);
//復位failbit和badbit位 其他位保持不變
管理輸出緩衝
每個輸出流都管理乙個緩衝區,用來儲存程式讀寫的資料。
重新整理輸出緩衝區:
endl 換行 重新整理
flush 重新整理
ends 空字元 重新整理
unitbuf 每次寫操作後都進行一次flush
nounitbut 回到正常緩衝方式
*如果程式崩潰,輸出緩衝區不會被重新整理
標頭檔案:fstream
三個型別:ifstream ofstream fstream
除繼承自iostream型別的行為fstream增加了新的成員管理與流關聯的檔案
fstream fstrm;
fstream fstrm(s);
fstream fstrm(s,mode);
fstrm.open(s);
fstrm.close();
fstrm.is_open();
檔案模式in
%讀方式開啟
out %寫方式開啟
ate %開啟檔案後立即定位到檔案末尾
trunc
%截斷檔案
binary %以二進位制方式進行io
ate 和binary模式可用於任何型別的檔案流物件,可以與其他型別模式組合使用。
標頭檔案:sstream
三個型別:istringstream ostringstream stringstream
sstream
strm;
sstream
strm(s); % strm是乙個sstream的物件,儲存strings s的乙個拷貝
strm.str(); % 返回strm所儲存的string考辦
strm.str(s); % 將string s拷貝到strm中
第八章 IO庫
由於不能拷貝 io 物件,因此我們也不能將形參或返回型別設定為流型別。進行 io 操作的函式通常以引用方式傳遞和返回流。讀寫乙個 io 物件會改變其狀態,因此傳遞和返回的引用不能是 const 導致緩衝區重新整理 即,資料真正寫到輸出裝置或檔案 的原因 程式正常結束,作為 main 函式的 retu...
第八章 IO庫
表8.1是標準庫中的這些io型別和標頭檔案 為支援寬字元語言,標準庫定義的io類也可操縱wchar t型別資料,它對應的型別和函式名以w開始 裝置型別和字元寬度不會影響io操作,例如 運算子對控制台視窗 檔案 字串都可用,對char和wchar t也可用 通過繼承,標準庫可忽略這些不同裝置和不同字元...
C primer 學習筆記 第八章 IO庫
io庫型別和標頭檔案 頭檔案型別iostream 流 istream,wistream從流讀取資料 ostream,wostream向流寫入資料 iostream,wiostream讀寫流 fstream 檔案 ifstream,wifstream從檔案讀取資料 ofstream,wofstream...