第11章流類庫(kù)與輸入輸出

上傳人:仙*** 文檔編號(hào):34397884 上傳時(shí)間:2021-10-21 格式:PPT 頁(yè)數(shù):78 大?。?86.02KB
收藏 版權(quán)申訴 舉報(bào) 下載
第11章流類庫(kù)與輸入輸出_第1頁(yè)
第1頁(yè) / 共78頁(yè)
第11章流類庫(kù)與輸入輸出_第2頁(yè)
第2頁(yè) / 共78頁(yè)
第11章流類庫(kù)與輸入輸出_第3頁(yè)
第3頁(yè) / 共78頁(yè)

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

10 積分

下載資源

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

資源描述:

《第11章流類庫(kù)與輸入輸出》由會(huì)員分享,可在線閱讀,更多相關(guān)《第11章流類庫(kù)與輸入輸出(78頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、第第1111章章 流類庫(kù)與輸入流類庫(kù)與輸入/ /輸出輸出C+語(yǔ)言程序設(shè)計(jì) 前一頁(yè) 休息2 of 78本章主要內(nèi)容本章主要內(nèi)容lI/O流的概念流的概念l輸出流輸出流l輸入流輸入流l輸入輸入/輸出流輸出流 前一頁(yè) 休息3 of 78I/O流的概念流的概念l當(dāng)程序與外界環(huán)境進(jìn)行信息交換時(shí),存在著兩個(gè)當(dāng)程序與外界環(huán)境進(jìn)行信息交換時(shí),存在著兩個(gè)對(duì)象,一個(gè)是對(duì)象,一個(gè)是程序中的對(duì)象程序中的對(duì)象,另一個(gè)是,另一個(gè)是文件對(duì)象文件對(duì)象。l流是一種抽象,它負(fù)責(zé)在數(shù)據(jù)的流是一種抽象,它負(fù)責(zé)在數(shù)據(jù)的生產(chǎn)者生產(chǎn)者和數(shù)據(jù)的和數(shù)據(jù)的消費(fèi)者消費(fèi)者之間建立聯(lián)系,并管理數(shù)據(jù)的流動(dòng)。之間建立聯(lián)系,并管理數(shù)據(jù)的流動(dòng)。l程序建立一個(gè)程

2、序建立一個(gè)流對(duì)象流對(duì)象,并指定這個(gè)流對(duì)象與某個(gè),并指定這個(gè)流對(duì)象與某個(gè)文件對(duì)象建立連接,程序操作流對(duì)象,流對(duì)象通文件對(duì)象建立連接,程序操作流對(duì)象,流對(duì)象通過(guò)文件系統(tǒng)對(duì)所連接的文件對(duì)象產(chǎn)生作用。過(guò)文件系統(tǒng)對(duì)所連接的文件對(duì)象產(chǎn)生作用。l讀操作在流數(shù)據(jù)抽象中被稱為(從流中)讀操作在流數(shù)據(jù)抽象中被稱為(從流中)提取提取,寫操作被稱為(向流中)寫操作被稱為(向流中)插入插入。 前一頁(yè) 休息4 of 78I/O流的概念流的概念l參見教材參見教材P371圖圖11-1 I/O流類層次圖流類層次圖l中的流由相應(yīng)的類創(chuàng)建,并通中的流由相應(yīng)的類創(chuàng)建,并通過(guò)相應(yīng)的方法操作。過(guò)相應(yīng)的方法操作。lios類是虛基類,派生出

3、類是虛基類,派生出istream類和類和ostream類。類。 前一頁(yè) 休息5 of 78I/O流的概念流的概念listream類是通用輸入流類和其它輸類是通用輸入流類和其它輸入流的基類,負(fù)責(zé)創(chuàng)建輸入流,其中入流的基類,負(fù)責(zé)創(chuàng)建輸入流,其中定義了輸入運(yùn)算符定義了輸入運(yùn)算符“”的各種重載的各種重載形式,它還包括一些更傳統(tǒng)的語(yǔ)句如形式,它還包括一些更傳統(tǒng)的語(yǔ)句如get( )和和read( )。listream的派生類的派生類ifstream類負(fù)責(zé)處理類負(fù)責(zé)處理文件的輸入,文件的輸入,istrstream類負(fù)責(zé)處理類負(fù)責(zé)處理字符串,字符串,istream_withassign類創(chuàng)建類創(chuàng)建了標(biāo)準(zhǔn)輸入對(duì)

4、象了標(biāo)準(zhǔn)輸入對(duì)象cin。 前一頁(yè) 休息6 of 78I/O流的概念流的概念l相對(duì)應(yīng)地,相對(duì)應(yīng)地,ostream類是通用輸出流類是通用輸出流類和其它輸出流類的基類,定義了輸類和其它輸出流類的基類,定義了輸出運(yùn)算符出運(yùn)算符“open(filename,iosmodepmyFile-open(filename,iosmode); ); / /打開文件,使流對(duì)象與文件建立聯(lián)系打開文件,使流對(duì)象與文件建立聯(lián)系輸出流 前一頁(yè) 休息14 of 78輸出流對(duì)象輸出流對(duì)象l在一個(gè)由文件指示符標(biāo)識(shí)的打開文在一個(gè)由文件指示符標(biāo)識(shí)的打開文件基礎(chǔ)上構(gòu)造一個(gè)件基礎(chǔ)上構(gòu)造一個(gè)ofstream對(duì)象。對(duì)象。int fd = o

5、pen(filename,dosmode);int fd = open(filename,dosmode);ofstream myFile1(fd);ofstream myFile1(fd); / Buffered mode(default) / Buffered mode(default)ofstream myFile2(fd,NULL,0);ofstream myFile2(fd,NULL,0); / Unbuffered / Unbuffered mode mode輸出流 前一頁(yè) 休息15 of 78插入運(yùn)算符(插入運(yùn)算符()l插入插入()運(yùn)算符是所有標(biāo)準(zhǔn)運(yùn)算符是所有標(biāo)準(zhǔn)C+數(shù)據(jù)數(shù)據(jù)類型

6、預(yù)先設(shè)計(jì)的。類型預(yù)先設(shè)計(jì)的。l用于傳送字節(jié)到一個(gè)輸出流對(duì)象。用于傳送字節(jié)到一個(gè)輸出流對(duì)象。輸出流 前一頁(yè) 休息16 of 78控制輸出格式控制輸出格式l控制輸出寬度控制輸出寬度 為了調(diào)整輸出,可以通過(guò)在流中放入setw操縱符或調(diào)用width成員函數(shù)為每個(gè)項(xiàng)指定輸出寬度。輸出流l轉(zhuǎn)換基控制算子轉(zhuǎn)換基控制算子名名 稱稱解解 釋釋dec將轉(zhuǎn)換基設(shè)為十進(jìn)制將轉(zhuǎn)換基設(shè)為十進(jìn)制hex將轉(zhuǎn)換基設(shè)為十六進(jìn)制將轉(zhuǎn)換基設(shè)為十六進(jìn)制oct將轉(zhuǎn)換基設(shè)為八進(jìn)制將轉(zhuǎn)換基設(shè)為八進(jìn)制l流格式帶參數(shù)操作算子(流格式帶參數(shù)操作算子(1)名名 稱稱解解 釋釋showbase輸出整數(shù)值時(shí),表明數(shù)字的基數(shù)(十進(jìn)制輸出整數(shù)值時(shí),表明數(shù)字

7、的基數(shù)(十進(jìn)制、八、八進(jìn)制或十六進(jìn)制進(jìn)制或十六進(jìn)制)noshowbase取消取消showbase的設(shè)置的設(shè)置showpoint表明浮點(diǎn)數(shù)的小數(shù)點(diǎn)和后面的零表明浮點(diǎn)數(shù)的小數(shù)點(diǎn)和后面的零noshowpoint取消取消showpoint的設(shè)置的設(shè)置uppercase顯示代表十六進(jìn)制的大寫字母顯示代表十六進(jìn)制的大寫字母AF和科學(xué)記數(shù)和科學(xué)記數(shù)法中的法中的Enouppercase取消取消uppercase的設(shè)置的設(shè)置showpos對(duì)于正數(shù)顯示正值符號(hào)(對(duì)于正數(shù)顯示正值符號(hào)(+)noshowpos取消取消showpos的設(shè)置的設(shè)置skipws跳過(guò)輸入中的空白字符跳過(guò)輸入中的空白字符noskipws取消取消

8、skipws的設(shè)置的設(shè)置l流格式帶參數(shù)操作算子(流格式帶參數(shù)操作算子(2)名名 稱稱解解 釋釋left左對(duì)齊,右填充字符左對(duì)齊,右填充字符right右對(duì)齊,左填充字符右對(duì)齊,左填充字符internal在引導(dǎo)符或基數(shù)指示符和數(shù)值之間填充字符在引導(dǎo)符或基數(shù)指示符和數(shù)值之間填充字符scientific以科學(xué)記數(shù)法表示浮點(diǎn)值,精度域指小數(shù)點(diǎn)后以科學(xué)記數(shù)法表示浮點(diǎn)值,精度域指小數(shù)點(diǎn)后面的數(shù)字位數(shù)面的數(shù)字位數(shù)fixed以定點(diǎn)格式表示浮點(diǎn)值,精度域指小數(shù)點(diǎn)后面以定點(diǎn)格式表示浮點(diǎn)值,精度域指小數(shù)點(diǎn)后面的數(shù)字位數(shù)的數(shù)字位數(shù)l流格式帶參數(shù)操作算子流格式帶參數(shù)操作算子名名 稱稱解解 釋釋setw(int wide)

9、設(shè)置流的寬度為設(shè)置流的寬度為wide的值的值setprecision (int prec)設(shè)置小數(shù)點(diǎn)后位數(shù)為設(shè)置小數(shù)點(diǎn)后位數(shù)為prec的值(包括小數(shù)點(diǎn))的值(包括小數(shù)點(diǎn))setfill(int fillch)使用使用fillch的值而不是默認(rèn)的字符填充的值而不是默認(rèn)的字符填充setbase(base n) 基數(shù)設(shè)為基數(shù)設(shè)為n,n這里取這里取10、8和和16setiosflags (fmtflags n)設(shè)置設(shè)置ios標(biāo)志標(biāo)志resetiosflags (fmtflags n)消除消除ios標(biāo)志的設(shè)置標(biāo)志的設(shè)置lios流格式操作函數(shù)流格式操作函數(shù)名名 稱稱解解 釋釋int ios:width()

10、讀取當(dāng)前寬度(默認(rèn)值為讀取當(dāng)前寬度(默認(rèn)值為0)int ios:width(int n)設(shè)置寬度,返回以前的寬度設(shè)置寬度,返回以前的寬度int ios:fill()讀當(dāng)前的填充字符(默認(rèn)值為空格)讀當(dāng)前的填充字符(默認(rèn)值為空格)int ios:fill(int n)設(shè)置填充字符,返回以前的填充字符設(shè)置填充字符,返回以前的填充字符int ios:precision()讀取當(dāng)前的浮點(diǎn)數(shù)精度(默認(rèn)值為讀取當(dāng)前的浮點(diǎn)數(shù)精度(默認(rèn)值為6)int ios:precision(int n) 設(shè)置浮點(diǎn)數(shù)進(jìn)度,返回以前的精度值設(shè)置浮點(diǎn)數(shù)進(jìn)度,返回以前的精度值 前一頁(yè) 休息22 of 78ios類中幾個(gè)重要的格式

11、控制函數(shù)類中幾個(gè)重要的格式控制函數(shù)lfmtflags ios:flags(fmtflags newflags);lfmtflags ios:setf(fmtflags ored_flag);lfmtflags ios:unsetf(fmtflags clear_flag);lfmtflags ios:setf(fmtflags bits, fmtflags field);輸出流 前一頁(yè) 休息23 of 78ios類中幾個(gè)重要的格式控制函數(shù)類中幾個(gè)重要的格式控制函數(shù)lios:setf有兩個(gè)版本,分別對(duì)應(yīng)著不同的標(biāo)有兩個(gè)版本,分別對(duì)應(yīng)著不同的標(biāo)志。如果想知道應(yīng)該使用哪個(gè)重載版本,就志。如果想知道應(yīng)

12、該使用哪個(gè)重載版本,就應(yīng)該知道正要改變的是哪一類標(biāo)志。應(yīng)該知道正要改變的是哪一類標(biāo)志。l這里的格式化標(biāo)志分為兩類:這里的格式化標(biāo)志分為兩類:l第一類是簡(jiǎn)單的第一類是簡(jiǎn)單的on/off,對(duì)于它們,使用,對(duì)于它們,使用setf()則打開,使用則打開,使用unsetf()則關(guān)閉。則關(guān)閉。輸出流lon/off類型標(biāo)志類型標(biāo)志名名 稱稱解解 釋釋ios:skipws跳過(guò)空白字符(對(duì)于輸入這是默認(rèn)的)跳過(guò)空白字符(對(duì)于輸入這是默認(rèn)的)ios:showbase顯示一個(gè)整數(shù)值時(shí),標(biāo)明數(shù)值基數(shù)(十顯示一個(gè)整數(shù)值時(shí),標(biāo)明數(shù)值基數(shù)(十進(jìn)制、八進(jìn)制或十六進(jìn)制)進(jìn)制、八進(jìn)制或十六進(jìn)制)ios:showpoint表明浮點(diǎn)

13、數(shù)的小數(shù)點(diǎn)和后面的零表明浮點(diǎn)數(shù)的小數(shù)點(diǎn)和后面的零ios:uppercase顯示十六進(jìn)制數(shù)值的大寫字母顯示十六進(jìn)制數(shù)值的大寫字母AF和科和科學(xué)記數(shù)法中的大寫字母學(xué)記數(shù)法中的大寫字母Eios:showpos顯示加號(hào)(顯示加號(hào)(+),代表正值),代表正值 前一頁(yè) 休息25 of 78ios類中幾個(gè)重要的格式控制函數(shù)類中幾個(gè)重要的格式控制函數(shù)l第二類格式化標(biāo)志分為不同的組。一組中,第二類格式化標(biāo)志分為不同的組。一組中,一次只能一個(gè)標(biāo)志起作用,就如同單選題一一次只能一個(gè)標(biāo)志起作用,就如同單選題一樣。樣。輸出流lios:basefield組標(biāo)志組標(biāo)志名名 稱稱解解 釋釋ios:dec將基數(shù)設(shè)為十進(jìn)制(默認(rèn)

14、)將基數(shù)設(shè)為十進(jìn)制(默認(rèn))ios:hex將基數(shù)設(shè)為十六進(jìn)制將基數(shù)設(shè)為十六進(jìn)制ios:oct將基數(shù)設(shè)為八進(jìn)制將基數(shù)設(shè)為八進(jìn)制lios:floatfield組標(biāo)志組標(biāo)志名名 稱稱解解 釋釋ios:scientific科學(xué)記數(shù)法表示浮點(diǎn)值,精度域指小數(shù)科學(xué)記數(shù)法表示浮點(diǎn)值,精度域指小數(shù)點(diǎn)后面的數(shù)字位數(shù)點(diǎn)后面的數(shù)字位數(shù)ios:fixed定點(diǎn)格式表示浮點(diǎn)數(shù),精度由定點(diǎn)格式表示浮點(diǎn)數(shù),精度由setprecision或或ios:precision設(shè)置設(shè)置0精度域?yàn)檎麄€(gè)有效數(shù)字的數(shù)目精度域?yàn)檎麄€(gè)有效數(shù)字的數(shù)目lios:adjustfield組標(biāo)志組標(biāo)志名名 稱稱解解 釋釋ios:left左對(duì)齊,右填充字符左對(duì)

15、齊,右填充字符ios:right右對(duì)齊,左填充字符右對(duì)齊,左填充字符ios:internal在任何引導(dǎo)符或基數(shù)指示符之后但在數(shù)在任何引導(dǎo)符或基數(shù)指示符之后但在數(shù)值之前填充字符值之前填充字符 前一頁(yè) 休息29 of 78ios類中幾個(gè)重要的格式控制函數(shù)類中幾個(gè)重要的格式控制函數(shù)l使用使用ios操作函數(shù)一般都需要單獨(dú)一行,不操作函數(shù)一般都需要單獨(dú)一行,不能嵌入流中,這使其靈活性受到了一定的影能嵌入流中,這使其靈活性受到了一定的影響。為了擺脫這種笨拙的控制方式,可以使響。為了擺脫這種笨拙的控制方式,可以使用用setiosflags()算子和算子和resetiosflags()算子。算子。l見程序:見

16、程序:C11_7.cpp輸出流 前一頁(yè) 休息30 of 78基本輸入操作基本輸入操作l見程序:見程序:C11_9.cppl見程序:見程序:C11_10.cppl見程序:見程序:C11_11.cppl見程序:見程序:C11_12.cpp輸入流 前一頁(yè) 休息31 of 78輸入控制格式輸入控制格式l見程序:見程序:C11_13.cpp輸入流l存取模式標(biāo)志位(存取模式標(biāo)志位(iosmode)iosmode含含 義義ios:in以只讀方式打開文件(用以只讀方式打開文件(用ifstream創(chuàng)建對(duì)象時(shí)默認(rèn))創(chuàng)建對(duì)象時(shí)默認(rèn))ios: out以只寫方式打開文件(當(dāng)用于一個(gè)沒有以只寫方式打開文件(當(dāng)用于一個(gè)沒有

17、ios:app、ios:ate或或ios:in的的ofstream時(shí),時(shí),ios:trunc是默認(rèn)設(shè)置)是默認(rèn)設(shè)置)ios: app以追加方式打開文件,即寫在文件尾部以追加方式打開文件,即寫在文件尾部ios:ate打開一個(gè)現(xiàn)成的文件(無(wú)論輸入還是輸出)并尋找末尾打開一個(gè)現(xiàn)成的文件(無(wú)論輸入還是輸出)并尋找末尾ios:binary以二進(jìn)制方式打開文件默認(rèn)時(shí)為文本方式以二進(jìn)制方式打開文件默認(rèn)時(shí)為文本方式ios:nocreate如果文件不存在,打開操作失?。▋H打開存在的文件)如果文件不存在,打開操作失?。▋H打開存在的文件)ios:noreplace如果文件存在,打開操作失?。▋H打開不存在的文件)如果

18、文件存在,打開操作失?。▋H打開不存在的文件)ios:trunc如果文件已存在,則將其長(zhǎng)度截為如果文件已存在,則將其長(zhǎng)度截為0,并清除原來(lái)的內(nèi)容,并清除原來(lái)的內(nèi)容 前一頁(yè) 休息33 of 78文件的讀寫文件的讀寫l見程序:見程序:C11_14.cppl見程序:見程序:C11_15.cppl見程序:見程序:C11_16.cpp 前一頁(yè) 休息34 of 78文件的隨機(jī)讀寫文件的隨機(jī)讀寫l在一般情況下,以讀方式打開文件時(shí),文件指針在一般情況下,以讀方式打開文件時(shí),文件指針總是指向文件的開頭;以寫方式打開文件時(shí),文總是指向文件的開頭;以寫方式打開文件時(shí),文件指針總是指向文件的結(jié)尾。當(dāng)讀文件時(shí),每讀件指針

19、總是指向文件的結(jié)尾。當(dāng)讀文件時(shí),每讀一個(gè)字節(jié),文件指針就向后移動(dòng)一個(gè)字符的位置;一個(gè)字節(jié),文件指針就向后移動(dòng)一個(gè)字符的位置;寫文件時(shí),每寫一個(gè)字符后,文件指針就移動(dòng)到寫文件時(shí),每寫一個(gè)字符后,文件指針就移動(dòng)到文件的尾部。這種文件指針的移動(dòng)方式顯得非常文件的尾部。這種文件指針的移動(dòng)方式顯得非常被動(dòng)。為了增加對(duì)文件訪問(wèn)的靈活性,被動(dòng)。為了增加對(duì)文件訪問(wèn)的靈活性,C+的的istream類和類和ostream類中定義了一些在輸入輸出類中定義了一些在輸入輸出流中操作文件指針的成員函數(shù),使編程者可以方流中操作文件指針的成員函數(shù),使編程者可以方便地操縱文件指針。便地操縱文件指針。 前一頁(yè) 休息35 of 7

20、8文件的隨機(jī)讀寫文件的隨機(jī)讀寫l一個(gè)文件實(shí)際上有兩個(gè)指針,一個(gè)用于讀,一個(gè)文件實(shí)際上有兩個(gè)指針,一個(gè)用于讀,一個(gè)用于寫。因此,函數(shù)分為對(duì)應(yīng)于一個(gè)用于寫。因此,函數(shù)分為對(duì)應(yīng)于istream類和類和ostream類的兩套版本。類的兩套版本。l這些操縱指針的函數(shù)可以分為這些操縱指針的函數(shù)可以分為3類:類: 文件指針相對(duì)移動(dòng)函數(shù) 文件指針定位函數(shù) 文件指針絕對(duì)移動(dòng)函數(shù) 前一頁(yè) 休息36 of 78文件的隨機(jī)讀寫文件的隨機(jī)讀寫l在在istream類和類和ostream類中分別定義類中分別定義了不同的相對(duì)指針移動(dòng)函數(shù)了不同的相對(duì)指針移動(dòng)函數(shù)seekg()和和seekp()。它們的定義如下:。它們的定義如下

21、: istream& istream:seekg(streamof off, ios:seek_dir dir); ostream& ostream:seekp(streamof off, ios:seek_dir dir);文件指針相對(duì)移動(dòng)函數(shù) 前一頁(yè) 休息37 of 78文件的隨機(jī)讀寫文件的隨機(jī)讀寫l參數(shù)參數(shù)dir是文件指針相對(duì)移動(dòng)的參照位是文件指針相對(duì)移動(dòng)的參照位置,如下表所列,共有置,如下表所列,共有3種情況,在種情況,在ios中被定義為一個(gè)枚舉類型中被定義為一個(gè)枚舉類型seek_dir。文件指針相對(duì)移動(dòng)函數(shù)名稱名稱含含 義義ios:beg文件頭部文件頭部ios:end文件尾部文件尾部

22、ios:cur當(dāng)前文件指針的位置當(dāng)前文件指針的位置 前一頁(yè) 休息38 of 78文件的隨機(jī)讀寫文件的隨機(jī)讀寫l參數(shù)參數(shù)off是相對(duì)于參照位置的偏移量,是相對(duì)于參照位置的偏移量,其值為正就是往文件尾部移動(dòng),為負(fù)其值為正就是往文件尾部移動(dòng),為負(fù)就是往文件頭部移動(dòng)。就是往文件頭部移動(dòng)。Off被定義為被定義為streamoff類型,實(shí)際上就是類型,實(shí)際上就是long類型。類型。文件指針相對(duì)移動(dòng)函數(shù) 前一頁(yè) 休息39 of 78文件的隨機(jī)讀寫文件的隨機(jī)讀寫l例如:例如: infile.seekg(3, ios:cur) / 文件指針從當(dāng)文件指針從當(dāng)前位置向文件尾部移動(dòng)前位置向文件尾部移動(dòng)3個(gè)字節(jié)個(gè)字節(jié)

23、infile.seekg(-5, ios:end) / 文件指針從文件指針從文件尾部向文件頭部移動(dòng)文件尾部向文件頭部移動(dòng)3個(gè)字節(jié)個(gè)字節(jié) outfile.seekp(0, ios:beg) / 文件指針移文件指針移到文件頭部到文件頭部文件指針相對(duì)移動(dòng)函數(shù) 前一頁(yè) 休息40 of 78文件的隨機(jī)讀寫文件的隨機(jī)讀寫l對(duì)應(yīng)于對(duì)應(yīng)于istream類和類和ostream類的指針類的指針定位函數(shù)分別是定位函數(shù)分別是tellg()和和tellp()。其定。其定義如下:義如下: streampos istream:tellg(); streampos ostream:tellp();l它們返回文件指針的當(dāng)前位置

24、,返回它們返回文件指針的當(dāng)前位置,返回類型為類型為streampos。同。同streamoff一樣,一樣,streampos等同于等同于long類型。類型。文件指針定位函數(shù) 前一頁(yè) 休息41 of 78文件的隨機(jī)讀寫文件的隨機(jī)讀寫 streampos inpos, outpos; inpos = infile.tellg(); / 返回文件返回文件infile的當(dāng)前文件指針位置的當(dāng)前文件指針位置 outpos = outfile.tellp(); / 返回文件返回文件outfile的當(dāng)前文件指針位置的當(dāng)前文件指針位置文件指針定位函數(shù) 前一頁(yè) 休息42 of 78文件的隨機(jī)讀寫文件的隨機(jī)讀寫l文

25、件指針的絕對(duì)移動(dòng)函數(shù)將指針移動(dòng)文件指針的絕對(duì)移動(dòng)函數(shù)將指針移動(dòng)到指定的絕對(duì)地址上。對(duì)應(yīng)于到指定的絕對(duì)地址上。對(duì)應(yīng)于istream類和類和ostream類的成員函數(shù)也是類的成員函數(shù)也是seekg()和和seekp()。但是它們只有一個(gè)。但是它們只有一個(gè)參數(shù):參數(shù): istream& istream:seekg(streampos pos); ostream& ostream:seekp(streampos pos);文件指針絕對(duì)移動(dòng)函數(shù) 前一頁(yè) 休息43 of 78文件的隨機(jī)讀寫文件的隨機(jī)讀寫l參數(shù)參數(shù)pos通常由文件指針定位函數(shù)通常由文件指針定位函數(shù)tellg()或或tellp()指定。例如:

26、指定。例如: streampos inpos; inpos = infile.tellg(); Infile.seekg(inpos);文件指針絕對(duì)移動(dòng)函數(shù) 前一頁(yè) 休息44 of 78文件的隨機(jī)讀寫文件的隨機(jī)讀寫l見程序:見程序:C11_17.cpp 前一頁(yè) 休息45 of 78例例11-1 使用使用width控制輸出寬度控制輸出寬度#include void main( ) double values = 1.23,35.36,653.7,4358.24; for(int i=0;i4;i+) cout.width(10); cout valuesi n; 輸出流輸出結(jié)果是輸出結(jié)果是: :

27、 1.23 1.23 35.36 35.36 653.7 653.7 4358.24 4358.24#include void main( ) double values = 1.23,35.36,653.7,4358.24; for(int i=0; i4; i+) cout.width(10); cout.fill(*); cout valuesi n; 輸出結(jié)果如下:輸出結(jié)果如下:* * * * * * *1.231.23* * * * * *35.3635.36* * * * * *653.7653.7* * * *4358.244358.24 前一頁(yè) 休息49 of 78例例11-2

28、 使用使用setw指定寬度指定寬度#include #include void main( ) double values = 1.23,35.36,653.7,4358.24; char *names = Zoot, Jimmy, Al, Stan; for (int i=0;i4;i+) cout setw(6) namesi setw(10) valuesi endl; 輸出流運(yùn)行結(jié)果如下:運(yùn)行結(jié)果如下: Zoot Zoot 1.231.23 Jimmy 35.36 Jimmy 35.36 Al 653.7 Al 653.7 Stan 4358.24 Stan 4358.24 前一頁(yè) 休

29、息51 of 78例例11-3 設(shè)置對(duì)齊方式設(shè)置對(duì)齊方式#include #include void main( ) double values = 1.23,35.36,653.7,4358.24; char *names = Zoot, Jimmy, Al, Stan;輸出流for (int i=0;i4;i+) cout setiosflags(ios:left) setw(6) namesi resetiosflags(ios:left) setw(10) valuesi endl;輸出結(jié)果如下輸出結(jié)果如下: :Zoot Zoot 1.231.23Jimmy 35.36Jimmy 35

30、.36Al 653.7Al 653.7Stan 4358.24Stan 4358.24 前一頁(yè) 休息53 of 78例例11-4 控制輸出精度控制輸出精度#include #include void main( ) double values = 1.23,35.36,653.7,4358.24; char *names = Zoot, Jimmy, Al, Stan; cout setiosflags(ios:scientific);輸出流 for (int i=0;i4;i+) cout setiosflags(ios:left) setw(6) namesi resetiosflags(

31、ios:left) setw(10) setprecision(1) valuesi endl;該程序的輸出結(jié)果如下:該程序的輸出結(jié)果如下:Zoot Zoot 1 1Jimmy 4e+001Jimmy 4e+001Al 7e+002Al 7e+002Stan 4e+003Stan 4e+003 前一頁(yè) 休息55 of 78進(jìn)制進(jìn)制dec、oct和和hex操縱符設(shè)置輸入和輸出操縱符設(shè)置輸入和輸出的缺省進(jìn)制。的缺省進(jìn)制。輸出流 前一頁(yè) 休息56 of 78輸出文件流成員函數(shù)輸出文件流成員函數(shù)l輸出流成員函數(shù)有三種類型:輸出流成員函數(shù)有三種類型: 與操縱符等價(jià)的成員函數(shù)。 執(zhí)行非格式化寫操作的成員函

32、數(shù)。 其它修改流狀態(tài)且不同于操縱符或插入運(yùn)算符的成員函數(shù)。輸出流 前一頁(yè) 休息57 of 78輸出文件流成員函數(shù)輸出文件流成員函數(shù)lopen函數(shù)函數(shù)把流與一個(gè)特定的磁盤文件關(guān)聯(lián)起來(lái)。需要指定打開模式。lput函數(shù)函數(shù)把一個(gè)字符寫到輸出流中。lwrite函數(shù)函數(shù)把內(nèi)存中的一塊內(nèi)容寫到一個(gè)輸出文件流中l(wèi)seekp和和tellp函數(shù)函數(shù)操作文件流的內(nèi)部指針lclose函數(shù)函數(shù)關(guān)閉與一個(gè)輸出文件流關(guān)聯(lián)的磁盤文件l錯(cuò)誤處理函數(shù)錯(cuò)誤處理函數(shù)在寫到一個(gè)流時(shí)進(jìn)行錯(cuò)誤處理輸出流 前一頁(yè) 休息58 of 78例例11-5 向文件輸出向文件輸出#include struct Date int mo,da,yr; ;

33、void main( ) Date dt = 6,10,92; ofstream tfile(date.dat,ios:binary); tfile.write(char *) &dt,sizeof dt);輸出流 前一頁(yè) 休息59 of 78二進(jìn)制輸出文件二進(jìn)制輸出文件l以通常方式構(gòu)造一個(gè)流,然后使用以通常方式構(gòu)造一個(gè)流,然后使用setmode成員函數(shù),在文件打開后改成員函數(shù),在文件打開后改變模式。變模式。l使用使用ofstream構(gòu)造函數(shù)中的模式參量構(gòu)造函數(shù)中的模式參量指定二進(jìn)制輸出模式指定二進(jìn)制輸出模式l使用二進(jìn)制操作符代替使用二進(jìn)制操作符代替setmode成員成員函數(shù):函數(shù):ofs )

34、l提取運(yùn)算符提取運(yùn)算符()對(duì)于所有標(biāo)準(zhǔn)對(duì)于所有標(biāo)準(zhǔn)C+數(shù)數(shù)據(jù)類型都是預(yù)先設(shè)計(jì)好的。據(jù)類型都是預(yù)先設(shè)計(jì)好的。l是從一個(gè)輸入流對(duì)象獲取字節(jié)最容易是從一個(gè)輸入流對(duì)象獲取字節(jié)最容易的方法。的方法。lios類中的很多操縱符都可以應(yīng)用于輸類中的很多操縱符都可以應(yīng)用于輸入流。但是只有少數(shù)幾個(gè)對(duì)輸入流對(duì)入流。但是只有少數(shù)幾個(gè)對(duì)輸入流對(duì)象具有實(shí)際影響,其中最重要的是進(jìn)象具有實(shí)際影響,其中最重要的是進(jìn)制操縱符制操縱符dec、oct和和hex。輸入流 前一頁(yè) 休息63 of 78輸入流成員函數(shù)輸入流成員函數(shù)lopen函數(shù)把該流與一個(gè)特定磁盤文件相關(guān)聯(lián)。函數(shù)把該流與一個(gè)特定磁盤文件相關(guān)聯(lián)。lget函數(shù)的功能與提取運(yùn)算

35、符(函數(shù)的功能與提取運(yùn)算符()很相像,)很相像,主要的不同點(diǎn)是主要的不同點(diǎn)是get函數(shù)在讀入數(shù)據(jù)時(shí)包括空函數(shù)在讀入數(shù)據(jù)時(shí)包括空白字符。白字符。lgetline的功能是從輸入流中讀取多個(gè)字符,的功能是從輸入流中讀取多個(gè)字符,并且允許指定輸入終止字符,讀取完成后,從并且允許指定輸入終止字符,讀取完成后,從讀取的內(nèi)容中刪除終止字符。讀取的內(nèi)容中刪除終止字符。輸入流 前一頁(yè) 休息64 of 78例例11-6 get函數(shù)應(yīng)用舉例函數(shù)應(yīng)用舉例#include void main() char ch; while (ch=cin.get()!=EOF) cout.put(ch);輸入流 前一頁(yè) 休息65 o

36、f 78例例11-7 為輸入流指定一個(gè)終止字符為輸入流指定一個(gè)終止字符#include void main() char line100; cout Type a line terminated by t endl; cin.getline(line,100,t); cout line;輸入流 前一頁(yè) 休息66 of 78輸入流成員函數(shù)輸入流成員函數(shù)lread成員函數(shù)從一個(gè)文件讀字節(jié)到一成員函數(shù)從一個(gè)文件讀字節(jié)到一個(gè)指定的內(nèi)存區(qū)域,由長(zhǎng)度參數(shù)確定個(gè)指定的內(nèi)存區(qū)域,由長(zhǎng)度參數(shù)確定要讀的字節(jié)數(shù)。要讀的字節(jié)數(shù)。如果給出長(zhǎng)度參數(shù),當(dāng)遇到文件結(jié)束如果給出長(zhǎng)度參數(shù),當(dāng)遇到文件結(jié)束或者在文本模式文件中遇到文

37、件結(jié)束或者在文本模式文件中遇到文件結(jié)束標(biāo)記字符時(shí)結(jié)束讀取。標(biāo)記字符時(shí)結(jié)束讀取。輸入流 前一頁(yè) 休息67 of 78例例11-8 從文件讀二進(jìn)制記錄從文件讀二進(jìn)制記錄#include #include #include void main( ) struct double salary; char name23; employee;輸入流 ifstream is(payroll,ios:binary |ios:nocreate); if (is) is.read(char *) &employee,sizeof(employee); cout employee.name employee.sal

38、ary endl; else cout ERROR: Cannot open file payroll. endl; 前一頁(yè) 休息69 of 78輸入流成員函數(shù)輸入流成員函數(shù)lseekg函數(shù)用來(lái)設(shè)置輸入文件流中讀函數(shù)用來(lái)設(shè)置輸入文件流中讀取數(shù)據(jù)位置的指針。取數(shù)據(jù)位置的指針。ltellg函數(shù)返回當(dāng)前文件讀指針的位置。函數(shù)返回當(dāng)前文件讀指針的位置。lclose函數(shù)關(guān)閉與一個(gè)輸入文件流關(guān)函數(shù)關(guān)閉與一個(gè)輸入文件流關(guān)聯(lián)的磁盤文件。聯(lián)的磁盤文件。輸入流 前一頁(yè) 休息70 of 78例例11-9 設(shè)置位置指針設(shè)置位置指針#include void main( ) char ch; ifstream tfil

39、e(payroll,ios:binary | ios:nocreate); if(tfile) tfile.seekg(8);輸入流 while (tfile.good( )) tfile.get(ch); if (!ch) break; cout ch; else cout ERROR: Cannot open file payroll. endl; 前一頁(yè) 休息72 of 78例例11-10 讀文件并顯示其中空讀文件并顯示其中空格的位置格的位置#include void main( ) char ch; ifstream tfile(payroll,ios:binary | ios:noc

40、reate); if (tfile) 輸入流 while (tfile.good( )) streampos here = tfile.tellg( ); tfile.get(ch); if (ch= ) cout nPosition here is a space; else cout ERROR: Cannot open file payroll. endl; 前一頁(yè) 休息74 of 78小結(jié)小結(jié)l第第13講講 流類庫(kù)與輸入流類庫(kù)與輸入/輸出輸出l本講內(nèi)容:本講內(nèi)容: 流類庫(kù)lC+語(yǔ)言沒有輸入/輸出語(yǔ)句,但是C+編譯系統(tǒng)帶有一個(gè)面向?qū)ο蟮腎/O軟件包,即:I/O流類庫(kù)。 最重要的三個(gè)輸出流

41、類lostream、ofstream 和 ostrstream 最重要的三個(gè)輸入流類listream、ifstream 和 istrstream 前一頁(yè) 休息75 of 78小結(jié)(續(xù))小結(jié)(續(xù))l第第13講講 流類庫(kù)與輸入流類庫(kù)與輸入/輸出輸出l本講內(nèi)容:本講內(nèi)容:參見:參見:第第13講要點(diǎn)講要點(diǎn) 兩個(gè)從iostream類派生出來(lái)的重要的I/O流類lfstream 和 strstream 前一頁(yè) 休息76 of 78自修作業(yè)(不用交)自修作業(yè)(不用交)l復(fù)習(xí)第復(fù)習(xí)第11章,預(yù)習(xí)第章,預(yù)習(xí)第12章章l思考:思考: 11-1 11-6l自檢作業(yè):自檢作業(yè): 11-7 11-9l實(shí)驗(yàn)十一實(shí)驗(yàn)十一l自

42、檢作業(yè)就是:自己先做一遍,然后對(duì)照自檢作業(yè)就是:自己先做一遍,然后對(duì)照C+語(yǔ)言程序設(shè)計(jì)(第語(yǔ)言程序設(shè)計(jì)(第3版)學(xué)生用書版)學(xué)生用書一書中給出的答案,找出自己學(xué)習(xí)中的薄一書中給出的答案,找出自己學(xué)習(xí)中的薄弱環(huán)節(jié)。這個(gè)作業(yè)不用交。弱環(huán)節(jié)。這個(gè)作業(yè)不用交。 前一頁(yè) 休息77 of 78作業(yè)(一周之內(nèi)必須交)作業(yè)(一周之內(nèi)必須交)l1、第第11章書面作業(yè)章書面作業(yè)l2、第第11章編程作業(yè)章編程作業(yè)l將書面作業(yè)(將書面作業(yè)(*.doc)文件和編程作業(yè))文件和編程作業(yè)(*.cpp)文件以附件形式通過(guò)電子郵件發(fā))文件以附件形式通過(guò)電子郵件發(fā)給溫老師。注意:在電子郵件主題上要寫給溫老師。注意:在電子郵件主題上要寫明你的姓名和學(xué)號(hào)以及第幾章的作業(yè)。明你的姓名和學(xué)號(hào)以及第幾章的作業(yè)。

展開閱讀全文
溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

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

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


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