計算機程序設(shè)計基礎(chǔ)_精講多練CC++_第8章_第1頁
計算機程序設(shè)計基礎(chǔ)_精講多練CC++_第8章_第2頁
計算機程序設(shè)計基礎(chǔ)_精講多練CC++_第8章_第3頁
計算機程序設(shè)計基礎(chǔ)_精講多練CC++_第8章_第4頁
計算機程序設(shè)計基礎(chǔ)_精講多練CC++_第8章_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第8 8章章 文件與數(shù)據(jù)輸入輸出文件與數(shù)據(jù)輸入輸出3教學目標l(1) 了解文件和流的概念;了解文件和流的概念;l(2) 了解輸入輸出流類或標準了解輸入輸出流類或標準I/O函數(shù)庫的結(jié)構(gòu)和函數(shù)庫的結(jié)構(gòu)和機制;機制;l(3) 了解文件的打開與關(guān)閉操作及文件讀寫的基了解文件的打開與關(guān)閉操作及文件讀寫的基本方法。本方法。4基本內(nèi)容 l8.1 輸入輸出與標準庫輸入輸出與標準庫l8.2 標準輸入流標準輸入流l8.3 標準輸出流標準輸出流l8.4 文件文件58.1 輸入輸出與標準庫l標準庫構(gòu)成標準庫構(gòu)成l標準函數(shù)庫標準函數(shù)庫l從從C語言中繼承下來語言中繼承下來lC格式的輸入輸出函數(shù)、字符與字符串處理函數(shù)、數(shù)

2、學函數(shù)、格式的輸入輸出函數(shù)、字符與字符串處理函數(shù)、數(shù)學函數(shù)、時間日期函數(shù)、動態(tài)分配函數(shù)以及一些實用函數(shù)時間日期函數(shù)、動態(tài)分配函數(shù)以及一些實用函數(shù) l標準類庫標準類庫l標準標準C+的的I/O流類、字符串類、數(shù)字類、異常處理和雜項類流類、字符串類、數(shù)字類、異常處理和雜項類以及以及STL容器類容器類 l由編譯器廠商提供,與平臺、廠商和編譯器版本由編譯器廠商提供,與平臺、廠商和編譯器版本無關(guān)無關(guān)6輸入輸出流類庫iostreamliostream類庫提供了數(shù)百種類庫提供了數(shù)百種I/O功能,其接口功能,其接口部分分別包含在幾個頭文件中部分分別包含在幾個頭文件中:l無格式無格式I/O和格式化和格式化I/O:

3、頭文件:頭文件iostreaml格式化格式化I/O :包含頭文件包含頭文件iomanipl文件處理操作文件處理操作 :包含頭文件:包含頭文件fstream7輸入/輸出流類的繼承層次結(jié)構(gòu)iosistreamostreamiostreamifstreamofstreamfstream88.2 標準輸入流lcin是類是類istream內(nèi)置的標準流類對象,能構(gòu)成從內(nèi)置的標準流類對象,能構(gòu)成從鍵盤到內(nèi)存的標準輸入流。通過流提取運算符鍵盤到內(nèi)存的標準輸入流。通過流提取運算符“”,變量從流中提取數(shù)據(jù)。,變量從流中提取數(shù)據(jù)。l“”會自動忽略所有的空白字符,因此無法輸會自動忽略所有的空白字符,因此無法輸入包含空

4、格符的字符串。如:入包含空格符的字符串。如:char name20;cinname;l假如輸入姓名假如輸入姓名“Tom Hanks”時,變量時,變量name中只有中只有“Tom”9輸入流對象的成員函數(shù)get()l這個函數(shù)有這個函數(shù)有3種重載形式:種重載形式:lcin.get()l用于從指定的輸入流中讀取一個字符,函數(shù)的返回值即為用于從指定的輸入流中讀取一個字符,函數(shù)的返回值即為讀入的字符。讀入的字符。lcin. get(ch)l用于從指定的輸入流中讀取一個字符,并將該字符賦給字用于從指定的輸入流中讀取一個字符,并將該字符賦給字符型變量符型變量ch。lcin.get(字符數(shù)組字符數(shù)組buf, 字

5、符個數(shù)字符個數(shù)n, 結(jié)束符結(jié)束符delim)l用于從指定的輸入流中讀取用于從指定的輸入流中讀取n-1個字符,并將這些字符賦給個字符,并將這些字符賦給字符數(shù)組字符數(shù)組buf。如果還沒有讀取完。如果還沒有讀取完n-1個字符之前就遇到結(jié)束個字符之前就遇到結(jié)束符符delim,則可提前結(jié)束讀取過程。結(jié)束符,則可提前結(jié)束讀取過程。結(jié)束符delim的默認值為的默認值為換行符換行符n 。10例8-2:包含空格的字符串的輸入與輸出#include using namespace std;int main()char ch1, ch2, ch3, buf150, buf250;cout buf1;cout 使用運

6、算符使用運算符讀取句子:讀取句子: buf1 endl;ch1 = cin.get();ch2 = cin.get();cout 使用使用cin.get()繼續(xù)讀?。豪^續(xù)讀取: ch1 endl;cout 使用使用cin.get()繼續(xù)讀?。豪^續(xù)讀?。?ch2 endl;cin.get(ch3);cout 使用使用cin.get(ch3)繼續(xù)讀?。豪^續(xù)讀取: ch3 endl;cin.get(buf2, 50);cout 使用使用cin.get(buf2, 50)繼續(xù)讀?。豪^續(xù)讀?。?buf2 endl;return 0; 11輸入流對象的成員函數(shù)輸入流對象的成員函數(shù) lgetlExtract

7、s characters from the stream up to, but not including, delimiters.lgetlinelExtracts characters from the stream (extracts and discards delimiters).lreadlExtracts data from the stream.lignorelExtracts and discards characters.lpeeklReturns a character without extracting it from the stream.lgcountlCount

8、s the characters extracted in the last unformatted operation.128.3 標準輸出流l輸出流類輸出流類ostream的標準輸出流對象的標準輸出流對象cout通過流通過流插入運算符插入運算符“”,把變量的值從內(nèi)存輸出到標,把變量的值從內(nèi)存輸出到標準輸出設(shè)備上。準輸出設(shè)備上。l系統(tǒng)會自動根據(jù)不同的數(shù)據(jù)類型采用不同的默系統(tǒng)會自動根據(jù)不同的數(shù)據(jù)類型采用不同的默認方式輸出。認方式輸出。l特殊要求的輸出格式,需要格式化特殊要求的輸出格式,需要格式化I/Ol使用流操縱符對輸出操作進行格式化使用流操縱符對輸出操作進行格式化l使用使用ios類的格式控制

9、成員函數(shù)進行格式化類的格式控制成員函數(shù)進行格式化131. 使用流操縱符對輸出操作進行格式化使用流操縱符對輸出操作進行格式化l不帶參數(shù)的流操縱符不帶參數(shù)的流操縱符lendlldec/oct/hex 十十/八八/十六進制十六進制l帶參數(shù)的流操縱符帶參數(shù)的流操縱符 (注意:需包含頭文件注意:需包含頭文件iomanip)lsetbase(int base)設(shè)置數(shù)制轉(zhuǎn)換基數(shù)為設(shè)置數(shù)制轉(zhuǎn)換基數(shù)為baselsetfill(int ch)將填充字符設(shè)置為將填充字符設(shè)置為chlsetprecision(int p)設(shè)置數(shù)字精度設(shè)置數(shù)字精度lsetw(int w)將域?qū)捲O(shè)置為將域?qū)捲O(shè)置為wlsetiosflags

10、(fmtflags flags)開啟開啟flags中指定的標志中指定的標志lresetiosflags(fmtflags flags)關(guān)閉關(guān)閉flags中指定的標志中指定的標志其中,流格式狀態(tài)標志字其中,流格式狀態(tài)標志字(flags):lios:left在域中左對齊輸出,右邊顯示填充字符在域中左對齊輸出,右邊顯示填充字符lios:dec指定整數(shù)應(yīng)作為十進制指定整數(shù)應(yīng)作為十進制(基數(shù)基數(shù)10)值值lios:hex指定整數(shù)應(yīng)作為十六進制指定整數(shù)應(yīng)作為十六進制(基數(shù)基數(shù)16)值值lios:showpos 指定正數(shù)和負數(shù)前面分別加上指定正數(shù)和負數(shù)前面分別加上+和和-號號lios:fixed指定浮點數(shù)以

11、小數(shù)方式輸出指定浮點數(shù)以小數(shù)方式輸出lios:scientific 指定浮點數(shù)輸出采用科學記數(shù)法指定浮點數(shù)輸出采用科學記數(shù)法14例例8-4:改變整數(shù)的進制:改變整數(shù)的進制#include using namespace std;int main()int n = 30;cout 整數(shù):整數(shù): n endl;cout 以十六進制顯示為:以十六進制顯示為: hex n endl;cout 以十進制顯示為:以十進制顯示為: dec n endl;cout 以八進制顯示為:以八進制顯示為: oct n endl;return 0; 15例8-3:設(shè)置實型數(shù)的精度#include #include #i

12、nclude using namespace std;int main()double r = sqrt( 2.0 );int i;cout r = r endl;/ 設(shè)置輸出為定點小數(shù)方式設(shè)置輸出為定點小數(shù)方式cout setiosflags( ios:fixed) ;cout 以定點小數(shù)方式,采用不同精度輸出:以定點小數(shù)方式,采用不同精度輸出: endl;for ( i = 0; i = 4; i+ )cout setprecision( i ) r = r endl;/ 取消定點小數(shù)輸出方式并設(shè)置為科學記數(shù)方式取消定點小數(shù)輸出方式并設(shè)置為科學記數(shù)方式cout resetiosflags(

13、 ios:fixed) setiosflags( ios:scientific) ;cout 以科學記數(shù)方式,采用不同精度輸出:以科學記數(shù)方式,采用不同精度輸出: endl;for ( i = 0; i = 4; i+ )cout setprecision( i ) r = r endl;return 0;16例8-5:設(shè)置輸出寬度、填充字符和對齊方式#include #include using namespace std;int main()double pi=3.14159;/ 以默認方式輸出以默認方式輸出cout pi endl;/ 設(shè)置輸出寬度后進行輸出設(shè)置輸出寬度后進行輸出cout

14、 setw(10) pi endl;/ 使用填充字符并設(shè)置輸出寬度后進行輸出使用填充字符并設(shè)置輸出寬度后進行輸出cout setfill(*) setw(10) pi endl;/ 設(shè)置左對齊方式及輸出寬度后進行輸出設(shè)置左對齊方式及輸出寬度后進行輸出cout setiosflags(ios:left) setw(10) pi endl;/ 取消左對齊方式取消左對齊方式cout resetiosflags(ios:left);/ 設(shè)置右對齊方式及輸出寬度后進行輸出設(shè)置右對齊方式及輸出寬度后進行輸出cout setiosflags(ios:right) setw(12) pi endl; retu

15、rn 0; 172. 使用使用ios類的格式控制成員函數(shù)對輸出操作進行格式化類的格式控制成員函數(shù)對輸出操作進行格式化l格式化函數(shù)格式化函數(shù)lwidth(w)設(shè)置顯示字段寬度為設(shè)置顯示字段寬度為wlprecision(p) 設(shè)置浮點數(shù)精度為設(shè)置浮點數(shù)精度為plfill(ch)設(shè)置填充字符為設(shè)置填充字符為chlsetf(flags)設(shè)置輸出格式狀態(tài)為設(shè)置輸出格式狀態(tài)為flagslunsetf(flags) 清除格式標記清除格式標記flagsl其中,流格式狀態(tài)標志字其中,流格式狀態(tài)標志字(flags)同前。同前。#include using namespace std;int main()cout.

16、precision(4);cout.width(10);cout 10.12345 endl;cout.fill(*);cout.width(10);cout 10.12345 endl;cout.width(10);cout Hi! endl; cout.width(10);cout.setf(ios:left);cout 10.12345endl;cout.setf(ios:uppercase | ios:scientific);cout 10.12345endl;cout.unsetf(ios:uppercase);cout 10.12345endl;return 0;運行結(jié)果:運行結(jié)果

17、: 10.12*10.12*Hi!10.12*1.0123E+0011.0123e+00119規(guī)規(guī) 則則l成員函數(shù)成員函數(shù)width(w)和流操縱符和流操縱符setw(w)都只對其后的第都只對其后的第一個輸出項有效一個輸出項有效l用成員函數(shù)用成員函數(shù)setf或流操縱符或流操縱符setiosflags設(shè)置輸出格式后,設(shè)置輸出格式后,如果要改為同組另一狀態(tài),應(yīng)調(diào)用如果要改為同組另一狀態(tài),應(yīng)調(diào)用unsetf或或resetiosflags先終止先終止lios:leftlios:right20輸出流對象的成員函數(shù)輸出流對象的成員函數(shù) lputlInserts a single byte into the

18、 stream.lwritelInserts a series of bytes into the stream.lflushlFlushes the buffer associated with this stream. lseekplChanges the streams put pointer.ltellplGets the value of the streams put pointer.218.4 文件l8.4.1 文件和流文件和流l8.4.2 文件的打開和關(guān)閉文件的打開和關(guān)閉l8.4.3 文件的讀寫文件的讀寫22iosistreamostreamiostreamifstreamof

19、streamfstream#include lC+把每一個文件都看成一個有序的字節(jié)流,對文件的操作可采用把每一個文件都看成一個有序的字節(jié)流,對文件的操作可采用與輸入輸出流相關(guān)的方法。與輸入輸出流相關(guān)的方法。l頭文件頭文件fstream包含了流類包含了流類ifstream(從文件輸入從文件輸入)、ofstream(向文件輸向文件輸出出)和和fstream(從文件輸入輸出從文件輸入輸出)的定義。的定義。文件文件I/O流類的繼承層次結(jié)構(gòu)流類的繼承層次結(jié)構(gòu)23l文件的處理由三個步驟組成:打開文件,數(shù)據(jù)讀寫,關(guān)閉文件。文件的處理由三個步驟組成:打開文件,數(shù)據(jù)讀寫,關(guān)閉文件。l1. 打開文件,兩種方法:打

20、開文件,兩種方法:l1)先建立文件流對象,再調(diào)用成員函數(shù))先建立文件流對象,再調(diào)用成員函數(shù)open()將它與某一個文件關(guān)聯(lián)將它與某一個文件關(guān)聯(lián)ifstream infile; / 輸入文件流對象輸入文件流對象ofstream outfile; / 輸出文件流對象輸出文件流對象fstream iofile; / 輸入輸出文件流對象輸入輸出文件流對象outfile.open(a.dat);l2)在建立文件流對象的同時通過構(gòu)造函數(shù)來打開文件。如:)在建立文件流對象的同時通過構(gòu)造函數(shù)來打開文件。如: ofstream outfile (a.dat);l測試文件是否被正確打開的方法如下:測試文件是否被正

21、確打開的方法如下:if ( ! outfile)/ 處理文件打開失敗情況的代碼處理文件打開失敗情況的代碼l2. 關(guān)閉文件:成員函數(shù)關(guān)閉文件:成員函數(shù)close() outfile.close( );8.4.2 文件的打開和關(guān)閉24l使用插入與提取運算符對文件進行讀寫使用插入與提取運算符對文件進行讀寫l讀文件 l寫文件 l使用類成員函數(shù)對文件流進行操作使用類成員函數(shù)對文件流進行操作lget讀/put寫一次讀寫一個字節(jié)listream& get ( char& rch);lostream& put ( char ch);lgetline一次讀一行 listream&

22、 getline(char* pch, int nCount, char delim = n );8.4.3 文件的讀寫/ 例例8-6:寫文件:寫文件#include #include using namespace std;int main()ofstream outfile(grade.txt);if(!outfile)cout 文件打開失?。∥募蜷_失??!endl;return 1;outfile 程序設(shè)計程序設(shè)計 95 endl;outfile 大學英語大學英語 90.5 endl;outfile 高等數(shù)學高等數(shù)學 93 endl;outfile 普通物理普通物理 87.5 endl;

23、outfile.close();return 0; / 例例8-7:讀文件:讀文件#include #include using namespace std;int main()ifstream infile(grade.txt);if(!infile)cout 文件打開失??!文件打開失敗! course score;cout course score course score;cout course score course score;cout course score course score;cout course score endl;infile.close();return 0;

24、 注意:注意:VC+ 6.0編譯器編譯器不能正確判斷不能正確判斷if(! infile)/ 例例8-8:使用成員函數(shù):使用成員函數(shù)get()完成文件讀操作完成文件讀操作#include #include using namespace std;int main()char ch;int count=0;/ 計數(shù)器計數(shù)器ifstream infile(grade.txt);if(!infile)cout 文件打開失敗文件打開失敗endl;return 1;while(!infile.eof( ) infile.get(ch);/ 從文件流中讀入下一個字符從文件流中讀入下一個字符cout=0 &a

25、mp; ch=9) count+; / 若是數(shù)字字符,計數(shù)器加若是數(shù)字字符,計數(shù)器加1coutendl文件中共有數(shù)字字符文件中共有數(shù)字字符:count個。個。endl;infile.close();return 0; 28擴展閱讀l8.5 二進制文件二進制文件l二進制文件以位(二進制文件以位(bit)為單位,整個文件是由)為單位,整個文件是由0和和1組成的無格式的原始數(shù)據(jù)序列。在二進制方式下的組成的無格式的原始數(shù)據(jù)序列。在二進制方式下的輸入輸出過程中,系統(tǒng)不對數(shù)據(jù)進行任何轉(zhuǎn)換。輸入輸出過程中,系統(tǒng)不對數(shù)據(jù)進行任何轉(zhuǎn)換。l文本文件以字節(jié)(文本文件以字節(jié)(byte)為單位,整個文件實際保)為單位,

26、整個文件實際保存的是一串存的是一串ASCII字符??捎梦淖痔幚砥鬟M行編輯。字符??捎梦淖痔幚砥鬟M行編輯。在文本方式下的輸入輸出過程中,系統(tǒng)進行字符轉(zhuǎn)在文本方式下的輸入輸出過程中,系統(tǒng)進行字符轉(zhuǎn)換。換。29文件打開方式文件打開方式 openmode說說明明ios:app將所有輸出寫入文件末尾將所有輸出寫入文件末尾ios:ate打開文件以便輸出,并移到文件末尾打開文件以便輸出,并移到文件末尾(通常用于添通常用于添加數(shù)據(jù)加數(shù)據(jù)) 數(shù)據(jù)可以寫入文件中的任何地方數(shù)據(jù)可以寫入文件中的任何地方ios:in打開文件以便輸入打開文件以便輸入ios:out打開文件以便輸出打開文件以便輸出ios:trunc刪除文件

27、現(xiàn)有內(nèi)容刪除文件現(xiàn)有內(nèi)容(是是ios:out的默認操作的默認操作)ios:binary用二進制而不是文本模式打開文件用二進制而不是文本模式打開文件ios:nocreate如果文件不存在,則文件打開失敗如果文件不存在,則文件打開失敗ios:noreplace如果文件存在,則文件打開失敗如果文件存在,則文件打開失敗/ 例例8-9:文件拷貝的程序:文件拷貝的程序#include #include using namespace std;int main()char s50, d50;couts;coutd;ifstream infile(s, ios:binary);ofstream outfile

28、(d, ios:binary);if(!infile | !outfile)cout 文件打開失??!文件打開失??!endl;return 1;char ch;while(!infile.eof() )infile.get (ch);/ 成員函數(shù)成員函數(shù)get( )用于從輸入流中讀取一個字符到變量用于從輸入流中讀取一個字符到變量choutfile.put(ch);/ 成員函數(shù)成員函數(shù)put( )將字符變量將字符變量ch中的字符寫到輸出流中中的字符寫到輸出流中infile.close();outfile.close();return 0; 31上機指導(dǎo)l8.5 Visual C+的幫助功能的幫助功能 32應(yīng)用舉例l例例8-10 打開一個由若干個整數(shù)組成的文本文打開一個由若干個整數(shù)組成的文本文件件“number.txt”,找出其中所有的質(zhì)數(shù)并存,找出其中所有的質(zhì)數(shù)并

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論