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 輸入 /輸出標準流類 9.2 文件流類 9.3 串流類 9.4 控制符 第 9章 流類庫與輸入 /輸出 9.1 輸入 /輸出標準流類 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 輸入 /輸出標準流類 1 標準流的設(shè)備名 由表 9-1可見 , I/O流的標準頭文件是 iostream.h。

4、其 中 , ostream類通過其派生類 ostream_withassign支持以 下預(yù)先定義的流對象: cout:標準輸出 。 默認設(shè)備為屏幕 。 cerr:標準錯誤輸出 。 沒有緩沖 , 發(fā)送給它的內(nèi)容 立即被輸出 , 默認設(shè)備為屏幕 。 第 9章 流類庫與輸入 /輸出 clog:標準錯誤輸出 。 有緩沖 , 當緩沖區(qū)滿時被輸 出 , 默認設(shè)備為打印機 。 而 istream類通過其派生類 istream_withassign支持預(yù) 先定義的對象 。 cin:標準輸入。默認設(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多 重繼承的子類。文件流類不是標準設(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ù)指定文件的打開模式 。 文件打開模式 的具體標志見表 9-2。 可以用按位 OR( |) 運算符

9、組合 這些標志 , 它們作為枚舉器定義在 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, 則隱含為此模式 以二進制模式打開一個文件 (默認是文本模式 ) Nprot是文件保護方式 , 它的標志如表 9-3。 第 9章 流類庫與輸入 /輸出 表 9-3 文件保護方式 第 9章 流類庫與輸入 /輸出 【 例

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

12、eam(char*),只需要一個文件名,其它為 默認。打開方式默認為 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)空格 。 空格是默認的填充符 , 當輸出的數(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ù)更多的字符 , 則該值將使用它所需 要的所有字符 。 當然 , 還要遵守該流的精度設(shè)置 。 setw和 width僅影響緊隨其后的域 , 即使用 setw和 widt

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

21、etw(5)<<2 <

22、setw, 它的影響是持 久的 , 直到用 resetiosflags重新恢復(fù)默認值時為止 。 這段程序代碼的輸出結(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é)束的標志 。 getline成員函數(shù)的功能是允許從輸入流中讀取多 個字符 (包括空白字符和行結(jié)束符 ),并且允許指定輸 入終止字符 (默認值是換行字符 )。在讀取完成后,從 讀取的內(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)容負責。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(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),我們立即給予刪除!