第8章 標準IO庫

2021-06-17 23:01:18 字數 2742 閱讀 7523

iostream繼承層次:istream和ostream是最上層,istream派生出ifstream和istringstream,ostream派生出ofstream和ostringstream。他們兩者共同派生出iostream。iostream派生出stringstream和fstream。

標準庫型別不允許做複製或賦值操作。導致的現象:(1)如切記這個定義不能定義在main中,要為全域性變數àofstream out1,out2;out1=out2;則是不可以的。將out2傳遞給print(ofstream);函式也是不可以的。由於流物件不能複製,因此不能儲存在vector(或其他)容器中。

(2)形參或返回型別也不能為流型別,要傳遞或返回,必須傳遞或返回指向該物件的指標或引用。如:ofstream &print(ofstream&){}。或ofstream *print(ofstream*){}

io標準庫的條件狀態:(1)strm::iostate,由各個iostream類定義,用於定義條件狀態;(2)strm::badbit,strm::iostate型別的值,用於指出被破壞的流;(3)strm::failbit,strm::iostate型別的值,用於指出失敗的io操作;上述三個為特定的位模式,可用於位操作符;(4)strm::eofbit,strm::iostate型別的值,用於指出流已經達到檔案結束符;

流方法:(1)s.good()如果流s處於有效狀態,該函式返回true。(2)cin.rdstate()能讀取流當前的狀態,返回乙個iostate型別的值。

流必須處於無錯狀態才能用於輸入或輸出,如(1)if(cin)//直接檢查流的狀態;(2)while(cin>>word)//檢測條件表示式返回的流,從而間接地檢查了流的狀態。

多狀態的處理:可以這麼做,如:is.setstate(ifstream::badbit |ifstream::failbit);

緩衝區內容被重新整理的情況:(1)程式正常結束;(2)在一些不確定的時候,緩衝區可能已經滿了;(3)用操縱符顯示地重新整理緩衝區,如endl;(4)在每次輸出操作執行完後,用unitbuf操縱符設定流的內部狀態,從而清空緩衝區;(5)可將輸出流與輸入流關聯(tie)起來。這種情況,在讀輸入流時將重新整理其關聯的輸出緩衝區。

程式崩潰了,不會重新整理緩衝區。

flush用於重新整理流,但與endl不同在於不新增任何字元;ends在緩衝區插入空字元null,然後重新整理它,即cout<<1<<」output」<將輸出和輸入**在一起:感覺沒多大意思···如,cin.tie(&cout);…cin.tie(0);//呼叫tie傳遞0表示打破該流上存在的**。

標頭檔案是fstream。如輸入檔案:ofstream/ifstream infile(ifile.c_str());//ifile是希望讀寫的檔名的string物件。或者寫法為ofstream outfile;再用outfile.open(「out.txt」);。開啟檔案後,檢查開啟是否成功(這種習慣要養成)。if(!outfile)

如果outfile要關聯其他的檔案,則要先關閉原先的文字,再開啟另乙個檔案。

如果打算重用已存在的流物件,那麼while迴圈必須在每次迴圈時記得關閉(close())和清空(clear())檔案流。這邊關閉和清空順序隨意~。

ofstream物件指定out模式等效於同時指定

out和

trunc

預設情況下,fstream物件以in和out模式同時開啟。當檔案同時以in和out開啟時不清空。

標頭檔案為sstream。

stringstream特定的操作:(1)stringstream strm;建立自由的stringstream物件;(2)stringstream strm(s);建立儲存s的副本的stringstream物件,其中s

是string

型別的物件(不能用字串字面值直接進行賦值···如strm(「hello」)是錯誤的);(3)strm.str();建立strm中儲存的string型別物件;(4)strm.str(s);將string型別的s複製給strm,返回void。這邊可以用字串字面值,如

strm.str(「word」);

是可以的。

有些處理基於每行實現(getline可以實現),而其他處理則要操縱每行中每個單詞(每次乙個單詞可以cin>>string型別變數),可借助stringstream物件實現,如:

string line,word;

while(getline(cin,line))

}stringstream提供的轉換和/或格式化,如:

int val1 = 512,val2 = 1024;

ostringstreamformat_message;

format_message << "val1: "

<< val1 <<"\n"

<< "val2:"

<< val2 << "\n";

istringstreaminput_istring(format_message.str());

string dump1,dump2;

input_istring >> dump1 >>val1 >> dump2 >>val2;//注意這邊的順序,相當於輸入了

format_message.str()

,即輸入

val1:512\nval2:1024

。這邊\n

沒關係,就好比cin>>s1>>s2>>s3>>s4;

你輸入各種回車,都是忽略的。

cout<"--"

《當i=0時:

cout《為210,網上說跟編譯器有關,無需太糾結

cout<<++i<<++i<<++i<

第8章 標準IO庫 2

8.2 條件狀態 io標準庫管理一系列條件狀態 condition state 成員,用來標記給定的io物件是否處於可用狀態,或者碰到了哪種特定的錯誤。strm iostate 機器相關的整型名,由各個iostream類定義,用於定義條件狀態。strm badbit strm iostate型別的值...

第8章 標準IO庫 6

8.5 字串流 iostream標準庫支援記憶體中輸入 輸出,只要將流與儲存在程式記憶體中的string物件 起來即可。此時,可使用iostream輸入和輸出操作符讀寫這個string物件。標準庫定義了三種型別的字串流 istringstream,由istream派生而來,提供讀string的功能。...

第5章 標準I O庫

當開啟乙個流時,標準i o函式fopen返回乙個指向file物件的指標。該物件通常是乙個結構,它包含了標準i o庫為管理該流所需要的所有資訊,包括 用於實現i o的檔案描述符 指向用於該流緩衝區的指標 緩衝區的長度 當前在緩衝區中的字元數以及出錯標誌等等。應用程式沒有必要檢驗file物件。對乙個程序...