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

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

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

14.9 積分

下載資源

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

資源描述:

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

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

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

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

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

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

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

7、ofstream用于執(zhí)行文件輸出 , 該類有以下幾個構(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章 流類庫與輸入 /輸出 類 ifstream用于執(zhí)行文件輸入 , 該類有以下幾個構(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章 流類庫與輸入 /輸出 其中最常用的都是最后一個構(gòu)造函數(shù) 。 該函數(shù)有 三個參數(shù) , 第一個參數(shù)是指向要打開的文件名的字符 串 , 后兩個參數(shù)指定文件的打開模式 。 文件打開模式 的具體標(biāo)志見表 9-2。 可以用按位 OR( |) 運算符

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

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

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

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

13、a<

14、=<

15、.4.1 使用流對象的成員函數(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章 流類庫與輸入 /輸出 cout.width(10); cout<

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

17、其輸出結(jié)果為 ******1.44 *****36.47 *****625.7 ***4096.24 第 9章 流類庫與輸入 /輸出 9.4.2 使用控制符 C++的輸入 /輸出流類庫提供了一些控制符 , 可以 直接嵌入到輸入 /輸出語句中來實現(xiàn)對 I/O格式的控制 。 它的優(yōu)點是程序可以直接將控制符插入流中 , 而不必 單獨調(diào)用 。 表 9-4中列出了常用的 I/O流類庫控制符 。 第 9章 流類庫與輸入 /輸出 表 9-4 常用的 I/O流類庫控制符 第 9章 流類庫與輸入 /輸出 第 9章 流類庫與輸入 /輸出 【 例 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章 流類庫與輸入 /輸出 cout<

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

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

21、etw(5)<<2 <

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

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

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

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

26、letter==y) cout<

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

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

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

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

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

展開閱讀全文
溫馨提示:
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)容負(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)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!