C程序設(shè)計電子教案第10章流類庫與輸入輸出

上傳人:仙*** 文檔編號:153446350 上傳時間:2022-09-19 格式:PPT 頁數(shù):59 大?。?45.50KB
收藏 版權(quán)申訴 舉報 下載
C程序設(shè)計電子教案第10章流類庫與輸入輸出_第1頁
第1頁 / 共59頁
C程序設(shè)計電子教案第10章流類庫與輸入輸出_第2頁
第2頁 / 共59頁
C程序設(shè)計電子教案第10章流類庫與輸入輸出_第3頁
第3頁 / 共59頁

下載文檔到電腦,查找使用更方便

10 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《C程序設(shè)計電子教案第10章流類庫與輸入輸出》由會員分享,可在線閱讀,更多相關(guān)《C程序設(shè)計電子教案第10章流類庫與輸入輸出(59頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、C+程序設(shè)計電子教案第10章流類庫與輸入輸出第第10章章 流類庫與輸入輸出流類庫與輸入輸出n10.1 I/O標(biāo)準(zhǔn)流類標(biāo)準(zhǔn)流類n10.2 格式化格式化I/On10.3 文件流文件流n10.4 字符串流字符串流C+程序設(shè)計電子教案第10章流類庫與輸入輸出10.1 I/O標(biāo)準(zhǔn)流類標(biāo)準(zhǔn)流類n預(yù)定義流預(yù)定義流nC+中的流類庫中的流類庫返回首頁C+程序設(shè)計電子教案第10章流類庫與輸入輸出n在在C+語言中,數(shù)據(jù)的輸入和輸出(簡寫為語言中,數(shù)據(jù)的輸入和輸出(簡寫為I/O)包括對標(biāo)準(zhǔn)輸入設(shè)備鍵盤和標(biāo)準(zhǔn)輸出設(shè)備顯示包括對標(biāo)準(zhǔn)輸入設(shè)備鍵盤和標(biāo)準(zhǔn)輸出設(shè)備顯示器、對在外存磁盤上的文件和對內(nèi)存中指定的器、對在外存磁盤上的

2、文件和對內(nèi)存中指定的字符串存儲空間進(jìn)行輸入輸出這三個方面。對字符串存儲空間進(jìn)行輸入輸出這三個方面。對標(biāo)準(zhǔn)輸入設(shè)備和標(biāo)準(zhǔn)輸出設(shè)備的輸入輸出簡稱標(biāo)準(zhǔn)輸入設(shè)備和標(biāo)準(zhǔn)輸出設(shè)備的輸入輸出簡稱為標(biāo)準(zhǔn)為標(biāo)準(zhǔn)I/O,對在外存磁盤上文件的輸入輸出簡對在外存磁盤上文件的輸入輸出簡稱為文件稱為文件I/O,對內(nèi)存中指定的字符串存儲空間對內(nèi)存中指定的字符串存儲空間的輸入輸出簡稱為串的輸入輸出簡稱為串I/O。C+程序設(shè)計電子教案第10章流類庫與輸入輸出nC+中把數(shù)據(jù)之間的傳輸操作稱作流。在中把數(shù)據(jù)之間的傳輸操作稱作流。在C+中,流既可以表示數(shù)據(jù)從內(nèi)存?zhèn)魉偷侥硞€載體中,流既可以表示數(shù)據(jù)從內(nèi)存?zhèn)魉偷侥硞€載體或設(shè)備中,即輸出流

3、;也可以表示數(shù)據(jù)從某個或設(shè)備中,即輸出流;也可以表示數(shù)據(jù)從某個載體或設(shè)備傳送到內(nèi)存緩沖區(qū)變量中,即輸入載體或設(shè)備傳送到內(nèi)存緩沖區(qū)變量中,即輸入流。在進(jìn)行流。在進(jìn)行I/O操作時,首先打開操作,使流和操作時,首先打開操作,使流和文件發(fā)生聯(lián)系,建立聯(lián)系后的文件才允許數(shù)據(jù)文件發(fā)生聯(lián)系,建立聯(lián)系后的文件才允許數(shù)據(jù)流入或流出,輸入或輸出結(jié)束后,使用關(guān)閉操流入或流出,輸入或輸出結(jié)束后,使用關(guān)閉操作使文件與流斷開聯(lián)系。作使文件與流斷開聯(lián)系。C+程序設(shè)計電子教案第10章流類庫與輸入輸出nC+中所有流都是相同的,但文件可以不同。中所有流都是相同的,但文件可以不同。使用流以后,程序用流統(tǒng)一對各種計算機設(shè)備使用流以后

4、,程序用流統(tǒng)一對各種計算機設(shè)備和文件進(jìn)行操作,使程序與設(shè)備、程序與文件和文件進(jìn)行操作,使程序與設(shè)備、程序與文件無關(guān),從而提高了程序設(shè)計的通用性和靈活性。無關(guān),從而提高了程序設(shè)計的通用性和靈活性。也就是說,無論與流相聯(lián)系的實際物理設(shè)備差也就是說,無論與流相聯(lián)系的實際物理設(shè)備差別有多大,流都采用相同的方式運行。這種機別有多大,流都采用相同的方式運行。這種機制使得流可以跨越物理設(shè)備平臺,實現(xiàn)流的透制使得流可以跨越物理設(shè)備平臺,實現(xiàn)流的透明運作,而與實際的物理設(shè)備無關(guān)。例如,往明運作,而與實際的物理設(shè)備無關(guān)。例如,往顯示器上輸出字符和向磁盤文件或打印機輸出顯示器上輸出字符和向磁盤文件或打印機輸出字符,

5、盡管接受輸出的物理設(shè)備不同,但具體字符,盡管接受輸出的物理設(shè)備不同,但具體操作過程是相同的。操作過程是相同的。C+程序設(shè)計電子教案第10章流類庫與輸入輸出預(yù)定義流預(yù)定義流n1cout在在ostream輸出流類中定義有對左移操作符輸出流類中定義有對左移操作符重載的一組重載的一組公用成員函數(shù),函數(shù)的具體聲明格式為:公用成員函數(shù),函數(shù)的具體聲明格式為:ostream&operator重載的一組重載的一組公用成員函數(shù),函數(shù)的具體聲明格式為:公用成員函數(shù),函數(shù)的具體聲明格式為:istream&operator(簡單類型標(biāo)識符簡單類型標(biāo)識符&);C+程序設(shè)計電子教案第10章流類庫與輸入輸出n3cerrce

6、rr類似標(biāo)準(zhǔn)錯誤文件。類似標(biāo)準(zhǔn)錯誤文件。cerr與與cout的差別在于:的差別在于:(1)cerr不能重定向。不能重定向。(2)cerr不能被緩沖,它的輸出總是直接傳達(dá)到標(biāo)準(zhǔn)輸不能被緩沖,它的輸出總是直接傳達(dá)到標(biāo)準(zhǔn)輸出設(shè)備上。出設(shè)備上。4clogclog是不能重定向的,但是可以被緩沖。在某些系統(tǒng)中,是不能重定向的,但是可以被緩沖。在某些系統(tǒng)中,由于緩沖,使用由于緩沖,使用clog代替代替cerr可以改進(jìn)顯示速度??梢愿倪M(jìn)顯示速度。clog Error n;返回本節(jié)C+程序設(shè)計電子教案第10章流類庫與輸入輸出C+中的流類庫中的流類庫nC+語言系統(tǒng)為實現(xiàn)數(shù)據(jù)的輸入和輸出定義了一個龐大的類庫,語言系

7、統(tǒng)為實現(xiàn)數(shù)據(jù)的輸入和輸出定義了一個龐大的類庫,它包括的類主要有它包括的類主要有ios,istream,ostream,iostream,ifstream,ofstream,fstream,istrstream,ostrstream和和strstream等。等。n其中其中ios為根基類,它直接派生四個類:輸入流類為根基類,它直接派生四個類:輸入流類istream、輸出輸出流類流類ostream、文件流基類文件流基類fstreambase和字符串流基類和字符串流基類strstreambase,輸入文件流類輸入文件流類ifstream同時繼承了輸入流類和文同時繼承了輸入流類和文件流基類(當(dāng)然對于根基

8、類是間接繼承),輸出文件流類件流基類(當(dāng)然對于根基類是間接繼承),輸出文件流類ofstream同時繼承了輸出流類和文件流基類,輸入字符串流類同時繼承了輸出流類和文件流基類,輸入字符串流類istrstream同時繼承了輸入流類和字符串流基類,輸出字符串流同時繼承了輸入流類和字符串流基類,輸出字符串流類類ostrstream同時繼承了輸出流類和字符串流基類,輸入輸出流同時繼承了輸出流類和字符串流基類,輸入輸出流類類iostream同時繼承了輸入流類和輸出流類,輸入輸出文件流類同時繼承了輸入流類和輸出流類,輸入輸出文件流類fstream同時繼承了輸入輸出流類和文件流基類,輸入輸出字符串同時繼承了輸入

9、輸出流類和文件流基類,輸入輸出字符串流類流類strstream同時繼承了輸入輸出流類和字符串流基類。同時繼承了輸入輸出流類和字符串流基類。返回本節(jié)C+程序設(shè)計電子教案第10章流類庫與輸入輸出10.2 格式化格式化I/Onios類中的枚舉常量類中的枚舉常量n使用使用ios成員函數(shù)成員函數(shù)n使用使用I/O操作符操作符n檢測流操作的錯誤檢測流操作的錯誤返回首頁C+程序設(shè)計電子教案第10章流類庫與輸入輸出類中的枚舉常量類中的枚舉常量n在根基類在根基類ios中定義有三個用戶需要使用的枚舉類型,由中定義有三個用戶需要使用的枚舉類型,由于它們是在公用成員部分定義的,所以其中的每個枚舉類于它們是在公用成員部分

10、定義的,所以其中的每個枚舉類型常量在加上型常量在加上ios:前綴后都可以為本類成員函數(shù)和所有外前綴后都可以為本類成員函數(shù)和所有外部函數(shù)訪問。部函數(shù)訪問。n在三個枚舉類型中有一個無名枚舉類型,其中定義的每個在三個枚舉類型中有一個無名枚舉類型,其中定義的每個枚舉常量都是用于設(shè)置控制輸入輸出格式的標(biāo)志使用的。枚舉常量都是用于設(shè)置控制輸入輸出格式的標(biāo)志使用的。該枚舉類型定義如下:該枚舉類型定義如下:enum skipws,left,right,internal,dec,oct,hex,showbase,showpoint,uppercase,showpos,scientific,fixed,unitb

11、uf,stdio;C+程序設(shè)計電子教案第10章流類庫與輸入輸出n各枚舉常量的含義如下:各枚舉常量的含義如下:n(1)skipws。n(2)left,right,internal。n(3)dec,oct,hex。n(4)showbase。n(5)showpoint。n(6)uppercase。n(7)showpos。n(8)scientific,fixed。n(9)unitbuf,stdio。返回本節(jié)C+程序設(shè)計電子教案第10章流類庫與輸入輸出使用使用ios成員函數(shù)成員函數(shù)nios類提供成員函數(shù)對流的狀態(tài)進(jìn)行檢測和進(jìn)行輸入輸出格式控制等操類提供成員函數(shù)對流的狀態(tài)進(jìn)行檢測和進(jìn)行輸入輸出格式控制等操

12、作,每個成員函數(shù)的聲明格式和簡要說明如下:作,每個成員函數(shù)的聲明格式和簡要說明如下:int bad();/操作出錯時返回非操作出錯時返回非0值值int eof();/讀取到流中最后的文件結(jié)束符時返回非讀取到流中最后的文件結(jié)束符時返回非0值值int fail();/操作失敗時返回非操作失敗時返回非0值值void clear();/清除清除bad,eof和和fail所對應(yīng)的標(biāo)志狀態(tài),使所對應(yīng)的標(biāo)志狀態(tài),使之恢復(fù)為正常狀態(tài)之恢復(fù)為正常狀態(tài) /值值0,使,使good標(biāo)志狀態(tài)恢復(fù)為標(biāo)志狀態(tài)恢復(fù)為1char fill();/返回當(dāng)前使用的填充字符返回當(dāng)前使用的填充字符char fill(char c);/

13、重新設(shè)置流中用于輸出數(shù)據(jù)的填充字重新設(shè)置流中用于輸出數(shù)據(jù)的填充字符為符為c的值,返回的值,返回 /此前的填充字符。系統(tǒng)預(yù)設(shè)置填充字符為空格此前的填充字符。系統(tǒng)預(yù)設(shè)置填充字符為空格long flags();/返回當(dāng)前用于返回當(dāng)前用于I/O控制的格式狀態(tài)字控制的格式狀態(tài)字C+程序設(shè)計電子教案第10章流類庫與輸入輸出long flags(long f);/重新設(shè)置格式狀態(tài)字為重新設(shè)置格式狀態(tài)字為f的值,返回此前的格式狀態(tài)字的值,返回此前的格式狀態(tài)字int good();/操作正常時返回非操作正常時返回非0值,當(dāng)操作出錯、失敗和讀到文件值,當(dāng)操作出錯、失敗和讀到文件 /結(jié)束符時均為不正常,則返回結(jié)束符

14、時均為不正常,則返回0int precision();/返回浮點數(shù)輸出精度,即輸出的有效數(shù)字的位數(shù)返回浮點數(shù)輸出精度,即輸出的有效數(shù)字的位數(shù)int precision(int n);/設(shè)置浮點數(shù)的輸出精度為設(shè)置浮點數(shù)的輸出精度為n,返回此前的輸出精度。系統(tǒng)預(yù)設(shè)返回此前的輸出精度。系統(tǒng)預(yù)設(shè) /置的輸出精度為置的輸出精度為6,即輸出的浮點數(shù)最多具有,即輸出的浮點數(shù)最多具有6位為有效數(shù)字位為有效數(shù)字int rdstate();/操作正常時返回操作正常時返回0,否則返回非,否則返回非0值,它與值,它與good()正好相反正好相反long setf(long f);/根據(jù)參數(shù)根據(jù)參數(shù)f設(shè)置相應(yīng)的格式化標(biāo)

15、志,返回此前的設(shè)置。該參數(shù)設(shè)置相應(yīng)的格式化標(biāo)志,返回此前的設(shè)置。該參數(shù)/f所對應(yīng)的實參為無名枚舉類型中的枚舉常量(又稱格式化常所對應(yīng)的實參為無名枚舉類型中的枚舉常量(又稱格式化常/量),可以同時使用一個或多個常量,每兩個常量之間要用按位或量),可以同時使用一個或多個常量,每兩個常量之間要用按位或/操作符連接。如需要左對齊輸出,并使數(shù)值中的字母大寫時,操作符連接。如需要左對齊輸出,并使數(shù)值中的字母大寫時,/則調(diào)用該函數(shù)的實參為則調(diào)用該函數(shù)的實參為ios:left|ios:uppercaseC+程序設(shè)計電子教案第10章流類庫與輸入輸出long unsetf(long f);/根據(jù)參數(shù)根據(jù)參數(shù)f清除

16、相應(yīng)的格式化標(biāo)清除相應(yīng)的格式化標(biāo)志,返回此前的設(shè)置。如要志,返回此前的設(shè)置。如要/清除此前的左對齊輸出設(shè)置,恢復(fù)默認(rèn)的右對齊輸出設(shè)置,清除此前的左對齊輸出設(shè)置,恢復(fù)默認(rèn)的右對齊輸出設(shè)置,/則調(diào)用該函數(shù)的實參為則調(diào)用該函數(shù)的實參為ios:leftint width();/返回當(dāng)前的輸出域?qū)?。若返回?shù)值返回當(dāng)前的輸出域?qū)挕H舴祷財?shù)值0則表則表明沒為剛才輸出的數(shù)明沒為剛才輸出的數(shù)/值設(shè)置輸出域?qū)?。輸出域?qū)捠侵篙敵龅闹翟诹髦兴加械淖止?jié)值設(shè)置輸出域?qū)?。輸出域?qū)捠侵篙敵龅闹翟诹髦兴加械淖止?jié)數(shù)數(shù)int width(int w);/設(shè)置下一個數(shù)據(jù)值的輸出域?qū)挒樵O(shè)置下一個數(shù)據(jù)值的輸出域?qū)挒閣,返回為輸出上一

17、個數(shù)據(jù)值返回為輸出上一個數(shù)據(jù)值/所規(guī)定的域?qū)?,若無規(guī)定則返回所規(guī)定的域?qū)?,若無規(guī)定則返回0。注意:此設(shè)置不是一直有。注意:此設(shè)置不是一直有/效,而只是對下一個輸出數(shù)據(jù)有效效,而只是對下一個輸出數(shù)據(jù)有效C+程序設(shè)計電子教案第10章流類庫與輸入輸出n例例10-2:給出以下程序的運行結(jié)果。給出以下程序的運行結(jié)果。#includevoid main()int x=123;double y=-3.456789;coutx=;cout.width(10);/設(shè)置輸出下一個數(shù)設(shè)置輸出下一個數(shù)據(jù)的域?qū)挒閾?jù)的域?qū)挒?0 coutx;/按默認(rèn)的右對齊輸出,剩余按默認(rèn)的右對齊輸出,剩余位置填充空格字符位置填充空格字

18、符 couty=;cout.width(10);/設(shè)置輸出下一個數(shù)設(shè)置輸出下一個數(shù)據(jù)的域?qū)挒閾?jù)的域?qū)挒?0 coutyendl;cout.setf(ios:left);/設(shè)置按左對齊輸出設(shè)置按左對齊輸出C+程序設(shè)計電子教案第10章流類庫與輸入輸出 coutx=;cout.width(10);coutx;couty=;cout.width(10);coutyendl;cout.fill(*);/設(shè)置填充字符為設(shè)置填充字符為*cout.precision(3);/設(shè)置浮點數(shù)輸出精度為設(shè)置浮點數(shù)輸出精度為3 cout.setf(ios:showpos);/設(shè)置正數(shù)的正號輸出設(shè)置正數(shù)的正號輸出 cou

19、tx=;cout.width(10);coutx;couty=;cout.width(10);coutyendl;C+程序設(shè)計電子教案第10章流類庫與輸入輸出此程序運行結(jié)果如下:此程序運行結(jié)果如下:x=123y=-3.45679x=123 y=-3.45679x=+123*y=-3.46*C+程序設(shè)計電子教案第10章流類庫與輸入輸出n例例10-3:給出以下程序的運行結(jié)果。給出以下程序的運行結(jié)果。#includevoid main()float x=12,y=-3.456;coutx yendl;cout.setf(ios:showpoint);/強制顯示小數(shù)點和無效強制顯示小數(shù)點和無效0 co

20、utx yendl;cout.unsetf(ios:showpoint);/恢復(fù)默認(rèn)輸出恢復(fù)默認(rèn)輸出 cout.setf(ios:scientific);/設(shè)置按科學(xué)表示法輸出設(shè)置按科學(xué)表示法輸出 coutx yendl;cout.setf(ios:fixed);/設(shè)置按定點表示法輸出設(shè)置按定點表示法輸出 coutx yendl;C+程序設(shè)計電子教案第10章流類庫與輸入輸出程序運行結(jié)果如下:程序運行結(jié)果如下:12-3.45612.0000-3.456001.200000e+001-3.456000e+00012-3.456返回本節(jié)C+程序設(shè)計電子教案第10章流類庫與輸入輸出使用使用I/O操作符

21、操作符n數(shù)據(jù)輸入輸出的格式控制還有更簡便的形式,數(shù)據(jù)輸入輸出的格式控制還有更簡便的形式,就是使用系統(tǒng)頭文件就是使用系統(tǒng)頭文件iomanip.h中提供的操作中提供的操作符。使用這些操縱符不需要調(diào)用成員函數(shù),只符。使用這些操縱符不需要調(diào)用成員函數(shù),只要把它們作為插入操作符要把它們作為插入操作符)的輸出對象即可。)的輸出對象即可。C+程序設(shè)計電子教案第10章流類庫與輸入輸出n例例10-4:給出以下程序的運行結(jié)果。給出以下程序的運行結(jié)果。#include /因因iomanip.h中包含有中包含有iostream.h,所以該命令所以該命令可省略可省略#includevoid main()int x=12

22、,y=345,z=6789;coutx y zendl;/按十進(jìn)制輸出按十進(jìn)制輸出 coutoctx y zendl;/按八進(jìn)制輸出按八進(jìn)制輸出 couthexx y zendl;/按十六進(jìn)制輸出按十六進(jìn)制輸出 coutsetiosflags(ios:showbase|ios:uppercase);/設(shè)置基指示符和數(shù)值中的字母大寫輸出設(shè)置基指示符和數(shù)值中的字母大寫輸出 coutx y zendl;/仍按十六進(jìn)制輸出仍按十六進(jìn)制輸出 coutresetiosflags(ios:showbase|ios:uppercase);/取消基指示符和數(shù)值中的字母大寫輸出取消基指示符和數(shù)值中的字母大寫輸出

23、coutx y zendl;/仍按十六進(jìn)制輸出仍按十六進(jìn)制輸出 coutdecx y zendl;/按十進(jìn)制輸出按十進(jìn)制輸出C+程序設(shè)計電子教案第10章流類庫與輸入輸出n例例10-5:給出以下程序的運行結(jié)果。給出以下程序的運行結(jié)果。#include#includevoid main()int x=123;double y=-3.456789;coutx=setw(10)x;couty=setw(10)yendl;coutsetiosflags(ios:left);/設(shè)置按左對齊輸出設(shè)置按左對齊輸出 coutx=setw(10)x;couty=setw(10)yendl;C+程序設(shè)計電子教案第1

24、0章流類庫與輸入輸出coutsetfill(*);/設(shè)置填充字符為設(shè)置填充字符為*coutsetprecision(3);/設(shè)置浮點數(shù)輸出精度為設(shè)置浮點數(shù)輸出精度為3 coutsetiosflags(ios:showpos);/設(shè)置正數(shù)的正號輸出設(shè)置正數(shù)的正號輸出 coutx=setw(10)x;couty=setw(10)yendl;coutresetiosflags(ios:left|ios:showpos);coutsetfill();返回本節(jié)C+程序設(shè)計電子教案第10章流類庫與輸入輸出檢測流操作的錯誤檢測流操作的錯誤在在I/O流的操作過程中可能出現(xiàn)各種錯誤,每一個流都有一個狀態(tài)標(biāo)志字,

25、以指示是流的操作過程中可能出現(xiàn)各種錯誤,每一個流都有一個狀態(tài)標(biāo)志字,以指示是否發(fā)生了錯誤以及出現(xiàn)了哪種類型的錯誤,這種處理技術(shù)與格式控制標(biāo)志字是否發(fā)生了錯誤以及出現(xiàn)了哪種類型的錯誤,這種處理技術(shù)與格式控制標(biāo)志字是相同的。相同的。ios類定義了以下枚舉類型:類定義了以下枚舉類型:enum io_state goodbit=0 x00,/不設(shè)置任何位,一切正常不設(shè)置任何位,一切正常 eofbit =0 x01,/輸入流已經(jīng)結(jié)束,無字符可讀入輸入流已經(jīng)結(jié)束,無字符可讀入 failbit =0 x02,/上次讀上次讀/寫操作失敗,但流仍可使用寫操作失敗,但流仍可使用 badbit =0 x04,/試圖

26、作無效的讀試圖作無效的讀/寫操作,流不再可用寫操作,流不再可用 hardfail=0 x80 /不可恢復(fù)的嚴(yán)重錯誤不可恢復(fù)的嚴(yán)重錯誤;返回本節(jié)C+程序設(shè)計電子教案第10章流類庫與輸入輸出10.3 文件流文件流n文件的概念文件的概念n文件的打開與關(guān)閉文件的打開與關(guān)閉n文件的讀寫文件的讀寫返回首頁C+程序設(shè)計電子教案第10章流類庫與輸入輸出文件的概念文件的概念n在磁盤上保存的信息是按文件的形式組織的,在磁盤上保存的信息是按文件的形式組織的,每個文件都對應(yīng)一個文件名,并且屬于某個物每個文件都對應(yīng)一個文件名,并且屬于某個物理盤或邏輯盤的目錄層次結(jié)構(gòu)中一個確定的目理盤或邏輯盤的目錄層次結(jié)構(gòu)中一個確定的目

27、錄之下。一個文件名由文件主名和擴展名兩部錄之下。一個文件名由文件主名和擴展名兩部分組成,它們之間用圓點(即小數(shù)點)分開,分組成,它們之間用圓點(即小數(shù)點)分開,擴展名可以省略,當(dāng)省略時也要省略掉前面的擴展名可以省略,當(dāng)省略時也要省略掉前面的圓點。文件主名是由用戶命名的一個有效的圓點。文件主名是由用戶命名的一個有效的C+標(biāo)識符,為了同其他軟件系統(tǒng)兼容,一般標(biāo)識符,為了同其他軟件系統(tǒng)兼容,一般讓文件主名為不超過讓文件主名為不超過8個有效字符的標(biāo)識符,個有效字符的標(biāo)識符,同時為了便于記憶和使用,最好使文件主名的同時為了便于記憶和使用,最好使文件主名的含義與所存的文件內(nèi)容相一致。含義與所存的文件內(nèi)容相

28、一致。C+程序設(shè)計電子教案第10章流類庫與輸入輸出n在在C+程序中使用的保存數(shù)據(jù)的文件按存儲格程序中使用的保存數(shù)據(jù)的文件按存儲格式分為兩種類型,一種為字符格式文件,簡稱式分為兩種類型,一種為字符格式文件,簡稱字符文件,另一種為內(nèi)部格式文件,簡稱字節(jié)字符文件,另一種為內(nèi)部格式文件,簡稱字節(jié)文件。字符文件又稱文件。字符文件又稱ASCII碼文件或文本文件,碼文件或文本文件,字節(jié)文件又稱二進(jìn)制文件。字節(jié)文件又稱二進(jìn)制文件。C+程序設(shè)計電子教案第10章流類庫與輸入輸出nC+程序文件,利用其他各種語言編寫的程序程序文件,利用其他各種語言編寫的程序文件,用戶建立的各種文本文件,各種軟件系文件,用戶建立的各種

29、文本文件,各種軟件系統(tǒng)中的幫助文件等,因都是統(tǒng)中的幫助文件等,因都是ASCII碼文件,所碼文件,所以都可以在以都可以在C+中作為字符文件使用。中作為字符文件使用。nC+系統(tǒng)把各種外部設(shè)備也看作為相應(yīng)的文件。系統(tǒng)把各種外部設(shè)備也看作為相應(yīng)的文件。如把標(biāo)準(zhǔn)輸入設(shè)備鍵盤和標(biāo)準(zhǔn)輸出設(shè)備顯示器如把標(biāo)準(zhǔn)輸入設(shè)備鍵盤和標(biāo)準(zhǔn)輸出設(shè)備顯示器看作為標(biāo)準(zhǔn)輸入輸出文件,其文件名(又稱設(shè)看作為標(biāo)準(zhǔn)輸入輸出文件,其文件名(又稱設(shè)備名)為備名)為con,當(dāng)向它輸出信息時就是輸出到當(dāng)向它輸出信息時就是輸出到顯示器,當(dāng)從它輸入信息時就是從鍵盤輸入。顯示器,當(dāng)從它輸入信息時就是從鍵盤輸入。返回本節(jié)C+程序設(shè)計電子教案第10章流類

30、庫與輸入輸出文件的打開與關(guān)閉文件的打開與關(guān)閉流可以分為流可以分為3類:輸入流、輸出流以及輸入類:輸入流、輸出流以及輸入/輸出輸出流,相應(yīng)地必須將流說明為流,相應(yīng)地必須將流說明為ifstream、ofstream以及以及fstream類的對象。例如:類的對象。例如:ifstream ifile;/說明一個輸入流說明一個輸入流ofstream ofile;/說明一個輸出流說明一個輸出流fstream iofile;/說明一個輸入說明一個輸入/輸出流輸出流C+程序設(shè)計電子教案第10章流類庫與輸入輸出說明了流對象之后,可使用函數(shù)說明了流對象之后,可使用函數(shù)open()打開文件。打開文件。文件的打開即是

31、在流與文件之間建立一個連接。文件的打開即是在流與文件之間建立一個連接。open()的函數(shù)原型為:的函數(shù)原型為:void open(const char*mode,int prot=);C+程序設(shè)計電子教案第10章流類庫與輸入輸出ios:in 打開文件進(jìn)行讀操作打開文件進(jìn)行讀操作ios:out 打開文件進(jìn)行寫操作打開文件進(jìn)行寫操作ios:ate 打開時文件指針定位到文件尾打開時文件指針定位到文件尾ios:app 添加模式,所有增加都在文件添加模式,所有增加都在文件尾部進(jìn)行尾部進(jìn)行ios:trunc 如果文件已存在則清空原文件如果文件已存在則清空原文件ios:nocreate 如果文件不存在則打開

32、失敗如果文件不存在則打開失敗ios:noreplace 如果文件存在則打開失敗如果文件存在則打開失敗ios:binary 二進(jìn)制文件(非文本文件)二進(jìn)制文件(非文本文件)C+程序設(shè)計電子教案第10章流類庫與輸入輸出n下面對文件的打開方式作幾點說明:下面對文件的打開方式作幾點說明:(1)文件的打開方式可以為上述的一個枚舉常量,也可)文件的打開方式可以為上述的一個枚舉常量,也可以為多個枚舉常量構(gòu)成的按位或表達(dá)式。以為多個枚舉常量構(gòu)成的按位或表達(dá)式。(2)使用)使用open成員函數(shù)打開一個文件時,若由字符指針成員函數(shù)打開一個文件時,若由字符指針參數(shù)所指定的文件不存在,則建立該文件。參數(shù)所指定的文件不

33、存在,則建立該文件。(3)當(dāng)打開方式中不含有)當(dāng)打開方式中不含有ios:ate或或ios:app選項時,則選項時,則文件指針被自動移到文件的開始位置,即字節(jié)地址為文件指針被自動移到文件的開始位置,即字節(jié)地址為0的位置。的位置。(4)當(dāng)用輸入文件流對象調(diào)用)當(dāng)用輸入文件流對象調(diào)用open成員函數(shù)打開一個文成員函數(shù)打開一個文件時,打開方式參數(shù)可以省略,默認(rèn)按件時,打開方式參數(shù)可以省略,默認(rèn)按ios:in方式打方式打開,若打開方式參數(shù)中不含有開,若打開方式參數(shù)中不含有ios:in選項時,則會自選項時,則會自動被加上。動被加上。C+程序設(shè)計電子教案第10章流類庫與輸入輸出n下面給出定義文件流對象和打開

34、文件的一些例子:下面給出定義文件流對象和打開文件的一些例子:(1)ofstream fout;fout.open(a:aaa.dat);/字符串中的雙反斜線表示一個字符串中的雙反斜線表示一個反斜線反斜線(2)ifstream fin;fin.open(a:bbb.dat,ios:in|ios:nocreate);(3)ofstream ofs;ofs.open(a:ccc.dat,ios:app);(4)fstream fio;fio.open(a:ddd.ran,ios:in|ios:out|ios:binary);返回本節(jié)C+程序設(shè)計電子教案第10章流類庫與輸入輸出文件的讀寫文件的讀寫n1

35、文件讀寫方法文件讀寫方法n(1)使用流運算符直接讀寫。)使用流運算符直接讀寫。n(2)使用流成員函數(shù)。)使用流成員函數(shù)。常用的輸出流成員函數(shù)如下:常用的輸出流成員函數(shù)如下:put函數(shù)函數(shù) write函數(shù)函數(shù) get函數(shù)函數(shù) read函數(shù)函數(shù) getline函數(shù)函數(shù) C+程序設(shè)計電子教案第10章流類庫與輸入輸出n下面對文件的打開方式作幾點說明:下面對文件的打開方式作幾點說明:n(1)向字符文件輸出數(shù)據(jù)有兩種方法,一種)向字符文件輸出數(shù)據(jù)有兩種方法,一種是調(diào)用從是調(diào)用從ostream流類中繼承來的插入操作符流類中繼承來的插入操作符重載函數(shù),另一種是調(diào)用從重載函數(shù),另一種是調(diào)用從ostream流類中

36、繼流類中繼承來的承來的put成員函數(shù)。成員函數(shù)。n(2)從打開的字符文件中輸入數(shù)據(jù)到內(nèi)存變)從打開的字符文件中輸入數(shù)據(jù)到內(nèi)存變量有三種方法。量有三種方法。n(3)當(dāng)使用流對象調(diào)用)當(dāng)使用流對象調(diào)用get()成員函數(shù)時,通成員函數(shù)時,通過判斷返回值是否等于文件結(jié)束符過判斷返回值是否等于文件結(jié)束符EOF可知文可知文件中的數(shù)據(jù)是否被輸入完畢。件中的數(shù)據(jù)是否被輸入完畢。C+程序設(shè)計電子教案第10章流類庫與輸入輸出n2文本文件的讀寫文本文件的讀寫n文本文件只適用于那些解釋為文本文件只適用于那些解釋為ASCII碼的文件。碼的文件。處理文本文件時將自動作一些字符轉(zhuǎn)換,如輸處理文本文件時將自動作一些字符轉(zhuǎn)換,

37、如輸出換行字符出換行字符0 x0A時將轉(zhuǎn)換為回車時將轉(zhuǎn)換為回車0 x0D與換行與換行0 x0A兩個字符存入文本文件,讀入時也會將回兩個字符存入文本文件,讀入時也會將回車與換行兩個字符合并為一個換行字符,這樣車與換行兩個字符合并為一個換行字符,這樣內(nèi)存中的字符與寫入文件中的字符之間就不再內(nèi)存中的字符與寫入文件中的字符之間就不再是一一對應(yīng)關(guān)系。文本文件的結(jié)束以是一一對應(yīng)關(guān)系。文本文件的結(jié)束以ASCII碼碼的控制字符的控制字符0 x1A表示。表示。C+程序設(shè)計電子教案第10章流類庫與輸入輸出n例例10-7:向向a盤上的盤上的write1.dat文件輸出文件輸出010之間的整數(shù),含之間的整數(shù),含0和和

38、10在內(nèi)。在內(nèi)。#include#include#includevoid main(void)ofstream f1(a:/write1.dat);/定義輸出文件流,并打開相應(yīng)文件,若打開定義輸出文件流,并打開相應(yīng)文件,若打開 /失敗則失敗則f1帶回帶回0值值 if(!f1)/當(dāng)當(dāng)f1打開失敗時進(jìn)行錯誤處理打開失敗時進(jìn)行錯誤處理 cerra:/write1.dat open!endl;exit(1);for(int i=0;i10;i+)f1i;/向向f1文件流輸出文件流輸出i值值 f1.close();/關(guān)閉關(guān)閉f1所對應(yīng)的文件所對應(yīng)的文件C+程序設(shè)計電子教案第10章流類庫與輸入輸出n例例1

39、0-9:假定一個結(jié)構(gòu)數(shù)組假定一個結(jié)構(gòu)數(shù)組a中的元素類型中的元素類型pupil包含有表示姓名包含有表示姓名的字符指針域的字符指針域name和表示成績的整數(shù)域和表示成績的整數(shù)域grade,試編寫一個函數(shù)試編寫一個函數(shù)把該數(shù)組中的把該數(shù)組中的n個元素輸出到字符文件個元素輸出到字符文件“”中。中。#include#includevoid ArrayOut(pupil a,int n)ofstream f3(a:/write3.dat);if(!file3)/當(dāng)當(dāng)file3打開失敗時進(jìn)行錯誤處打開失敗時進(jìn)行錯誤處理理 cerr a:/write3.dat not open!endl;exit(1);C+

40、程序設(shè)計電子教案第10章流類庫與輸入輸出 for(int i=0;in;i+)file3ai.nameendlai.gradeendl;();若已經(jīng)為輸出若已經(jīng)為輸出pupil類型的數(shù)據(jù)定義了如下插入操作符重載函數(shù):類型的數(shù)據(jù)定義了如下插入操作符重載函數(shù):ostream&operator(ostream&ostr,pupil&x)ostrx.nameendlx.gradeendl;return ostr;則可將上述函數(shù)中則可將上述函數(shù)中for循環(huán)體語句修改為循環(huán)體語句修改為“file3ai;”。C+程序設(shè)計電子教案第10章流類庫與輸入輸出n例例10-10:從例從例10-7所建立的文件中輸入全部

41、數(shù)據(jù)并依次顯示到屏幕上。所建立的文件中輸入全部數(shù)據(jù)并依次顯示到屏幕上。#include#include#includevoid main(void)ifstream f1(a:/write1.dat,ios:in|ios:nocreate);/定義輸入文件流,并打開相應(yīng)文件,若打開失定義輸入文件流,并打開相應(yīng)文件,若打開失敗則敗則file1帶回帶回0值值 if(!file1)/當(dāng)當(dāng)file1打開失敗時進(jìn)行錯誤處理打開失敗時進(jìn)行錯誤處理 cerra:/write1.dat open!x)/依次從文件中輸入整數(shù)到依次從文件中輸入整數(shù)到x,當(dāng)讀到的當(dāng)讀到的是文件結(jié)束符時條件表達(dá)式是文件結(jié)束符時條件表

42、達(dá)式 /的值為的值為0 coutx;coutendl;();/關(guān)閉關(guān)閉file1所對應(yīng)的文件所對應(yīng)的文件該程序運行結(jié)果如下:該程序運行結(jié)果如下:0 1 2 3 4 5 6 7 8 9 C+程序設(shè)計電子教案第10章流類庫與輸入輸出n3二進(jìn)制文件的讀寫二進(jìn)制文件的讀寫n二進(jìn)制文件不同于文本文件,它可用于任何類二進(jìn)制文件不同于文本文件,它可用于任何類型的文件(包括文本文件),讀寫二進(jìn)制文件型的文件(包括文本文件),讀寫二進(jìn)制文件的字符不作任何轉(zhuǎn)換,讀寫的字符與文件之間的字符不作任何轉(zhuǎn)換,讀寫的字符與文件之間是完全一致的。是完全一致的。n一般地,對二進(jìn)制文件的讀寫可采用兩種方法:一般地,對二進(jìn)制文件的

43、讀寫可采用兩種方法:一種是使用一種是使用get()和和put();另一種是使用另一種是使用read()和和write()。C+程序設(shè)計電子教案第10章流類庫與輸入輸出n例例10-12:二進(jìn)制文件讀寫的示例程序。二進(jìn)制文件讀寫的示例程序。#includestruct Date int month,day,year;void main()Date dt=02,07,1975;Ofstream ofile(“dsc.dat”,ios:binary);O(char*)&dt,sizeof dt);C+程序設(shè)計電子教案第10章流類庫與輸入輸出n4文件的隨機讀寫文件的隨機讀寫n(1)輸出流隨機訪問函數(shù)。)

44、輸出流隨機訪問函數(shù)。n(2)輸入流隨機訪問函數(shù)。)輸入流隨機訪問函數(shù)。C+程序設(shè)計電子教案第10章流類庫與輸入輸出n例例10-13:編寫一個程序,隨機讀寫指定位置上的字符。編寫一個程序,隨機讀寫指定位置上的字符。#include#include int main()ifstream ifile;char fn20;coutfn;i(fn);if(!ifile)C+程序設(shè)計電子教案第10章流類庫與輸入輸出 coutfnCannot open this fileendl;return 0;i(0,ios:end);int maxpos=i();int pos;coutpos;if(posmaxpo

45、s)coutThe position of t rightendl;C+程序設(shè)計電子教案第10章流類庫與輸入輸出 else char ch;i(pos);i(ch);coutchendl;i();return 1;如果需要讀取多個字節(jié)的數(shù)據(jù),則可將如果需要讀取多個字節(jié)的數(shù)據(jù),則可將i(ch);改為:改為:i(char*)&ch,sizeof(char);返回本節(jié)C+程序設(shè)計電子教案第10章流類庫與輸入輸出10.4 字符串流字符串流n字符串流概述字符串流概述nistrstream類的構(gòu)造函數(shù)類的構(gòu)造函數(shù)nostrstream類的構(gòu)造函數(shù)類的構(gòu)造函數(shù)返回首頁C+程序設(shè)計電子教案第10章流類庫與輸入

46、輸出字符串流概述字符串流概述n字符串流類包括輸入字符串流類字符串流類包括輸入字符串流類istrstream,輸出字符串流類輸出字符串流類ostrstream和輸入輸出字符串和輸入輸出字符串流類流類strstream三種。它們都被定義在系統(tǒng)頭三種。它們都被定義在系統(tǒng)頭文件文件strstrea.h中。只要在程序中帶有該頭文中。只要在程序中帶有該頭文件,就可以使用任一種字符串流類定義字符串件,就可以使用任一種字符串流類定義字符串流對象。每個字符串流對象簡稱為字符串流。流對象。每個字符串流對象簡稱為字符串流。n字符串流對應(yīng)的訪問空間是內(nèi)存中由用戶定義字符串流對應(yīng)的訪問空間是內(nèi)存中由用戶定義的字符數(shù)組,

47、而文件流對應(yīng)的訪問空間是外存的字符數(shù)組,而文件流對應(yīng)的訪問空間是外存上由文件名確定的文件存儲空間。上由文件名確定的文件存儲空間。C+程序設(shè)計電子教案第10章流類庫與輸入輸出三種字符串流類的構(gòu)造函數(shù)聲明格式分別如下:三種字符串流類的構(gòu)造函數(shù)聲明格式分別如下:istrstream(const char*buffer);ostrstream(char*buffer,int n);strstream(char*buffer,int n,int mode);C+程序設(shè)計電子教案第10章流類庫與輸入輸出下面給出定義相應(yīng)字符串流的例子。下面給出定義相應(yīng)字符串流的例子。(1)ostrstream sout(a

48、1,50);(2)istrstream sin(a2);(3)strstream sio(a3,sizeof(a3),ios:in|ios:out);返回本節(jié)C+程序設(shè)計電子教案第10章流類庫與輸入輸出istrstream類的構(gòu)造函數(shù)類的構(gòu)造函數(shù)istrstream類的構(gòu)造函數(shù)的原型分別是:類的構(gòu)造函數(shù)的原型分別是:istrstream:istrstream(char*s);istrstream:istrstream(char*s,int n);這兩個構(gòu)造函數(shù)的第一個參數(shù)這兩個構(gòu)造函數(shù)的第一個參數(shù)s是一個字符指針是一個字符指針或字符數(shù)組,使用該串來初始化要創(chuàng)建的流對或字符數(shù)組,使用該串來初始化

49、要創(chuàng)建的流對象。第一個構(gòu)造函數(shù)是使用所指定的串的全部象。第一個構(gòu)造函數(shù)是使用所指定的串的全部內(nèi)容來構(gòu)造流對象,而第二個構(gòu)造函數(shù)使用串內(nèi)容來構(gòu)造流對象,而第二個構(gòu)造函數(shù)使用串中前中前n個字符來構(gòu)造串對象。個字符來構(gòu)造串對象。C+程序設(shè)計電子教案第10章流類庫與輸入輸出n下面舉例說明上述構(gòu)造函數(shù)的用法。下面舉例說明上述構(gòu)造函數(shù)的用法。例例10-14:從一個字符串流中輸入用逗號分開的每一個整數(shù)并顯示出從一個字符串流中輸入用逗號分開的每一個整數(shù)并顯示出來。來。#includevoid main()char a=12,34,56,78,90 ,87,65,43;coutawsxws;/從流中讀入一個整數(shù)

50、,從流中讀入一個整數(shù),并使用操作符并使用操作符ws讀取讀取 /一個整數(shù)前后的空白字符一個整數(shù)前后的空白字符 coutx;/輸出輸出x的值并后跟一個空的值并后跟一個空格格 sin.get(ch);/從從sin流中讀入一個字符,實際流中讀入一個字符,實際讀取的是讀取的是,或或字符字符 coutendl;此程序的運行結(jié)果為:此程序的運行結(jié)果為:12,34,56,78,90 ,87,65,4312 34 56 78 90 87 65 43C+程序設(shè)計電子教案第10章流類庫與輸入輸出n例例10-15:分析下列程序的運行結(jié)果。分析下列程序的運行結(jié)果。#include#include void main()

51、char buf=1234567;int i,j;istrstream s1(buf);s1i;istrstream s2(buf,3);s2j;couti+jendl;此程序的運行結(jié)果為:此程序的運行結(jié)果為:返回本節(jié)C+程序設(shè)計電子教案第10章流類庫與輸入輸出ostrstream類的構(gòu)造函數(shù)類的構(gòu)造函數(shù)ostrstream類的構(gòu)造函數(shù)的原型分別是:類的構(gòu)造函數(shù)的原型分別是:ostrstream:ostrstream();ostrstream:ostrstream(char*s,int n,int mode=ios:out);ostrstream類還提供了如下成員函數(shù):類還提供了如下成員函數(shù):

52、int ostrstream:pcount();char*ostrstream:str();C+程序設(shè)計電子教案第10章流類庫與輸入輸出n例例10-16:從一個字符串中得到每一個整數(shù),并把它們依次存入到一個字從一個字符串中得到每一個整數(shù),并把它們依次存入到一個字符串流中,最后向屏幕輸出這個字符串流。符串流中,最后向屏幕輸出這個字符串流。#includevoid main()char a50;char b50;istrstream sin(a);/定義一個輸入字符串流定義一個輸入字符串流sin,使用的字符數(shù)組為使用的字符數(shù)組為a ostrstream sout(b,sizeof(b);/定義一個

53、輸出字符串流定義一個輸出字符串流sout,使用的字符數(shù)組為使用的字符數(shù)組為b cin.getline(a,sizeof(a);/假定從鍵盤上輸入的字符串為假定從鍵盤上輸入的字符串為 ab12+34,56*78-90/cd123,ABC45DE:fg67;89 char ch=;C+程序設(shè)計電子教案第10章流類庫與輸入輸出int x;while(ch!=)/使用使用字符作為字符串流結(jié)束標(biāo)志字符作為字符串流結(jié)束標(biāo)志 if(ch=48&chx;/從流中讀入一個整數(shù),當(dāng)碰到非數(shù)字字從流中讀入一個整數(shù),當(dāng)碰到非數(shù)字字符時符時 /則就認(rèn)為一個整數(shù)結(jié)束。則就認(rèn)為一個整數(shù)結(jié)束。soutx;/將將x輸出到字符串流輸出到字符串流sout中中 sin.get(ch);/從從sin流中讀入下一個字符流中讀入下一個字符C+程序設(shè)計電子教案第10章流類庫與輸入輸出 soutends;/向向sout流輸出作為流輸出作為結(jié)束符的結(jié)束符的字符和一個字符串結(jié)束符字符和一個字符串結(jié)束符0 coutb;/輸出字符串流輸出字符串流sout對應(yīng)的對應(yīng)的字符串字符串 coutendl;該程序的運行結(jié)果如下:該程序的運行結(jié)果如下:ab12+34,56*78-90/cd123,ABC45DE:fg67;8912 34 56 78 90 123 45 67 89 返回本節(jié)

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(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ù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!