版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第十一章流類庫與輸入/輸出何文秀浙江工業(yè)大學(xué)信息工程學(xué)院2本章主要內(nèi)容I/O流的概念和流類庫結(jié)構(gòu)輸出流輸入流輸入/輸出流3簡介數(shù)據(jù)存儲(chǔ)存儲(chǔ)在變量中的數(shù)據(jù)是臨時(shí)的文件是用來永久保存大量數(shù)據(jù)的磁盤光盤磁帶4數(shù)據(jù)層次Bit“位”(二進(jìn)制數(shù)字)1或0Byte字節(jié):8位可以存儲(chǔ)一個(gè)字符(char)可以用雙字節(jié)表示長的字符(wchar_t)域Field:一組有意義的字符姓名5數(shù)據(jù)層次記錄Record:一組有關(guān)系的域C中的struct或C++中的class文件File:一組相關(guān)的記錄公司的工資表順序文件:記錄按關(guān)鍵字存儲(chǔ)數(shù)據(jù)庫:一組相關(guān)的文件工資表文件、帳目文件、存貨文件…6數(shù)據(jù)層次101001010JudyJudyGreenSallyBlackTomBlueJudyGreenIrisOrangeRandyRedFileRecordFieldByte(ASCIIcharacterJ)Bit7C:printf和scanf的缺陷1.非類型安全#include<stdio.h>intj=10;floatf=2.3;voidfn(){
printf("%d\n",j); printf("%d\n",f); printf("%d\n","C++");
scanf("%d",&i); printf("%d\n",i);scanf("%d",j); printf("%d\n",j);}voidmain(){ fn();}11-1.cC++為了與C兼容,保留了用printf和scanf進(jìn)行輸出和輸入的方法編寫新的C++程序時(shí)不要用C輸入輸出機(jī)制,要用C++自己特有的輸入輸出方法在C++的輸入輸出中,編譯系統(tǒng)對(duì)數(shù)據(jù)類型進(jìn)行嚴(yán)格的檢查,凡是類型不正確的數(shù)據(jù)都不能通過編譯(C++的I/O操作時(shí)類型安全的)C:printf和scanf的缺陷2.可擴(kuò)展性差1)printf和scanf可以輸入輸出標(biāo)準(zhǔn)類型的數(shù)據(jù)(如int、float、double、char),但無法輸出用戶自己定義的類型(如數(shù)組、結(jié)構(gòu)體、類)的數(shù)據(jù)2)C++的I/O操作是可擴(kuò)展的,對(duì)標(biāo)準(zhǔn)類型的數(shù)據(jù)和對(duì)用戶定義類型數(shù)據(jù)的輸入輸出,采用同樣的方法處理C++的輸入輸出1、對(duì)系統(tǒng)指定的標(biāo)準(zhǔn)設(shè)備的輸入輸出。即從鍵盤輸入數(shù)據(jù),輸出到顯示器屏幕。這種輸入輸出稱為標(biāo)準(zhǔn)的輸入輸出,簡稱標(biāo)準(zhǔn)I/O。2、以外存磁盤文件為對(duì)象進(jìn)行輸入輸出,即從磁盤文件輸入數(shù)據(jù),數(shù)據(jù)輸出到磁盤文件。這種以外存文件為對(duì)象的輸入輸出稱為文件的輸入輸出,簡稱文件I/O。3、對(duì)內(nèi)存指定的空間進(jìn)行輸入輸出。通常指定一個(gè)字符數(shù)組作為存儲(chǔ)空間,這種輸入輸出稱為字符串輸入輸出,簡稱串I/O。10C++的輸入輸出流I/O流類庫是C語言中I/O函數(shù)中面向?qū)ο蟮某绦蛟O(shè)計(jì)方法中的一個(gè)替換產(chǎn)品。當(dāng)程序與外界環(huán)境進(jìn)行信息交換時(shí),存在著兩個(gè)對(duì)象,一個(gè)是程序中的對(duì)象,另一個(gè)是文件對(duì)象。
流是一種抽象,它負(fù)責(zé)在數(shù)據(jù)的生產(chǎn)者和數(shù)據(jù)的消費(fèi)者之間建立聯(lián)系,并管理數(shù)據(jù)的流動(dòng)。
程序建立一個(gè)流對(duì)象,并指定這個(gè)流對(duì)象與某個(gè)文件對(duì)象建立連接,程序操作流對(duì)象,流對(duì)象通過文件系統(tǒng)對(duì)所連接的文件對(duì)象產(chǎn)生作用。
讀操作在流數(shù)據(jù)抽象中被稱為(從流中)提取,寫操作被稱為(向流中)插入。C++的輸入輸出流在內(nèi)存中為每一個(gè)數(shù)據(jù)流開辟一個(gè)內(nèi)存緩沖區(qū),用來存放流中的數(shù)據(jù)當(dāng)用cout和插入運(yùn)算符“<<”向顯示器輸出數(shù)據(jù)時(shí),先將這些數(shù)據(jù)送到程序中的輸出緩沖區(qū),直到緩沖區(qū)滿了或遇到endl,就將緩沖區(qū)中的全部數(shù)據(jù)送到顯示器顯示出來在輸入時(shí),從鍵盤輸入的數(shù)據(jù)先放在鍵盤的緩沖區(qū)中,當(dāng)按回車鍵時(shí),鍵盤緩沖區(qū)中的數(shù)據(jù)輸入到程序中的輸入緩沖區(qū),形成cin流,然后用提取運(yùn)算符“>>”從輸入緩沖區(qū)中提取數(shù)據(jù)送給程序中的有關(guān)變量C++輸入輸出流C++中,輸入輸出流被定義為類C++的I/O庫中的類稱為流類用流類定義的對(duì)象稱為流對(duì)象I/O類庫中的流類類名說明包含文件抽象流基類
ios流基類ios輸入流類
istream通用輸入流類和其他輸入流的基類iostreamifstream文件輸入流類fstreamistringstream字符串輸入流類sstream輸出流類
ostream通用輸出流類和其他輸出流的基類iostreamofstream文件輸出流類fstreamostringstream字符串輸出流類sstream輸入輸出流類
iostream通用輸入輸出流類和其他輸入輸出流的基類iostreamfstream文件輸入輸出流類fstreamstringstream字符串輸入輸出流類sstream流緩沖區(qū)類
streambuf抽象流緩沖區(qū)基類streambuffilebuf磁盤文件的流緩沖區(qū)類fstreamstringbuf字符串的流緩沖區(qū)類sstreamI/O類庫中的繼承層次
I/O類庫中的其他類與流類庫有關(guān)的頭文件iostream包含了對(duì)輸入輸出流進(jìn)行操作所需的基本信息。fstream用于用戶管理的文件的I/O操作。sstream用于字符串流I/O。stdiostream用于混合使用C和C++的I/O機(jī)制時(shí)。iomanip在使用格式化I/O時(shí)應(yīng)包含此頭文件。在iostream頭文件中定義的流對(duì)象在iostream頭文件中定義的類有ios,istream,ostream,iostream,istream_withassign,ostream_withassign,iostream_withassign等頭文件iostream聲明了4個(gè)預(yù)定義的流對(duì)象用來完成標(biāo)準(zhǔn)設(shè)備上的輸入輸出操作:cin,cout,cerr,clog
iostream頭文件中定義的4種流對(duì)象iostream頭文件中重載運(yùn)算符在istream和ostream類(iostream中聲明)中分別由一組成員函數(shù)對(duì)位移運(yùn)算符“<<”和“>>”進(jìn)行重載,以便能用它輸入或輸出各種標(biāo)準(zhǔn)數(shù)據(jù)類型的數(shù)據(jù)。對(duì)于不同的標(biāo)準(zhǔn)數(shù)據(jù)類型要分別進(jìn)行重載。自定義類型:重載“<<”、“>>”輸出流對(duì)象
預(yù)先定義的標(biāo)準(zhǔn)輸出流對(duì)象:——流向標(biāo)準(zhǔn)輸出設(shè)備(顯示器)
cout標(biāo)準(zhǔn)輸出流(consoleoutput)cerr是標(biāo)準(zhǔn)錯(cuò)誤輸出,沒有緩沖,發(fā)送給它的內(nèi)容立即被輸出。(它只能允許向屏幕設(shè)備寫數(shù)據(jù))clog流也是標(biāo)準(zhǔn)錯(cuò)誤流,作用和cerr一樣,區(qū)別在于cerr不經(jīng)過緩沖區(qū),直接向顯示器輸出信息,而clog中的信息存放在緩沖區(qū),緩沖區(qū)滿或者遇到endl時(shí)才輸出.20輸出流例1有一元二次方程ax2+bx+c=0,其一般解為x1,2=(-b±b2-4ac)/2a,但若a=0,或b2-4ac<0時(shí),用此公式出錯(cuò)。編程序,從鍵盤輸入a,b,c的值,求x1和x2。如果a=0或b2-4ac<0,輸出出錯(cuò)信息。1.cpp重定向.cpp22構(gòu)造輸出流對(duì)象ofstream類支持磁盤文件輸出三種方式:1.ofstreammyFile("filename",iosmode);//如果在構(gòu)造函數(shù)中指定一個(gè)文件名,當(dāng)構(gòu)造這個(gè)文件時(shí)該文件是自動(dòng)打開的2.可以在調(diào)用默認(rèn)構(gòu)造函數(shù)之后使用open成員函數(shù)打開文件ofstreammyFile;//聲明一個(gè)靜態(tài)輸出文件流對(duì)象myFile.open("filename",iosmode);
//打開文件,使流對(duì)象與文件建立聯(lián)系輸出流構(gòu)造輸出流對(duì)象3.使用同一個(gè)流先后打開不同的文件(在同一個(gè)時(shí)刻只有一個(gè)是打開的):ofstreamfile;file.open(“file1”);//打開文件file1
//……向文件file1輸出file.close();//關(guān)閉file1file.open(“file2”);//打開文件file2//……向文件file2輸出file.close();//關(guān)閉file2文件輸入輸出打開模式例2有一個(gè)整型數(shù)組,含5個(gè)元素,從鍵盤輸入5個(gè)整數(shù)給數(shù)組,將此數(shù)組送到磁盤文件中存放。2.cpp26插入運(yùn)算符(<<)和操縱符插入(<<)運(yùn)算符是所有標(biāo)準(zhǔn)C++數(shù)據(jù)類型預(yù)先設(shè)計(jì)的。用于傳送字節(jié)到一個(gè)輸出流對(duì)象。輸出流輸入輸出流的操縱符28文件輸出流成員函數(shù)
輸出流成員函數(shù)有三種類型:與操縱符等價(jià)的成員函數(shù)。執(zhí)行非格式化寫操作的成員函數(shù)。其它修改流狀態(tài)且不同于操縱符或插入運(yùn)算符的成員函數(shù)。輸出流29文件輸出流成員函數(shù)open函數(shù)把流與一個(gè)特定的磁盤文件關(guān)聯(lián)起來。需要指定打開模式。close函數(shù)關(guān)閉與一個(gè)輸出文件流關(guān)聯(lián)的磁盤文件put函數(shù)把一個(gè)字符寫到輸出流中。write函數(shù)把內(nèi)存中的一塊內(nèi)容寫到一個(gè)輸出文件流中seekp和tellp函數(shù)操作文件流的內(nèi)部指針錯(cuò)誤處理函數(shù)輸出流write.cppseekptellp.cppopenclose.cpp二進(jìn)制輸出文件文本文件:ASCII文件、字符文件文件中字節(jié)單元的內(nèi)容為字符的ASCII碼二進(jìn)制文件:字節(jié)文件文件內(nèi)容是數(shù)據(jù)的內(nèi)部表示,從內(nèi)存直接復(fù)制輸出流二進(jìn)制輸出.cpp字符信息:在內(nèi)存中是以ASCII碼形式存放的,用ASCII文件輸出還是用二進(jìn)制文件輸出,數(shù)據(jù)形式一樣數(shù)值信息:二者不同。內(nèi)存中用二進(jìn)制表示,如100000字符串輸出流ostringstream類表示一個(gè)字符串輸出流除了輸出到屏幕、文件,生成字符串ostringstreamos;例11-6:用ostringstream將數(shù)值轉(zhuǎn)換為字符串輸出流文件流是以外存文件為輸入輸出對(duì)象的數(shù)據(jù)流,字符串流不是以外存文件為輸入輸出的對(duì)象,而以內(nèi)存中用戶定義的字符數(shù)組(字符串)為輸入輸出的對(duì)象,即將數(shù)據(jù)輸出到內(nèi)存中的字符數(shù)組,或者從字符數(shù)組(字符串)將數(shù)據(jù)讀入。字符串流也稱為內(nèi)存流。字符串.cpp32輸入流3個(gè)重要的輸入流類:istream、ifstream、istringstreamistream類最適合用于順序文本模式輸入.cin是其派生類istream_withassign的對(duì)象。ifstream類支持磁盤文件輸入。istringstream類支持字符串輸入流輸入流33構(gòu)造輸入流對(duì)象1.如果在構(gòu)造函數(shù)中指定一個(gè)文件名,在構(gòu)造該對(duì)象時(shí)該文件便自動(dòng)打開。ifstreammyFile("filename",iosmode);2.在調(diào)用缺省構(gòu)造函數(shù)之后使用open函數(shù)來打開文件。ifstreammyFile;//建立一個(gè)文件流對(duì)象myFile.open("filename",iosmode);//打開文件"filename"輸入流34提取運(yùn)算符(>>)提取運(yùn)算符(>>)對(duì)于所有標(biāo)準(zhǔn)C++數(shù)據(jù)類型都是預(yù)先設(shè)計(jì)好的。是從一個(gè)輸入流對(duì)象獲取字節(jié)最容易的方法。用于格式化文本輸入,提取數(shù)據(jù)時(shí),以空白符為分隔用非格式化輸入成員函數(shù)getline,輸入一段包含空白符的文本輸入流輸入流操縱符定義在ios_base類中和iomanip頭文件中的操縱符可以應(yīng)用于輸入流,但是只有少數(shù)幾個(gè)操縱符對(duì)輸入流具有實(shí)際影響,其中最重要的是進(jìn)制操縱符dec,oct和hex36輸入流成員函數(shù)open函數(shù)把該流與一個(gè)特定磁盤文件相關(guān)聯(lián)。close函數(shù)關(guān)閉與一個(gè)輸入文件流關(guān)聯(lián)的磁盤文件get函數(shù)的功能與提取運(yùn)算符(>>)很相像,主要的不同點(diǎn)是get函數(shù)在讀入數(shù)據(jù)時(shí)包括空白字符。getline的功能是從輸入流中讀取多個(gè)字符,并且允許指定輸入終止字符,讀取完成后,從讀取的內(nèi)容中刪除終止字符非成員函數(shù)getline。輸入流get函數(shù).cppgetline函數(shù).cpp輸入流成員函數(shù)read成員函數(shù)從一個(gè)文件讀字節(jié)到一個(gè)指定的內(nèi)存區(qū)域,由長度參數(shù)確定要讀的字節(jié)數(shù)。seekg函數(shù)用來設(shè)置
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 家電業(yè)務(wù)員產(chǎn)品介紹總結(jié)
- 媒體工作室行政后勤工作總結(jié)
- 陶瓷制品生產(chǎn)合同三篇
- 資金管理及優(yōu)化總結(jié)
- 設(shè)立圖書角提升閱讀興趣計(jì)劃
- 電商平臺(tái)前臺(tái)服務(wù)總結(jié)
- 2023年福建省寧德市公開招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 大學(xué)生村官農(nóng)村村情調(diào)研報(bào)告范本
- 《認(rèn)識(shí)臭氧層危機(jī)》課件
- 2024年社會(huì)人文科學(xué)研究服務(wù)項(xiàng)目資金申請(qǐng)報(bào)告代可行性研究報(bào)告
- 全國各城市的50年一遇雪壓和風(fēng)壓
- 英語聽力技巧與應(yīng)用(山東聯(lián)盟)智慧樹知到課后章節(jié)答案2023年下濱州學(xué)院
- 2024屆甘肅省平?jīng)鍪徐o寧縣英語九年級(jí)第一學(xué)期期末教學(xué)質(zhì)量檢測(cè)模擬試題含解析
- 寧夏農(nóng)產(chǎn)品物流發(fā)展現(xiàn)狀的探究 物流管理專業(yè)
- 人教版八年級(jí)數(shù)學(xué)下冊(cè)課件【全冊(cè)】
- 隱患排查治理工作方案
- 七年級(jí)數(shù)學(xué)上冊(cè)專題18 一元一次方程有整數(shù)解(解析版)
- 酒店安全生產(chǎn)責(zé)任制
- 輔導(dǎo)員工作匯報(bào)課件
- 企業(yè)清產(chǎn)核資報(bào)表
- 漢字文化解密學(xué)習(xí)通超星課后章節(jié)答案期末考試題庫2023年
評(píng)論
0/150
提交評(píng)論