午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

c++標(biāo)準(zhǔn)IO庫(kù)簡(jiǎn)介

 Knowledge Source 2011-05-05

簡(jiǎn)介:

      c++的輸入/輸出(input/output)由標(biāo)準(zhǔn)庫(kù)提供.標(biāo)準(zhǔn)庫(kù)定義了一族類(lèi)型,支持對(duì)文件和控制窗口等設(shè)備的讀寫(xiě).還定義了其他的一些類(lèi)型,使string對(duì)象能夠像文件一樣操作,從而使我們無(wú)須IO就能實(shí)現(xiàn)數(shù)據(jù)與字符之間的轉(zhuǎn)換.這些IO類(lèi)型都定義了如何讀寫(xiě)內(nèi)置數(shù)據(jù)類(lèi)型的值.

組成:

      IO類(lèi)型在三個(gè)獨(dú)立的頭文件中定義:iostream定義讀寫(xiě)控制窗口的類(lèi)型,fstream定義讀寫(xiě)已命名文件的類(lèi)型,sstream所定義的類(lèi)型用于讀寫(xiě)存儲(chǔ)在內(nèi)存中的string對(duì)象.1列出了c++IO類(lèi),2闡明這些類(lèi)型之間的繼承關(guān)系.

條件狀態(tài):

      實(shí)現(xiàn)IO的繼承是錯(cuò)誤發(fā)生的根源。一些錯(cuò)誤是可恢復(fù)的;一下錯(cuò)誤則發(fā)生在系統(tǒng)底層,位于程序可修正的范圍之外。IO標(biāo)準(zhǔn)庫(kù)管理一系列條件狀態(tài)成員,用來(lái)標(biāo)記給定的IO對(duì)象是否處于可用狀態(tài),或者碰到了哪種特定的錯(cuò)誤。表8-2列出了標(biāo)準(zhǔn)庫(kù)定義的一組函數(shù)和標(biāo)記,提供訪問(wèn)和操作流狀態(tài)的手段。

 

流必須處于無(wú)錯(cuò)誤狀態(tài),才能用于輸入或輸出。檢測(cè)流是否可用的最簡(jiǎn)單的方法是檢測(cè)其真值:

ifcin

           //ok to use cin,it is in a valid state

Whilecin>>word

      //ok:read operation successful

雖然許多程序只需要知道流是否有效,但某些程序則需要更詳細(xì)地訪問(wèn)or控制流的狀態(tài),此時(shí),除了知道流處于錯(cuò)誤狀態(tài)外,還必須了解它遇到了那種類(lèi)型的錯(cuò)誤。例如,程序員也許希望弄清楚是到達(dá)了文件的結(jié)尾,還是遇到了IO設(shè)備上的錯(cuò)誤。

      所有流對(duì)象都包含一個(gè)條件狀態(tài)成員,該成員由setstateclear操作管理。這個(gè)狀態(tài)成員為iostate類(lèi)型,這是由各個(gè)iostream類(lèi)分別定義的機(jī)器相關(guān)的整形。該狀態(tài)成員以二進(jìn)制為的形式使用。

      Badbit標(biāo)志著系統(tǒng)級(jí)的故障,如無(wú)法恢復(fù)的讀寫(xiě)錯(cuò)誤。如果出現(xiàn)了這類(lèi)錯(cuò)誤,則該流通常就不能在繼續(xù)使用了。如果出現(xiàn)的是可恢復(fù)的錯(cuò)誤,如在希望獲得數(shù)值型數(shù)據(jù)時(shí)輸入了字符,此時(shí)則設(shè)置failbit標(biāo)志,這種導(dǎo)致設(shè)置failbit的問(wèn)題通常是可以修正的。eofbit是在遇到文件結(jié)束符是設(shè)置的,此時(shí)同時(shí)還設(shè)置了failbit。

輸出緩沖區(qū)管理

clearsetstate操作用于改變條件成員的狀態(tài)。clear將條件重設(shè)為有效狀態(tài)。在流的使用出現(xiàn)了問(wèn)題并做出補(bǔ)救后,如果我們希望把流重設(shè)為有效狀態(tài),則可以調(diào)用clear。使用setstate可以打開(kāi)某個(gè)指定的條件,用于表示某個(gè)問(wèn)題的發(fā)生。除了添加的標(biāo)記狀態(tài),setstate將保留其他已存在的狀態(tài)變量不變。

輸出緩沖區(qū)管理:

      每個(gè)IO對(duì)象管理一個(gè)緩沖區(qū),用于存儲(chǔ)程序讀寫(xiě)的數(shù)據(jù).下面幾種情況將導(dǎo)致緩沖區(qū)的內(nèi)容被刷新,即寫(xiě)入真實(shí)的輸出設(shè)備或者文件:

(1)  程序正常結(jié)束.

(2)  在一些不確定的時(shí)候,緩沖區(qū)可能已經(jīng)滿(mǎn)了,在這種情況下,緩沖區(qū)將會(huì)在寫(xiě)入下一個(gè)之值前刷新.

(3)  用操作符顯示地刷新緩沖區(qū),例如行結(jié)束符endl.

(4)  可將輸出流與輸入流關(guān)聯(lián)起來(lái).在這種情況下,在讀輸入流時(shí)竟刷新其關(guān)聯(lián)的輸出緩沖區(qū).

1.     輸出緩沖區(qū)的刷新

3個(gè)操作符:

      endl:用于輸出一個(gè)換行符并刷新緩沖區(qū)。

      flush:刷新流,但不在輸出中添加任何字符.

      ends:在緩沖區(qū)中插入空字符null,然后刷新它。

2.     unitbuf操作符

如果需要刷新所有輸出,最好使用unitbuf操作符。這個(gè)操作符在每次執(zhí)行完寫(xiě)操作后都刷新流:

      cout<<unitbuf<<first<<second<<nounitbuf;

等價(jià)于:

      cout<<first <<flush<<second<<flush;

nounitbuf操作符將流恢復(fù)為使用正常的,由系統(tǒng)管理的緩沖區(qū)刷新方式。

3.     將輸入和輸出綁在一起

當(dāng)輸入流與輸出流綁在一起時(shí),任何讀輸入流的嘗試都將首先刷新其輸出流關(guān)聯(lián)的緩沖區(qū)。標(biāo)準(zhǔn)庫(kù)將coutcin綁在一起。

 

 

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多