從本章節開始進入第二部分:c++標準庫!
(開始艱難起來了orz)
檔案輸入和輸出
string流
(舉例:包含iostream
標頭檔案後還需要寫using std::cin;
)
(要是圖省事就用using namespace std;
)
c++標準io庫:
注:每個型別還有對應的寬字元版本(定義在同一標頭檔案中,如ifstream
對應wifstream
型別)
型別ifstream
和istringstream
都**繼承**自istream
,因此,我們可以像使用istream
一樣使用ifstream
和istringstream
(如像cin
一樣用<<
操作這些型別的物件)。ostream
也是類似的。
乙個流一旦發生錯誤,其上後續的操作都會失敗。因此,**在使用乙個流之前應該檢查它是否處於良好狀態。最簡單的方法是把流物件當作乙個條件來使用:
while (cin >> word)
上述方式相當於使用!cin.fail()
當作條件。除此以外,bad()
表示系統級錯誤,eof()
表示到達檔案末尾。
流物件的rdstate
成員返回乙個iostate
值,對應當前流的狀態。io庫定義了四個iostate
的constexpr
值:badbit
、eofbit
、failbit
、goodbit
。
clear
不接受引數的版本清除所有錯誤位。接受引數的版本接收乙個iostate
值,表示新的流狀態:
cin.clear(); //使cin有效
//復位cin的failbit位,其他位保持不變
cin.clear(cin.rdstate() & ~cin.failbit);
輸出時,輸出內容可能立即被列印出來,也可能被儲存在緩衝區中,隨後再列印。
導致緩衝重新整理的原因:
警告:如果程式崩潰,輸出緩衝區可能不會被重新整理,所輸出的資料可能還停留在緩衝區等待列印!這就是為什麼我們要在除錯輸出的語句後面加上endl!標頭檔案
fstream
定義了三個型別來支援檔案io:ifstream
讀資料,ofstream
寫資料,fstream
讀寫資料。
利用io類的繼承關係,我們可以使用多型。如:在呼叫有&ostream
引數的函式時,我們可以傳遞給它乙個ofstream
物件。
開啟檔案有兩種方式:
如果呼叫//方式一:infile可以是string,也可以是c風格字元陣列
ifstream in(ifile);
//方式二:
ofstream out;
out.open(ifile" + ".copy");
//檢查open是否成功
if (out)
open
失敗,failbit
會被置位。進行開啟檔案是否成功的檢測是乙個好習慣。
為了將流關聯到另乙個檔案,必須首先關閉已關聯的檔案。
in.close(); //關閉檔案
in.open(ifile + "2"); //開啟另乙個檔案
當乙個檔案流物件被銷毀(離開其作用域)時,與之關聯的檔案會被自動關閉,即close
會被自動呼叫!(例如,在迴圈裡定義乙個ifstream
物件,則每次迴圈都會被建立和自動銷毀)
把命令列控制台當成是檔案。預設情況下,
ifstream
使用in模式,ofstream
使用out
模式,fstream
使用in
和out
模式。
ofstream out1(filename); //清除檔案內容
ofstream out3;
把字串看作是檔案。標頭檔案
sstream
定義了三個型別來支援記憶體io:istringstream
從string
讀資料,ostringstream
向string
寫資料,stringstream
則支援雙向操作。
特有操作:
當我們的工作是對整行進行處理,幷包括處理行內的單個單詞時,通常可以使用istringstream
。
相當於把一行struct personinfo ;
//將控制台輸入的姓名和**號碼(可能乙個人有多個)資訊儲存到結構體陣列中
string line, word;
vectorphonelist;
while (getline(cin,line))
string
資訊作為控制台資訊進行讀寫。 C Primer 筆記 第八章 IO庫
io物件無拷貝和賦值。unitbuf 使接下來每次輸出操作後都重新整理緩衝區,之後用 nounnitbuf 取消。輸入流與輸出流關聯時,任何試圖從輸入流讀取資料的操作都會重新整理它所關聯的輸出流。ostream old cin.tie nullptr 這句語句將 cin 原來關聯的輸出流存入 old...
c primer 第八章 IO庫
1.常用的io庫設施 istream型別,提供輸入操作 ostream型別,提供輸出操作 cin,乙個istream物件,從標準輸入讀資料 cout,乙個ostream物件,向標準輸出寫入資料 cerr,乙個ostream物件,向標準錯誤寫資訊。從乙個istream物件讀資料 向乙個ostream物...
C Primer 第八章 IO庫
1.3 管理輸出緩衝 2.檔案輸入輸出 2.2 檔案模式 3.string 標準庫的核心就是很多容器和一族泛型演算法,這些設施幫助我們編寫簡潔高效的程式。標準庫會關注那些薄記操作的細節,特別是記憶體管理,這樣我們的程式就可以將全部的注意力投入到需要解決的問題上。io庫定義了讀寫內建型別值的操作。此外...