C+程序設(shè)計(jì)語(yǔ)言揣錦華第9章流類庫(kù)與輸入輸出.ppt

上傳人:san****019 文檔編號(hào):19954973 上傳時(shí)間:2021-01-18 格式:PPT 頁(yè)數(shù):62 大小:649.05KB
收藏 版權(quán)申訴 舉報(bào) 下載
C+程序設(shè)計(jì)語(yǔ)言揣錦華第9章流類庫(kù)與輸入輸出.ppt_第1頁(yè)
第1頁(yè) / 共62頁(yè)
C+程序設(shè)計(jì)語(yǔ)言揣錦華第9章流類庫(kù)與輸入輸出.ppt_第2頁(yè)
第2頁(yè) / 共62頁(yè)
C+程序設(shè)計(jì)語(yǔ)言揣錦華第9章流類庫(kù)與輸入輸出.ppt_第3頁(yè)
第3頁(yè) / 共62頁(yè)

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

14.9 積分

下載資源

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

資源描述:

《C+程序設(shè)計(jì)語(yǔ)言揣錦華第9章流類庫(kù)與輸入輸出.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《C+程序設(shè)計(jì)語(yǔ)言揣錦華第9章流類庫(kù)與輸入輸出.ppt(62頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、第 9章 流類庫(kù)與輸入 /輸出 第 9章 流類庫(kù)與輸入 /輸出 9.1 輸入 /輸出標(biāo)準(zhǔn)流類 9.2 文件流類 9.3 串流類 9.4 控制符 第 9章 流類庫(kù)與輸入 /輸出 9.1 輸入 /輸出標(biāo)準(zhǔn)流類 9.1.1 輸入 /輸出流的概念 就像 C語(yǔ)言一樣 , C++語(yǔ)言中也沒(méi)有輸入 /輸出語(yǔ)句 。 C++的 I/O是以字節(jié)流的形式實(shí)現(xiàn)的 , 每一個(gè) C++編譯 系統(tǒng)都帶有一個(gè)面向?qū)ο蟮妮斎?/輸出軟件包 , 這就是 I/O流類庫(kù) 。 其中 , 流是 I/O流類的中心概念 。 到目前為 止 , 我們一直在使用它 。 第 9章 流類庫(kù)與

2、輸入 /輸出 所謂流 , 是指數(shù)據(jù)從一個(gè)對(duì)象流向另一個(gè)對(duì)象 。 在 C++程序中 , 數(shù)據(jù)可以從鍵盤(pán)流入到程序中 , 也可 以從程序中流向屏幕或磁盤(pán)文件 , 把數(shù)據(jù)的流動(dòng)抽象 為 “ 流 ” 。 流在使用前要被建立 , 使用后要被刪除 , 還要使用一些特定的操作從流中獲取數(shù)據(jù)或向流中添 加數(shù)據(jù) 。 從流中獲取數(shù)據(jù)的操作稱為提取操作 , 向流 中添加數(shù)據(jù)的操作稱為插入操作 。 第 9章 流類庫(kù)與輸入 /輸出 流實(shí)際上就是一個(gè)字節(jié)序列 。 在輸入操作中 , 字 節(jié)從輸入設(shè)備 (如鍵盤(pán) 、 磁盤(pán) 、 網(wǎng)絡(luò)連接等 )流向內(nèi)存; 在輸出操作中 , 字節(jié)從內(nèi)存流向輸出設(shè)

3、備 (如顯示器 、 打印機(jī) 、 磁盤(pán) 、 網(wǎng)絡(luò)連接等 )。 如圖 9-1所示 。 在 C++語(yǔ)言中 , 針對(duì)流的特點(diǎn) , 提供了如圖 9-2所 示的層次結(jié)構(gòu)來(lái)描述流的行為 , 并給出了 I/O流類庫(kù)的 操作 。 第 9章 流類庫(kù)與輸入 /輸出 第 9章 流類庫(kù)與輸入 /輸出 圖 9-2 輸入 /輸出流類層次圖 第 9章 流類庫(kù)與輸入 /輸出 表 9-1 I/O流類列表 第 9章 流類庫(kù)與輸入 /輸出 9.1.2 輸入 /輸出標(biāo)準(zhǔn)流類 1 標(biāo)準(zhǔn)流的設(shè)備名 由表 9-1可見(jiàn) , I/O流的標(biāo)準(zhǔn)頭文件是 iostream.h。

4、其 中 , ostream類通過(guò)其派生類 ostream_withassign支持以 下預(yù)先定義的流對(duì)象: cout:標(biāo)準(zhǔn)輸出 。 默認(rèn)設(shè)備為屏幕 。 cerr:標(biāo)準(zhǔn)錯(cuò)誤輸出 。 沒(méi)有緩沖 , 發(fā)送給它的內(nèi)容 立即被輸出 , 默認(rèn)設(shè)備為屏幕 。 第 9章 流類庫(kù)與輸入 /輸出 clog:標(biāo)準(zhǔn)錯(cuò)誤輸出 。 有緩沖 , 當(dāng)緩沖區(qū)滿時(shí)被輸 出 , 默認(rèn)設(shè)備為打印機(jī) 。 而 istream類通過(guò)其派生類 istream_withassign支持預(yù) 先定義的對(duì)象 。 cin:標(biāo)準(zhǔn)輸入。默認(rèn)設(shè)備為鍵盤(pán)。 第 9章 流類庫(kù)與

5、輸入 /輸出 2 原理 cout 是 ostream類的全局對(duì)象 , 它在頭文件 iostream.h中的定義如下: ostream cout(stdout); //這里 , stdout作為該對(duì)象構(gòu) 造時(shí)的參數(shù)對(duì)應(yīng)每種基本數(shù)據(jù)類型 , ostream類都存在 友元 , 它們都在 iostream.h中聲明 。 例如: ostream ostream ostream //... 第 9章 流類庫(kù)與輸入 /輸出 如語(yǔ)句: cout<

6、; cout是類 ostream的對(duì)象 , <( int istream istream //... 第 9章 流類庫(kù)與輸入 /輸出 9.2 文件流類 fstream、 ifstream和 ofstream是文件流類,在頭文件 fstream.h中定義。其中, fstream是 ofstream和 ifstream多 重繼承的子類。文件流類不是標(biāo)準(zhǔn)設(shè)備,沒(méi)有 cout那樣 預(yù)先定義的全局對(duì)象。文件流類支持對(duì)磁盤(pán)文件的操 作。要定義一個(gè)文件流類對(duì)象,須指定文件名和打開(kāi) 方式。 第 9章 流類庫(kù)與輸入 /輸出 類

7、ofstream用于執(zhí)行文件輸出 , 該類有以下幾個(gè)構(gòu)造函數(shù): ofstream::ofstream( filedesc fd ); ofstream::ofstream( filedesc fd, char*pch, int nLength ); ofstream::ofstream( const char*szName, int nMode = ios::out, int nProt = filebuf::openprot ); 第 9章 流類庫(kù)與輸入 /輸出 類 ifstream用于執(zhí)行文件輸入 , 該類有以下幾個(gè)構(gòu)造函數(shù): ifstream::ifstream( f

8、iledesc fd ); ifstream::ifstream( filedesc fd, char*pch, int nLength ); ifstream::ifstream( const char*szName, int nMode = ios::in, int nProt = filebuf::openprot ); 第 9章 流類庫(kù)與輸入 /輸出 其中最常用的都是最后一個(gè)構(gòu)造函數(shù) 。 該函數(shù)有 三個(gè)參數(shù) , 第一個(gè)參數(shù)是指向要打開(kāi)的文件名的字符 串 , 后兩個(gè)參數(shù)指定文件的打開(kāi)模式 。 文件打開(kāi)模式 的具體標(biāo)志見(jiàn)表 9-2。 可以用按位 OR( |) 運(yùn)算符

9、組合 這些標(biāo)志 , 它們作為枚舉器定義在 ios類中 。 第 9章 流類庫(kù)與輸入 /輸出 表 9-2 文件打開(kāi)模式 第 9章 流類庫(kù)與輸入 /輸出 打開(kāi)一個(gè)輸出文件 , 用于在文件尾添加數(shù)據(jù) 打開(kāi)一個(gè)現(xiàn)存文件 (用于輸入或輸出 )并查找到結(jié)尾 打開(kāi)一個(gè)輸入文件 。 對(duì)于一個(gè) ofstream文件 , 使用 ios::in作為一個(gè) openmode, 可避免刪除一個(gè)現(xiàn)存文件中 現(xiàn)有的內(nèi)容 打開(kāi)一個(gè)文件 , 用于輸出 。 對(duì)于所有 ofstream對(duì)象 , 此模式是隱含指定的 如果一個(gè)文件存在 , 則打開(kāi)它;否

10、則該操作失敗 第 9章 流類庫(kù)與輸入 /輸出 如果一個(gè)文件不存在 , 則作為新文件打開(kāi)它;如 果文件已存在 , 則該操作失敗 打開(kāi)一個(gè)文件 。 如果它已經(jīng)存在 , 則刪除其中原 有的內(nèi)容 。 如果指定了 ios::out, 但沒(méi)有指定 ios::ate、 ios::app和 ios::in, 則隱含為此模式 以二進(jìn)制模式打開(kāi)一個(gè)文件 (默認(rèn)是文本模式 ) Nprot是文件保護(hù)方式 , 它的標(biāo)志如表 9-3。 第 9章 流類庫(kù)與輸入 /輸出 表 9-3 文件保護(hù)方式 第 9章 流類庫(kù)與輸入 /輸出 【 例

11、 9-1】 向文件 myfile中寫(xiě)入一些信息 。 #include void main( ) ofstream fc(c:tempmyfile); fc<

12、eam(char*),只需要一個(gè)文件名,其它為 默認(rèn)。打開(kāi)方式默認(rèn)為 ios::out | ios::trunc,即該文件用 于接受程序的輸出。如果該文件已存在,則其內(nèi)容必 須先清除,否則就新建。 第 9章 流類庫(kù)與輸入 /輸出 如果要檢查文件是否打開(kāi) , 則須判斷成員函數(shù) fail( ): #include void func( ) ofstream fc(myfile); if(fc.fail( )) //fail( )= =1 cerr<

13、a<

14、=<

15、.4.1 使用流對(duì)象的成員函數(shù) 【 例 9-3】 使用 width成員函數(shù)控制輸出寬度 。 #include void main( ) double values =1.44,36.47,625.7,4096.24; for(int i=0;i<4;i++) 第 9章 流類庫(kù)與輸入 /輸出 cout.width(10); cout<

16、以至少 10個(gè)字符寬按右對(duì)齊方式 輸出數(shù)據(jù) 。 從程序的輸出結(jié)果可以看到 , 在少于 10個(gè) 字符寬的數(shù)值前加入了引導(dǎo)空格 。 空格是默認(rèn)的填充符 , 當(dāng)輸出的數(shù)據(jù)不能充滿指 定的寬度時(shí) , 系統(tǒng)會(huì)自動(dòng)以空格填充 。 另外 , 還可以 使用 fill成員函數(shù)為已經(jīng)指定寬度的域設(shè)置填充字符的 值 。 為了用星號(hào)填充數(shù)值列 , 我們可以將例 9-3中的 for 循環(huán)修改如下: 第 9章 流類庫(kù)與輸入 /輸出 for(int i=0;i<4;i++) cout.width(10); cout.fill(*); cout<

17、其輸出結(jié)果為 ******1.44 *****36.47 *****625.7 ***4096.24 第 9章 流類庫(kù)與輸入 /輸出 9.4.2 使用控制符 C++的輸入 /輸出流類庫(kù)提供了一些控制符 , 可以 直接嵌入到輸入 /輸出語(yǔ)句中來(lái)實(shí)現(xiàn)對(duì) I/O格式的控制 。 它的優(yōu)點(diǎn)是程序可以直接將控制符插入流中 , 而不必 單獨(dú)調(diào)用 。 表 9-4中列出了常用的 I/O流類庫(kù)控制符 。 第 9章 流類庫(kù)與輸入 /輸出 表 9-4 常用的 I/O流類庫(kù)控制符 第 9章 流類庫(kù)與輸入 /輸出 第 9章 流類庫(kù)與輸入 /輸出 【 例 9-4】 使用 s

18、etw控制符指定寬度 。 #include #include void main( ) double values =1.44,36.47,625.7,4096.24; char*names =Rose,John,Alice,Mary; for(int i=0;i<4;i++) 第 9章 流類庫(kù)與輸入 /輸出 cout<

19、anip.h。 在輸出中 , 字符串輸出在寬度為 6的域 中 , 整數(shù)輸出在寬度為 10的域中 。 程序運(yùn)行結(jié)果為 Rose 1.44 John 36.47 Alice 625.7 Mary 4096.24 第 9章 流類庫(kù)與輸入 /輸出 setw和 width都不截?cái)鄶?shù)值 。 如果一個(gè)數(shù)值需要比 set(n)確定的字符數(shù)更多的字符 , 則該值將使用它所需 要的所有字符 。 當(dāng)然 , 還要遵守該流的精度設(shè)置 。 setw和 width僅影響緊隨其后的域 , 即使用 setw和 widt

20、h 設(shè)置的間隔方式并不保留其效力 。 在一個(gè)域輸出完后 , 域?qū)挾然謴?fù)成它的默認(rèn)值 (必要的寬度 ), 但其它流格 式選項(xiàng)保持有效直到發(fā)生改變 。 第 9章 流類庫(kù)與輸入 /輸出 例如 , 下面的程序代碼: //... cout <

21、etw(5)<<2 <

22、setw, 它的影響是持 久的 , 直到用 resetiosflags重新恢復(fù)默認(rèn)值時(shí)為止 。 這段程序代碼的輸出結(jié)果為 1 2 3 1 2 3 常用控制符和流格式控制成員函數(shù)如表 9-5所示。 第 9章 流類庫(kù)與輸入 /輸出 表 9-5 常用控制符和流成員函數(shù) 第 9章 流類庫(kù)與輸入 /輸出 9.5 輸入 /輸出成員函數(shù) 9.5.1 使用成員函數(shù)輸入 1 getline( )函數(shù) 在程序使用 cin輸入時(shí), cin用空白符和行結(jié)束符將 各個(gè)值分開(kāi)。有時(shí)候輸入可能需要讀取一整行文

23、本并 且分開(kāi)不同的域,為此,我們可以使用 getline成員函數(shù)。 其函數(shù)原型如下: istream 第 9章 流類庫(kù)與輸入 /輸出 其中 , 第一個(gè)參數(shù)是字符數(shù)組 , 用于放置讀取的 文本;第二個(gè)參數(shù)是本次讀取的最大字符個(gè)數(shù);第三 個(gè)參數(shù)是分隔字符 , 作為讀取一行結(jié)束的標(biāo)志 。 getline成員函數(shù)的功能是允許從輸入流中讀取多 個(gè)字符 (包括空白字符和行結(jié)束符 ),并且允許指定輸 入終止字符 (默認(rèn)值是換行字符 )。在讀取完成后,從 讀取的內(nèi)容中刪除該終止字符。 第 9章 流類庫(kù)與輸入 /輸出 【 例 9-5】 為輸入流指定一個(gè)

24、終止字符 。 本程序連續(xù)讀入一串字符 , 直到遇到字符 t時(shí)停止 , 字符個(gè)數(shù)最多不超過(guò) 99個(gè) 。 程序中的 t是大小寫(xiě)敏感的 。 #include void main( ) char line100; cout<

25、 有些時(shí)候需要執(zhí)行每次只輸入單個(gè)字符 的操作 , 我們可以使用 get( )成員函數(shù)來(lái)完成 。 get( )函數(shù) 的格式如下: char istream::get( ); 【 例 9-6】 循環(huán)讀入字符 , 直到鍵入一個(gè) y字符 , 或 遇到文件尾 。 #include void main( ) char letter; while(!cin.eof( )) 第 9章 流類庫(kù)與輸入 /輸出 letter=cin.get( ); if(

26、letter==y) cout<

27、 cout <; cin.get( line, 25 ); cout << << line; 第 9章 流類庫(kù)與輸入 /輸出 9.5.2 使用成員函數(shù)輸出 【 例 9-7】 使用 put( )成員函數(shù) , 在屏幕上顯示字母 表中的字母 。 #include void main( ) char letter; for(letter=A;letter<=Z;letter++) cout.put(letter); 第 9章 流類庫(kù)與輸入

28、 /輸出 程序運(yùn)行結(jié)果為 ABCDEFGHIJKMNOPQRSTUVWXYZ 也可以像下面那樣在一條語(yǔ)句中連續(xù)調(diào)用 put( )函數(shù): cout.put(A).put(n); 該語(yǔ)句在輸出字符 A后輸出一個(gè)新?lián)Q行符 。 還可以用 ASCII碼值表達(dá)式調(diào)用 put( )函數(shù): cout.put(65); 該語(yǔ)句也輸出字符 A。 第 9章 流類庫(kù)與輸入 /輸出 9.6 用戶自定義類型的輸入 /輸出 【 例 9-8】 用戶自定義的插入運(yùn)算符和提取運(yùn)算符 。 #include class PhoneNumber

29、 private: char nationCode4; char areaCode4; char phoneCode8; 第 9章 流類庫(kù)與輸入 /輸出 public: friend ostream ; ostream //跳過(guò) ( input.getline(num.nationCode,4); input.ignore( ); //跳過(guò) ) input.getline(num.areaCode,4); input.ignore( ); //跳過(guò) - input.getl

30、ine(num.phoneCode,8); return input; 第 9章 流類庫(kù)與輸入 /輸出 void main( ) PhoneNumber phone; cout<

31、m對(duì)象的引用 。 在該程序中 , 重載的 插入運(yùn)算符按輸入格式顯示類 PhoneNumber的對(duì)象 。 該運(yùn)算符函數(shù)將電話號(hào)碼各部分顯示為字符串 , 因?yàn)?它們是以字符串格式存儲(chǔ)的 ( 類 istream中的成員函數(shù) getline在結(jié)束輸入后存儲(chǔ)一個(gè)空字符 ) 。 第 9章 流類庫(kù)與輸入 /輸出 重載的運(yùn)算符函數(shù)在類 PhoneNumber中被聲明為友 元函數(shù) 。 為了能夠訪問(wèn)類中非公有成員 , 重載的輸入 和輸出運(yùn)算符必須被聲明為類的友元 。 C++允許為用戶自定義類型增加新的輸入 /輸出能 力,而無(wú)需修改類 ostream或 istream中的聲明和私有數(shù) 據(jù)成員。這大大提高了 C++的可擴(kuò)展性。

展開(kāi)閱讀全文
溫馨提示:
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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
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),我們立即給予刪除!