歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > PPT文檔下載  

《C程序設計》電子教案第10章流類庫與輸入輸出.ppt

  • 資源ID:11498688       資源大小:371KB        全文頁數(shù):59頁
  • 資源格式: PPT        下載積分:14.9積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要14.9積分
郵箱/手機:
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機號,方便查詢和重復下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認打開,此種情況可以點擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標題沒有明確說明有答案則都視為沒有答案,請知曉。

《C程序設計》電子教案第10章流類庫與輸入輸出.ppt

第10章流類庫與輸入輸出,10.1I/O標準流類10.2格式化I/O10.3文件流10.4字符串流,10.1I/O標準流類,10.1.1預定義流10.1.2C+中的流類庫,返回首頁,在C+語言中,數(shù)據(jù)的輸入和輸出(簡寫為I/O)包括對標準輸入設備鍵盤和標準輸出設備顯示器、對在外存磁盤上的文件和對內(nèi)存中指定的字符串存儲空間進行輸入輸出這三個方面。對標準輸入設備和標準輸出設備的輸入輸出簡稱為標準I/O,對在外存磁盤上文件的輸入輸出簡稱為文件I/O,對內(nèi)存中指定的字符串存儲空間的輸入輸出簡稱為串I/O。,C+中把數(shù)據(jù)之間的傳輸操作稱作流。在C+中,流既可以表示數(shù)據(jù)從內(nèi)存?zhèn)魉偷侥硞€載體或設備中,即輸出流;也可以表示數(shù)據(jù)從某個載體或設備傳送到內(nèi)存緩沖區(qū)變量中,即輸入流。在進行I/O操作時,首先打開操作,使流和文件發(fā)生聯(lián)系,建立聯(lián)系后的文件才允許數(shù)據(jù)流入或流出,輸入或輸出結(jié)束后,使用關閉操作使文件與流斷開聯(lián)系。,C+中所有流都是相同的,但文件可以不同。使用流以后,程序用流統(tǒng)一對各種計算機設備和文件進行操作,使程序與設備、程序與文件無關,從而提高了程序設計的通用性和靈活性。也就是說,無論與流相聯(lián)系的實際物理設備差別有多大,流都采用相同的方式運行。這種機制使得流可以跨越物理設備平臺,實現(xiàn)流的透明運作,而與實際的物理設備無關。例如,往顯示器上輸出字符和向磁盤文件或打印機輸出字符,盡管接受輸出的物理設備不同,但具體操作過程是相同的。,10.1.1預定義流,1cout在ostream輸出流類中定義有對左移操作符>重載的一組公用成員函數(shù),函數(shù)的具體聲明格式為:istream,3cerrcerr類似標準錯誤文件。cerr與cout的差別在于:(1)cerr不能重定向。(2)cerr不能被緩沖,它的輸出總是直接傳達到標準輸出設備上。4clogclog是不能重定向的,但是可以被緩沖。在某些系統(tǒng)中,由于緩沖,使用clog代替cerr可以改進顯示速度。clog<<"Error"<<"n",返回本節(jié),10.1.2C+中的流類庫,C+語言系統(tǒng)為實現(xiàn)數(shù)據(jù)的輸入和輸出定義了一個龐大的類庫,它包括的類主要有ios,istream,ostream,iostream,ifstream,ofstream,fstream,istrstream,ostrstream和strstream等。其中ios為根基類,它直接派生四個類:輸入流類istream、輸出流類ostream、文件流基類fstreambase和字符串流基類strstreambase,輸入文件流類ifstream同時繼承了輸入流類和文件流基類(當然對于根基類是間接繼承),輸出文件流類ofstream同時繼承了輸出流類和文件流基類,輸入字符串流類istrstream同時繼承了輸入流類和字符串流基類,輸出字符串流類ostrstream同時繼承了輸出流類和字符串流基類,輸入輸出流類iostream同時繼承了輸入流類和輸出流類,輸入輸出文件流類fstream同時繼承了輸入輸出流類和文件流基類,輸入輸出字符串流類strstream同時繼承了輸入輸出流類和字符串流基類。,返回本節(jié),10.2格式化I/O,10.2.1ios類中的枚舉常量10.2.2使用ios成員函數(shù)10.2.3使用I/O操作符10.2.4檢測流操作的錯誤,返回首頁,10.2.1ios類中的枚舉常量,在根基類ios中定義有三個用戶需要使用的枚舉類型,由于它們是在公用成員部分定義的,所以其中的每個枚舉類型常量在加上ios:前綴后都可以為本類成員函數(shù)和所有外部函數(shù)訪問。在三個枚舉類型中有一個無名枚舉類型,其中定義的每個枚舉常量都是用于設置控制輸入輸出格式的標志使用的。該枚舉類型定義如下:enumskipws,left,right,internal,dec,oct,hex,showbase,showpoint,uppercase,showpos,scientific,fixed,unitbuf,stdio;,各枚舉常量的含義如下:(1)skipws。(2)left,right,internal。(3)dec,oct,hex。(4)showbase。(5)showpoint。(6)uppercase。(7)showpos。(8)scientific,fixed。(9)unitbuf,stdio。,返回本節(jié),10.2.2使用ios成員函數(shù),ios類提供成員函數(shù)對流的狀態(tài)進行檢測和進行輸入輸出格式控制等操作,每個成員函數(shù)的聲明格式和簡要說明如下:intbad();/操作出錯時返回非0值inteof();/讀取到流中最后的文件結(jié)束符時返回非0值intfail();/操作失敗時返回非0值voidclear();/清除bad,eof和fail所對應的標志狀態(tài),使之恢復為正常狀態(tài)/值0,使good標志狀態(tài)恢復為1charfill();/返回當前使用的填充字符charfill(charc);/重新設置流中用于輸出數(shù)據(jù)的填充字符為c的值,返回/此前的填充字符。系統(tǒng)預設置填充字符為空格longflags();/返回當前用于I/O控制的格式狀態(tài)字,longflags(longf);/重新設置格式狀態(tài)字為f的值,返回此前的格式狀態(tài)字intgood();/操作正常時返回非0值,當操作出錯、失敗和讀到文件/結(jié)束符時均為不正常,則返回0intprecision();/返回浮點數(shù)輸出精度,即輸出的有效數(shù)字的位數(shù)intprecision(intn);/設置浮點數(shù)的輸出精度為n,返回此前的輸出精度。系統(tǒng)預設/置的輸出精度為6,即輸出的浮點數(shù)最多具有6位為有效數(shù)字intrdstate();/操作正常時返回0,否則返回非0值,它與good()正好相反longsetf(longf);/根據(jù)參數(shù)f設置相應的格式化標志,返回此前的設置。該參數(shù)/f所對應的實參為無名枚舉類型中的枚舉常量(又稱格式化常/量),可以同時使用一個或多個常量,每兩個常量之間要用按位或/操作符連接。如需要左對齊輸出,并使數(shù)值中的字母大寫時,/則調(diào)用該函數(shù)的實參為ios:left|ios:uppercase,longunsetf(longf);/根據(jù)參數(shù)f清除相應的格式化標志,返回此前的設置。如要/清除此前的左對齊輸出設置,恢復默認的右對齊輸出設置,/則調(diào)用該函數(shù)的實參為ios:leftintwidth();/返回當前的輸出域?qū)?。若返回?shù)值0則表明沒為剛才輸出的數(shù)/值設置輸出域?qū)?。輸出域?qū)捠侵篙敵龅闹翟诹髦兴加械淖止?jié)數(shù)intwidth(intw);/設置下一個數(shù)據(jù)值的輸出域?qū)挒閣,返回為輸出上一個數(shù)據(jù)值/所規(guī)定的域?qū)?,若無規(guī)定則返回0。注意:此設置不是一直有/效,而只是對下一個輸出數(shù)據(jù)有效,例10-2:給出以下程序的運行結(jié)果。#includevoidmain()intx=123;doubley=-3.456789;cout<<"x="cout.width(10);/設置輸出下一個數(shù)據(jù)的域?qū)挒?0cout<<x;/按默認的右對齊輸出,剩余位置填充空格字符cout<<"y="cout.width(10);/設置輸出下一個數(shù)據(jù)的域?qū)挒?0cout<<y<<endl;cout.setf(ios:left);/設置按左對齊輸出,cout<<"x="cout.width(10);cout<<x;cout<<"y="cout.width(10);cout<<y<<endl;cout.fill(*);/設置填充字符為*cout.precision(3);/設置浮點數(shù)輸出精度為3cout.setf(ios:showpos);/設置正數(shù)的正號輸出cout<<"x="cout.width(10);cout<<x;cout<<"y="cout.width(10);cout<<y<<endl;,此程序運行結(jié)果如下:x=123y=-3.45679x=123y=-3.45679x=+123*y=-3.46*,例10-3:給出以下程序的運行結(jié)果。#includevoidmain()floatx=12,y=-3.456;cout<<x<<<<y<<endl;cout.setf(ios:showpoint);/強制顯示小數(shù)點和無效0cout<<x<<<<y<<endl;cout.unsetf(ios:showpoint);/恢復默認輸出cout.setf(ios:scientific);/設置按科學表示法輸出cout<<x<<<<y<<endl;cout.setf(ios:fixed);/設置按定點表示法輸出cout<<x<<<<y<)的輸出對象即可。,例10-4:給出以下程序的運行結(jié)果。#include/因iomanip.h中包含有iostream.h,所以該命令可省略#includevoidmain()intx=12,y=345,z=6789;cout<<x<<<<y<<<<z<<endl;/按十進制輸出cout<<oct<<x<<<<y<<<<z<<endl;/按八進制輸出cout<<hex<<x<<<<y<<<<z<<endl;/按十六進制輸出cout<<setiosflags(ios:showbase|ios:uppercase);/設置基指示符和數(shù)值中的字母大寫輸出cout<<x<<<<y<<<<z<<endl;/仍按十六進制輸出cout<<resetiosflags(ios:showbase|ios:uppercase);/取消基指示符和數(shù)值中的字母大寫輸出cout<<x<<<<y<<<<z<<endl;/仍按十六進制輸出cout<<dec<<x<<<<y<<<<z<<endl;/按十進制輸出,例10-5:給出以下程序的運行結(jié)果。#include#includevoidmain()intx=123;doubley=-3.456789;cout<<"x="<<setw(10)<<x;cout<<"y="<<setw(10)<<y<<endl;cout<<setiosflags(ios:left);/設置按左對齊輸出cout<<"x="<<setw(10)<<x;cout<<"y="<<setw(10)<<y<<endl;,cout<<setfill(*);/設置填充字符為*cout<<setprecision(3);/設置浮點數(shù)輸出精度為3cout<<setiosflags(ios:showpos);/設置正數(shù)的正號輸出cout<<"x="<<setw(10)<<x;cout<<"y="<<setw(10)<<y<<endl;cout<<resetiosflags(ios:left|ios:showpos);cout<<setfill();,返回本節(jié),10.2.4檢測流操作的錯誤,在I/O流的操作過程中可能出現(xiàn)各種錯誤,每一個流都有一個狀態(tài)標志字,以指示是否發(fā)生了錯誤以及出現(xiàn)了哪種類型的錯誤,這種處理技術與格式控制標志字是相同的。ios類定義了以下枚舉類型:enumio_stategoodbit=0 x00,/不設置任何位,一切正常eofbit=0 x01,/輸入流已經(jīng)結(jié)束,無字符可讀入failbit=0 x02,/上次讀/寫操作失敗,但流仍可使用badbit=0 x04,/試圖作無效的讀/寫操作,流不再可用hardfail=0 x80/不可恢復的嚴重錯誤;,返回本節(jié),10.3文件流,10.3.1文件的概念10.3.2文件的打開與關閉10.3.3文件的讀寫,返回首頁,10.3.1文件的概念,在磁盤上保存的信息是按文件的形式組織的,每個文件都對應一個文件名,并且屬于某個物理盤或邏輯盤的目錄層次結(jié)構(gòu)中一個確定的目錄之下。一個文件名由文件主名和擴展名兩部分組成,它們之間用圓點(即小數(shù)點)分開,擴展名可以省略,當省略時也要省略掉前面的圓點。文件主名是由用戶命名的一個有效的C+標識符,為了同其他軟件系統(tǒng)兼容,一般讓文件主名為不超過8個有效字符的標識符,同時為了便于記憶和使用,最好使文件主名的含義與所存的文件內(nèi)容相一致。,在C+程序中使用的保存數(shù)據(jù)的文件按存儲格式分為兩種類型,一種為字符格式文件,簡稱字符文件,另一種為內(nèi)部格式文件,簡稱字節(jié)文件。字符文件又稱ASCII碼文件或文本文件,字節(jié)文件又稱二進制文件。,C+程序文件,利用其他各種語言編寫的程序文件,用戶建立的各種文本文件,各種軟件系統(tǒng)中的幫助文件等,因都是ASCII碼文件,所以都可以在C+中作為字符文件使用。C+系統(tǒng)把各種外部設備也看作為相應的文件。如把標準輸入設備鍵盤和標準輸出設備顯示器看作為標準輸入輸出文件,其文件名(又稱設備名)為con,當向它輸出信息時就是輸出到顯示器,當從它輸入信息時就是從鍵盤輸入。,返回本節(jié),10.3.2文件的打開與關閉,流可以分為3類:輸入流、輸出流以及輸入/輸出流,相應地必須將流說明為ifstream、ofstream以及fstream類的對象。例如:ifstreamifile;/說明一個輸入流ofstreamofile;/說明一個輸出流fstreamiofile;/說明一個輸入/輸出流,說明了流對象之后,可使用函數(shù)open()打開文件。文件的打開即是在流與文件之間建立一個連接。open()的函數(shù)原型為:voidopen(constchar*filename,intmode,intprot=filebuf:openprot);,ios:in打開文件進行讀操作ios:out打開文件進行寫操作ios:ate打開時文件指針定位到文件尾ios:app添加模式,所有增加都在文件尾部進行ios:trunc如果文件已存在則清空原文件ios:nocreate如果文件不存在則打開失敗ios:noreplace如果文件存在則打開失敗ios:binary二進制文件(非文本文件),下面對文件的打開方式作幾點說明:(1)文件的打開方式可以為上述的一個枚舉常量,也可以為多個枚舉常量構(gòu)成的按位或表達式。(2)使用open成員函數(shù)打開一個文件時,若由字符指針參數(shù)所指定的文件不存在,則建立該文件。(3)當打開方式中不含有ios:ate或ios:app選項時,則文件指針被自動移到文件的開始位置,即字節(jié)地址為0的位置。(4)當用輸入文件流對象調(diào)用open成員函數(shù)打開一個文件時,打開方式參數(shù)可以省略,默認按ios:in方式打開,若打開方式參數(shù)中不含有ios:in選項時,則會自動被加上。,下面給出定義文件流對象和打開文件的一些例子:(1)ofstreamfout;fout.open("a:aaa.dat");/字符串中的雙反斜線表示一個反斜線(2)ifstreamfin;fin.open("a:bbb.dat",ios:in|ios:nocreate);(3)ofstreamofs;ofs.open("a:ccc.dat",ios:app);(4)fstreamfio;fio.open("a:ddd.ran",ios:in|ios:out|ios:binary);,返回本節(jié),10.3.3文件的讀寫,1文件讀寫方法(1)使用流運算符直接讀寫。(2)使用流成員函數(shù)。常用的輸出流成員函數(shù)如下:put函數(shù)write函數(shù)get函數(shù)read函數(shù)getline函數(shù),下面對文件的打開方式作幾點說明:(1)向字符文件輸出數(shù)據(jù)有兩種方法,一種是調(diào)用從ostream流類中繼承來的插入操作符重載函數(shù),另一種是調(diào)用從ostream流類中繼承來的put成員函數(shù)。(2)從打開的字符文件中輸入數(shù)據(jù)到內(nèi)存變量有三種方法。(3)當使用流對象調(diào)用get()成員函數(shù)時,通過判斷返回值是否等于文件結(jié)束符EOF可知文件中的數(shù)據(jù)是否被輸入完畢。,2文本文件的讀寫文本文件只適用于那些解釋為ASCII碼的文件。處理文本文件時將自動作一些字符轉(zhuǎn)換,如輸出換行字符0 x0A時將轉(zhuǎn)換為回車0 x0D與換行0 x0A兩個字符存入文本文件,讀入時也會將回車與換行兩個字符合并為一個換行字符,這樣內(nèi)存中的字符與寫入文件中的字符之間就不再是一一對應關系。文本文件的結(jié)束以ASCII碼的控制字符0 x1A表示。,例10-7:向a盤上的write1.dat文件輸出010之間的整數(shù),含0和10在內(nèi)。#include#include#includevoidmain(void)ofstreamf1("a:/write1.dat");/定義輸出文件流,并打開相應文件,若打開/失敗則f1帶回0值if(!f1)/當f1打開失敗時進行錯誤處理cerr<<"a:/write1.datfilenotopen!"<<endl;exit(1);for(inti=0;i<10;i+)f1<<i<<""/向f1文件流輸出i值f1.close();/關閉f1所對應的文件,例10-9:假定一個結(jié)構(gòu)數(shù)組a中的元素類型pupil包含有表示姓名的字符指針域name和表示成績的整數(shù)域grade,試編寫一個函數(shù)把該數(shù)組中的n個元素輸出到字符文件“a:/write3.dat”中。#include#includevoidArrayOut(pupila,intn)ofstreamf3("a:/write3.dat");if(!file3)/當file3打開失敗時進行錯誤處理cerr<<"Fileofa:/write3.datnotopen!"<<endl;exit(1);,for(inti=0;i<n;i+)file3<<ai.name<<endl<<ai.grade<<endl;file3.close();若已經(jīng)為輸出pupil類型的數(shù)據(jù)定義了如下插入操作符重載函數(shù):ostream”。,例10-10:從例10-7所建立的a:/write1.dat文件中輸入全部數(shù)據(jù)并依次顯示到屏幕上。#include#include#includevoidmain(void)ifstreamf1("a:/write1.dat",ios:in|ios:nocreate);/定義輸入文件流,并打開相應文件,若打開失敗則file1帶回0值if(!file1)/當file1打開失敗時進行錯誤處理cerr<<"a:/write1.datfilenotopen!"<>x)/依次從文件中輸入整數(shù)到x,當讀到的是文件結(jié)束符時條件表達式/的值為0cout<<x<<cout<fn;ifile.open(fn);if(!ifile),cout>pos;if(pos>maxpos)cout<<"Thepositionoffileisntright"<<endl;,elsecharch;ifile.seekg(pos);ifile.get(ch);cout<<ch<<endl;ifile.close();return1;如果需要讀取多個字節(jié)的數(shù)據(jù),則可將ifile.get(ch);改為:ifile.read(char*),返回本節(jié),10.4字符串流,10.4.1字符串流概述10.4.2istrstream類的構(gòu)造函數(shù)10.4.3ostrstream類的構(gòu)造函數(shù),返回首頁,10.4.1字符串流概述,字符串流類包括輸入字符串流類istrstream,輸出字符串流類ostrstream和輸入輸出字符串流類strstream三種。它們都被定義在系統(tǒng)頭文件strstrea.h中。只要在程序中帶有該頭文件,就可以使用任一種字符串流類定義字符串流對象。每個字符串流對象簡稱為字符串流。字符串流對應的訪問空間是內(nèi)存中由用戶定義的字符數(shù)組,而文件流對應的訪問空間是外存上由文件名確定的文件存儲空間。,三種字符串流類的構(gòu)造函數(shù)聲明格式分別如下:istrstream(constchar*buffer);ostrstream(char*buffer,intn);strstream(char*buffer,intn,intmode);,下面給出定義相應字符串流的例子。(1)ostrstreamsout(a1,50);(2)istrstreamsin(a2);(3)strstreamsio(a3,sizeof(a3),ios:in|ios:out);,返回本節(jié),10.4.2istrstream類的構(gòu)造函數(shù),istrstream類的構(gòu)造函數(shù)的原型分別是:istrstream:istrstream(char*s);istrstream:istrstream(char*s,intn);這兩個構(gòu)造函數(shù)的第一個參數(shù)s是一個字符指針或字符數(shù)組,使用該串來初始化要創(chuàng)建的流對象。第一個構(gòu)造函數(shù)是使用所指定的串的全部內(nèi)容來構(gòu)造流對象,而第二個構(gòu)造函數(shù)使用串中前n個字符來構(gòu)造串對象。,下面舉例說明上述構(gòu)造函數(shù)的用法。例10-14:從一個字符串流中輸入用逗號分開的每一個整數(shù)并顯示出來。#includevoidmain()chara="12,34,56,78,90,87,65,43"cout<<a<>ws>>x>>ws;/從流中讀入一個整數(shù),并使用操作符ws讀取/一個整數(shù)前后的空白字符cout<<x<</輸出x的值并后跟一個空格sin.get(ch);/從sin流中讀入一個字符,實際讀取的是,或字符cout<>i;istrstreams2(buf,3);s2>>j;cout<<i+j<=48/從sin流中讀入下一個字符,sout<<<<ends;/向sout流輸出作為結(jié)束符的字符和一個字符串結(jié)束符0cout<<b;/輸出字符串流sout對應的字符串cout<<endl;該程序的運行結(jié)果如下:ab12+34,56*78-90/cd123,ABC45DE:fg67;891234567890123456789,返回本節(jié),

注意事項

本文(《C程序設計》電子教案第10章流類庫與輸入輸出.ppt)為本站會員(max****ui)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng)(點擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網(wǎng)速或其他原因下載失敗請重新下載,重復下載不扣分。




關于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!