c++輸入輸出流及文件操作詳解ppt課件.ppt_第1頁
c++輸入輸出流及文件操作詳解ppt課件.ppt_第2頁
c++輸入輸出流及文件操作詳解ppt課件.ppt_第3頁
c++輸入輸出流及文件操作詳解ppt課件.ppt_第4頁
c++輸入輸出流及文件操作詳解ppt課件.ppt_第5頁
已閱讀5頁,還剩83頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第7章輸入輸出流,7.1流類和流對(duì)象,7.2標(biāo)準(zhǔn)IO流和流對(duì)象,7.3格式控制,7.4文件處理,本章內(nèi)容-第一講,1、輸入輸出流的含義流類與流對(duì)象2、標(biāo)準(zhǔn)輸入輸出流標(biāo)準(zhǔn)IO流對(duì)象IO流成員函數(shù)-get(),getline()與-put(),put,get(),getline(),read(),write(),第7章輸入輸出流,流(stream)表示信息從源到目的端的流動(dòng),負(fù)責(zé)建立數(shù)據(jù)生產(chǎn)者和消費(fèi)者之間的聯(lián)系,數(shù)據(jù)按順序從一個(gè)對(duì)象傳送到另一對(duì)象。,C+中把數(shù)據(jù)之間的傳輸操作稱作”流”,I/O系統(tǒng)的任務(wù)就是在內(nèi)存和外部設(shè)備之間穩(wěn)定可靠地傳輸數(shù)據(jù)和解釋數(shù)據(jù)。程序中,對(duì)數(shù)據(jù)的輸入/輸出是以字節(jié)流實(shí)現(xiàn)的應(yīng)用程序?qū)ψ止?jié)序列作出各種數(shù)據(jù)解釋.C+的輸入輸出流是指由若干字節(jié)組成的字節(jié)序列流中的內(nèi)容可以是ASCII字符、圖形圖像、數(shù)字音頻視頻等形式的信息。,7.1IO流,7.1IO流,I/O流類庫提供對(duì)象之間的數(shù)據(jù)交互服務(wù)輸出流Outputstream:數(shù)據(jù)從內(nèi)存?zhèn)魉偷侥硞€(gè)載體或設(shè)備中;輸入流Inputstream:數(shù)據(jù)從某個(gè)載體或設(shè)備傳送到內(nèi)存中;,_內(nèi)存_,輸入數(shù)據(jù),輸出數(shù)據(jù),7.1.1緩沖區(qū),緩沖區(qū)buffer是內(nèi)存中的一個(gè)臨時(shí)存儲(chǔ)區(qū),用來匹配不同部件數(shù)據(jù)傳輸率的差異。通過使用緩沖的方式可以更高效地處理輸入輸出,信息從設(shè)備和程序之間傳輸時(shí)可臨時(shí)存儲(chǔ)在緩沖區(qū)中,等待累積成數(shù)據(jù)塊或合適的事機(jī)再傳送的目的地。,在C+中輸入輸出流被定義為類,I/O庫中的類稱為流類,編譯系統(tǒng)提供了用于輸入輸出的iostream類庫。流類中的常用類的繼承層次關(guān)系,7.1.2流類,(1)標(biāo)準(zhǔn)流提供通用輸入輸出操作,作為其他I/O流基類系統(tǒng)指定的標(biāo)準(zhǔn)設(shè)備的I/O操作。(2)文件流以外存中的文件為對(duì)象進(jìn)行輸入和輸出。以文件為對(duì)象的輸入輸出,包括從磁盤文件輸入數(shù)據(jù),或?qū)?shù)據(jù)輸出到磁盤文件。(3)字符串流對(duì)內(nèi)存中指定空間進(jìn)行輸入和輸出。通常指定一個(gè)字符數(shù)組作為存儲(chǔ)空間。,7.1.2流類,iostream.h包含操作所有輸入/輸出流所需的基本信息istream.h,ostream.hiomanip.h包含格式化I/O操縱算子,用于指定數(shù)據(jù)輸入輸出的格式fstream.h處理文件信息,包括建立文件,讀/寫文件的各種操作接口每一種C+版本通常還包含其他一些與I/O相關(guān)的庫,提供特定系統(tǒng)的某些功能,7.1.2頭文件,I/O流類庫預(yù)定義了一批流對(duì)象,連接常用的外部設(shè)備.程序員可以定義所需的I/O流對(duì)象,使用流庫提供的工作方式實(shí)現(xiàn)數(shù)據(jù)傳輸。流類對(duì)象可以建立和刪除,可從流中獲取數(shù)據(jù)和向流添加數(shù)據(jù)。,7.1.3流對(duì)象,istreamcin,ostreamcout,輸入流對(duì)象,_內(nèi)存_,輸出流對(duì)象,7.2標(biāo)準(zhǔn)流對(duì)象及常用成員函數(shù),標(biāo)準(zhǔn)流對(duì)象是在std命名空間中定義的流對(duì)象,提供內(nèi)存與常用外部設(shè)備進(jìn)行數(shù)據(jù)交互功能。聲明在頭文件iostream,7.2.1標(biāo)準(zhǔn)輸出流,coutostream類的對(duì)象(consoleoutput)通常連向顯示器,可以重定向(關(guān)聯(lián)至文件)在輸出流類中重載的一組公用成員函數(shù),實(shí)現(xiàn)安全便捷的輸出基本數(shù)據(jù)類型,輸出自定義類型對(duì)象需要單獨(dú)重載ostreamcouta;,6.3.4重載流插入和流提取運(yùn)算符,ostream,使用重載版本訪問對(duì)象coutaarr1arr2;,cin的別名,istream類的公有成員函數(shù),7.2.4輸入流操作,intistream:get();/charc=cin.get();istreamget.cpp,istream類的公有成員函數(shù),7.2.4輸入流操作,istream其作用是從輸入流中讀取n-1個(gè)字符,賦給指定的字符數(shù)組,如果在讀取n-1個(gè)字符之前遇到指定的終止字符,則提前結(jié)束讀取。如果讀取成功則函數(shù)返回非0值(真),如失敗(遇文件結(jié)束符)則函數(shù)返回0值(假)。讀取完成后,從流中刪除該終止符。Get_getline.cpp,7.2.4輸入流操作,/字符串的輸入charch120,ch220,ch320,ch420;cinch1;coutch1endl;cin.get(ch2,10);coutch2endl;cin.get(ch3,20);coutch3endl;cin.get(ch4,20,.);coutch4endl;,istream,istream類的公有成員函數(shù),7.2.4輸入流操作,7.2.5流錯(cuò)誤狀態(tài),所有流都把流的狀態(tài)存儲(chǔ)在狀態(tài)字中不同標(biāo)志位中存儲(chǔ)不同的錯(cuò)誤狀態(tài)位包含在類ios的enum成員中,ios處理流錯(cuò)誤狀態(tài)的公有成員函數(shù),7.2.4流錯(cuò)誤狀態(tài),運(yùn)行程序,觀測(cè)結(jié)果grade.cppstreamstate.cpp,ios提供直接設(shè)置標(biāo)志字的控制格式函數(shù)iostream和iomanip庫還提供控制符簡(jiǎn)化I/O格式化操作(自學(xué)內(nèi)容),7.3格式控制,ios類格式化標(biāo)志,格式化標(biāo)志是類定義的枚舉集合,用來指定輸入輸出格式化和操作的不同選擇。該枚舉類型定義:enumskipws,left,right,internal,dec,oct,hex,showbase,showpoint,uppercase,showpos,scientific,fixed,unitbuf,stdio;引用格式化標(biāo)志:ios:格式化標(biāo)志,7.3.1設(shè)置標(biāo)志字,狀態(tài)標(biāo)志值含義輸入/輸出skipws0X0001跳過輸入中的空白Ileft0X0002左對(duì)齊輸出Oright0X0004右對(duì)齊輸出Ointernal0X0008在符號(hào)位和基指示符后填入字符Odec0X0010轉(zhuǎn)換基制為十進(jìn)制I/Ooct0X0020轉(zhuǎn)換基制為八進(jìn)制I/Ohex0X0040轉(zhuǎn)換基制為十六進(jìn)制I/Oshowbase0X0080在輸出中顯示基指示符Oshowpoint0X0100輸出時(shí)顯示小數(shù)點(diǎn)Ouppercase0X0200十六進(jìn)制輸出時(shí)一律用大寫字母Oshowpos0X0400正整數(shù)前加“+”號(hào)Oscientific0X0800科學(xué)示數(shù)法顯示浮點(diǎn)數(shù)Ofixed0X1000定點(diǎn)形式顯示浮點(diǎn)數(shù)Ounitbuf0X2000輸出操作后立即刷新流Ostdio0X4000輸出操作后刷新stdout和stdreeO,ios的標(biāo)志常量,7.3.1設(shè)置標(biāo)志字,ios控制格式的函數(shù),/例4設(shè)置輸出寬度#includevoidmain()char*s=Hello;cout.fill(*);/置填充符cout.width(10);/置輸出寬度cout.setf(ios:left);/左對(duì)齊coutsendl;cout.width(15);/置輸出寬度cout.setf(ios:right,ios:left);/清除左對(duì)齊標(biāo)志位,置右對(duì)齊coutsb;coutc;coutOutputindecimal:n;cout.setf(ios:dec,ios:basefield);couta=ab=bc=cendl;cout.setf(ios:hex,ios:basefield);coutOutputinhexadecimal:n;couta=ab=bc=cendl;cout.setf(ios:oct,ios:basefield);coutOutputinoctal:n;couta=ab=bc=cendl;,/置八進(jìn)制輸出,/置十六進(jìn)制輸出,/置十進(jìn)制輸出,/置八進(jìn)制輸入,/置十進(jìn)制輸入,/置十六進(jìn)制輸入,例5不同基數(shù)形式的輸入輸出,#includevoidmain()doublex=22.0/7;inti;coutoutputinfixed:n;cout.setf(ios:fixed|ios:showpos);/定點(diǎn)輸出,顯示+for(i=1;i=5;i+)cout.precision(i);coutxendl;coutoutputinscientific:n;/清除原有設(shè)置,科學(xué)示數(shù)法輸出cout.setf(ios:scientific,ios:fixed|ios:showpos);for(i=1;i=5;i+)cout.precision(i);coutx*1e5deca;,cinhexb;,cinoctc;,coutocta=ab=bc=cendl;,couta=ab=bc=cendl;,couthexa=ab=bc=cendl;,7.3.2格式控制符,iomanip的控制符,常用控制符與成員函數(shù),/例8整數(shù)的格式化輸出#include#includeusingnamespacestd;voidmain()constintk=618;coutsetw(10)setfill(#)setiosflags(ios:right)kendl;coutsetw(10)setbase(8)setfill(*)resetiosflags(ios:right)setiosflags(ios:left)kendl;,#includevoidmain()doublex=22.0/7;inti;coutoutputinfixed:n;cout.setf(ios:fixed|ios:showpos);/定點(diǎn)輸出,顯示+for(i=1;i=5;i+)cout.precision(i);coutxendl;coutoutputinscientific:n;/清除原有設(shè)置,科學(xué)示數(shù)法輸出cout.setf(ios:scientific,ios:fixed|ios:showpos);for(i=1;i=5;i+)cout.precision(i);coutx*1e5endl;,例9格式化輸出浮點(diǎn)數(shù),coutsetiosflags(ios:fixed|ios:showpos);,coutresetiosflags(ios:fixed|ios:showpos)setiosflags(ios:scientific);,coutsetprecision(i)xendl;,coutsetprecision(i)x*1e5ab;,10.5.3文本文件,a0X00f3,b0X004e,7.4.1文件和流,輸入文件流對(duì)象,文件,寫文件,10.5.3文本文件,a0X00f3,b0X004e,7.4.1文件和流,文件,intc;c=a+b;foutc=c,get(),getline(),read(),fileObj.close();,7.4.2打開和關(guān)閉文件,打開文件建立文件流對(duì)象;流對(duì)象與磁盤文件關(guān)聯(lián);指定文件的打開方式關(guān)閉文件解除流對(duì)象與磁盤文件關(guān)聯(lián),1.打開文件,方法1調(diào)用流類帶參數(shù)的構(gòu)造函數(shù),建立流對(duì)象時(shí)連接外部文件流類對(duì)象名(文件名,方式);egifstreaminfile(datafile.dat,ios:in);ofstreamoutfile(d:newfile.dat,ios:out);,ifstream、ofstream或fstream,1.打開文件,方法2先建立流對(duì)象,再調(diào)用fstream:open()函數(shù)連接外部文件流類對(duì)象名;對(duì)象名.open(文件名,方式);,ifstream、ofstream或fstream,打開(創(chuàng)建)一個(gè)文件newfile.dat,準(zhǔn)備寫:ofstreamoutfile;/建立輸出文件流對(duì)象outfile.open(d:newfile.dat,ios:out);,打開一個(gè)已有文件datafile.dat,準(zhǔn)備讀:ifstreaminfile;/建立輸入文件流對(duì)象infile.open(“datafile.dat”,ios:in);,open函數(shù)原型,voidopen(constchar*,intmode,int=filebuf:openprot);,1.打開文件,參數(shù)分別表示:文件名,文件的打開方式,文件的訪問方式,egifstreaminfile(datafile.dat,ios:in);ofstreamoutfile(d:newfile.dat,ios:out);fstreamrwfile(myfile.dat,ios:in|ios:out);ofstreamofile(a:binary,ios:binary|ios:app);,用或運(yùn)算符“|”連接兩個(gè)表示打開方式的標(biāo)識(shí)常量,1.打開文件,打開一個(gè)二進(jìn)制文件進(jìn)行追加操作,2.關(guān)閉文件,關(guān)閉文件操作包括把緩沖區(qū)數(shù)據(jù)完整地寫入文件,添加文件結(jié)束標(biāo)志,切斷流對(duì)象和外部文件的連接當(dāng)一個(gè)流對(duì)象的生存期結(jié)束,系統(tǒng)也會(huì)自動(dòng)關(guān)閉文件;若流對(duì)象的生存期沒有結(jié)束,用close()關(guān)閉文件后,該流對(duì)象可以重用,eg:ofstreamofile;/創(chuàng)建輸出文件流ofile.open(myfile1);/ofile流與文件“myfile1”相關(guān)聯(lián)/訪問文件“myfile1”ofile.close();/關(guān)閉文件“myfile1”ofile.open(“myfile2”);/重用對(duì)象ofile,等價(jià)于使用構(gòu)造函數(shù):ofstreamofile(myfile1);,2.關(guān)閉文件,close()函數(shù)關(guān)閉文件但流對(duì)象仍然存在,3打開與關(guān)閉錯(cuò)誤,if(!outfile)/outfile.open(“myfile2.dat”)cerr”ereor:unabletoopenfile2!”;,檢測(cè)文件是否成功打開,可在條件表達(dá)式中使用取反操作符(?。y(cè)試流狀態(tài),為了測(cè)試成功關(guān)閉文件,可以調(diào)用fail()函數(shù),如,myfile2.close();if(myfile2.fail()cerr,get(),read(),OUTPUT,完成文件讀寫向文本文件中寫入數(shù)據(jù),并從文件中讀出數(shù)據(jù)file1.cpp練習(xí):改寫程序,將新的數(shù)據(jù)追加寫入文件中file2.cpp使用get(),put()完成文件讀寫練習(xí):將已有文件的內(nèi)容復(fù)制到新的文件中file3.cpp,#include#includevoidmain()ofstreamout(“test);if(!out)coutcannotopenfile.;return;out10123.45;outfchstr1str2;couti“”f“”chn;coutstr1str2fchstr1str2;couti“”f“”chn;coutstr1str2endl;in.close();,inti10,floatf123.45,charchT,charstr1his,charstr2is,ostreamcout,ifstreamin,例從文件讀出數(shù)據(jù)file1.cpp,#include#includevoidmain()ifstreamf1(test);if(!f1)coutcannotopentestforinput.;return;ofstreamf2(testnew);if(!f2)coutcannotopentestnewforouput.;return;charch;while(f1.get(ch)f2.put(ch);f1.close();f2.close();coutnumber;/讀入一個(gè)整數(shù),指針后移4字節(jié)input.seekg(pos);/指針返回原來位置inputnumber;/重讀該整數(shù),i-1ii+1,10.5.4二進(jìn)制文件,200311,7.4.4二進(jìn)制文件,istream類操作流讀指針的成員函數(shù),ostream返回寫指針當(dāng)前所指位置值,ostream類操作流寫指針的成員函數(shù),10.5.4二進(jìn)制文件,7.4.4二進(jìn)制文件,文件讀寫練習(xí)binaryFile多條學(xué)生的記錄包括學(xué)號(hào)、姓名和成績(jī)等信息:(1)輸入多個(gè)學(xué)生記錄(2)按二進(jìn)制方式寫到文件中:(3)從文件中讀出成績(jī)并求平均值;(4)對(duì)文件中按成績(jī)排序再寫回文件中.(5)查找一條學(xué)生記錄,修改其中的屬性.,模擬一個(gè)書店的銷售賬目能夠添加、刪除書目,根據(jù)進(jìn)貨和銷售數(shù)目更新庫存數(shù)。賬目結(jié)構(gòu):包含書號(hào)(TP)、書名(bookName)和庫存量(blance)。功能菜單:選擇14分別調(diào)用函數(shù)Append(入庫)、Sale(銷售)、Inquire(查詢)和CreateTxt(建立文本),選擇0退出系統(tǒng)。,案例:簡(jiǎn)單事務(wù)處理應(yīng)用程序,main函數(shù)打開文件booksFile.dat,通過流類參數(shù),把流對(duì)象iof傳遞給各函數(shù)。文件流的讀/寫指針在字節(jié)流中移動(dòng),實(shí)現(xiàn)讀/寫操作。為建立格式化文本文件,用文本流的寫方式打開booksFile.txt。文本流對(duì)象ftxt把從二進(jìn)制文件讀出的記錄格式化地寫入文本文件。BookSystem,簡(jiǎn)單事務(wù)處理應(yīng)用程序,小組項(xiàng)目開發(fā)1圖書館管理系統(tǒng)定義類及其關(guān)系:Book,Reader,Manager,Date等2.管理員擁有對(duì)圖書信息的錄入,查詢,修改,增添與刪除等權(quán)限;3.讀者擁有查詢圖書和借閱歷史的功能;4.用文件記錄圖書和用戶信息;,小組項(xiàng)目開發(fā)2試卷自動(dòng)測(cè)驗(yàn)系統(tǒng)系統(tǒng)教師發(fā)布試題和標(biāo)準(zhǔn)答案,實(shí)現(xiàn)自動(dòng)批閱試卷、成績(jī)登

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論