C Primer筆記 第八章 IO庫

2021-10-19 10:54:24 字數 3065 閱讀 1512

從本章節開始進入第二部分:c++標準庫!

(開始艱難起來了orz)

檔案輸入和輸出

string流

(舉例:包含iostream標頭檔案後還需要寫using std::cin;

(要是圖省事就用using namespace std;

c++標準io庫:

注:每個型別還有對應的寬字元版本(定義在同一標頭檔案中,如ifstream對應wifstream型別)

型別ifstreamistringstream都**繼承**自istream,因此,我們可以像使用istream一樣使用ifstreamistringstream(如像cin一樣用<<操作這些型別的物件)。ostream也是類似的。

乙個流一旦發生錯誤,其上後續的操作都會失敗。因此,**在使用乙個流之前應該檢查它是否處於良好狀態。最簡單的方法是把流物件當作乙個條件來使用:

while (cin >> word)

上述方式相當於使用!cin.fail()當作條件。除此以外,bad()表示系統級錯誤,eof()表示到達檔案末尾。

流物件的rdstate成員返回乙個iostate值,對應當前流的狀態。io庫定義了四個iostateconstexpr值:badbiteofbitfailbitgoodbit

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使用inout模式。

ofstream out1(filename); //清除檔案內容

ofstream out3;

把字串看作是檔案。

標頭檔案sstream定義了三個型別來支援記憶體io:istringstreamstring資料,ostringstreamstring資料,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庫定義了讀寫內建型別值的操作。此外...