C程序設計語言揣錦華第9章流類庫與輸入輸出ppt課件
《C程序設計語言揣錦華第9章流類庫與輸入輸出ppt課件》由會員分享,可在線閱讀,更多相關《C程序設計語言揣錦華第9章流類庫與輸入輸出ppt課件(62頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、第9章 流類庫與輸入/輸出第第9章章 流類庫與輸入流類庫與輸入/輸出輸出 9.1 輸入輸入/輸出規(guī)范流類輸出規(guī)范流類9.2 文件流類文件流類9.3 串流類串流類9.4 控制符控制符第9章 流類庫與輸入/輸出9.1 輸入輸入/輸出規(guī)范流類輸出規(guī)范流類 9.1.1 輸入/輸出流的概念 就像C言語一樣,C+言語中也沒有輸入/輸出語句。C+的I/O是以字節(jié)流的方式實現(xiàn)的,每一個C+編譯系統(tǒng)都帶有一個面向?qū)ο蟮妮斎?輸出軟件包,這就是I/O流類庫。其中,流是I/O流類的中心概念。到目前為止,我們不斷在運用它。第9章 流類庫與輸入/輸出 所謂流,是指數(shù)據(jù)從一個對象流向另一個對象。在C+程序中,數(shù)據(jù)可以從鍵
2、盤流入到程序中,也可以從程序中流向屏幕或磁盤文件,把數(shù)據(jù)的流動籠統(tǒng)為“流。流在運用前要被建立,運用后要被刪除,還要運用一些特定的操作從流中獲取數(shù)據(jù)或向流中添加數(shù)據(jù)。從流中獲取數(shù)據(jù)的操作稱為提取操作,向流中添加數(shù)據(jù)的操作稱為插入操作。第9章 流類庫與輸入/輸出 流實踐上就是一個字節(jié)序列。在輸入操作中,字節(jié)從輸入設備(如鍵盤、磁盤、網(wǎng)絡銜接等)流向內(nèi)存;在輸出操作中,字節(jié)從內(nèi)存流向輸出設備(如顯示器、打印機、磁盤、網(wǎng)絡銜接等)。如圖9-1所示。在C+言語中,針對流的特點,提供了如圖9-2所示的層次構造來描畫流的行為,并給出了I/O流類庫的操作。第9章 流類庫與輸入/輸出第9章 流類庫與輸入/輸出圖
3、9-2 輸入/輸出流類層次圖 第9章 流類庫與輸入/輸出 表9-1 I/O流類列表 第9章 流類庫與輸入/輸出 9.1.2 輸入/輸出規(guī)范流類 1規(guī)范流的設備名 由表9-1可見,I/O流的規(guī)范頭文件是iostream.h。其中,ostream類經(jīng)過其派生類ostream_withassign支持以下預先定義的流對象:cout:規(guī)范輸出。默許設備為屏幕。cerr:規(guī)范錯誤輸出。沒有緩沖,發(fā)送給它的內(nèi)容立刻被輸出,默許設備為屏幕。第9章 流類庫與輸入/輸出 clog:規(guī)范錯誤輸出。有緩沖,當緩沖區(qū)滿時被輸出,默許設備為打印機。而istream類經(jīng)過其派生類istream_withassign支持預
4、先定義的對象。cin:規(guī)范輸入。默許設備為鍵盤。第9章 流類庫與輸入/輸出 2原理 cout是ostream類的全局對象,它在頭文件iostream.h中的定義如下:ostream cout(stdout);/這里,stdout作為該對象構造時的參數(shù)對應每種根本數(shù)據(jù)類型,ostream類都存在友元,它們都在iostream.h中聲明。例如:ostream&operator(int n);ostream&operator(float f);ostream&operator(const char*psz);/.第9章 流類庫與輸入/輸出 如語句:coutHow old are you?;cout是
5、類ostream的對象,(int&n);istream&operator(float&f);istream&operator(char*psz);/.第9章 流類庫與輸入/輸出9.2 文件流類文件流類 fstream、ifstream和ofstream是文件流類,在頭文件fstream.h中定義。其中,fstream是ofstream和ifstream多重承繼的子類。文件流類不是規(guī)范設備,沒有cout那樣預先定義的全局對象。文件流類支持對磁盤文件的操作。要定義一個文件流類對象,須指定文件名和翻開方式。第9章 流類庫與輸入/輸出類ofstream用于執(zhí)行文件輸出,該類有以下幾個構造函數(shù):ofst
6、ream: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í)行文件輸入,該類有以下幾個構造函數(shù):ifstream:ifstream(filedesc fd);ifstream:ifstream(filedesc fd,char*pch,int nLength);ifstream:ifst
7、ream(const char*szName,int nMode=ios:in,int nProt=filebuf:openprot);第9章 流類庫與輸入/輸出 其中最常用的都是最后一個構造函數(shù)。該函數(shù)有三個參數(shù),第一個參數(shù)是指向要翻開的文件名的字符串,后兩個參數(shù)指定文件的翻開方式。文件翻開方式的詳細標志見表9-2??梢杂冒次籓R|運算符組合這些標志,它們作為枚舉器定義在ios類中。第9章 流類庫與輸入/輸出 表9-2 文件翻開方式 第9章 流類庫與輸入/輸出 翻開一個輸出文件,用于在文件尾添加數(shù)據(jù) 翻開一個現(xiàn)存文件(用于輸入或輸出)并查找到結(jié)尾 翻開一個輸入文件。對于一個ofstream文
8、件,運用ios:in作為一個openmode,可防止刪除一個現(xiàn)存文件中現(xiàn)有的內(nèi)容 翻開一個文件,用于輸出。對于一切ofstream對象,此方式是隱含指定的 假設一個文件存在,那么翻開它;否那么該操作失敗第9章 流類庫與輸入/輸出 假設一個文件不存在,那么作為新文件翻開它;假設文件已存在,那么該操作失敗 翻開一個文件。假設它曾經(jīng)存在,那么刪除其中原有的內(nèi)容。假設指定了ios:out,但沒有指定ios:ate、ios:app和ios:in,那么隱含為此方式 以二進制方式翻開一個文件(默許是文本方式)Nprot是文件維護方式,它的標志如表9-3。第9章 流類庫與輸入/輸出 表9-3 文件維護方式 第
9、9章 流類庫與輸入/輸出【例9-1】向文件myfile中寫入一些信息。#includevoid main()ofstream fc(c:tempmyfile);fcConstructs an ofstream object.nAll ofstream constructors construct a filebuf object.n;第9章 流類庫與輸入/輸出 留意:這里的文件名要闡明其途徑,要運用雙斜杠,由于C+編譯器了解單斜杠為字符轉(zhuǎn)換符。在 文 件 翻 開 時,匹 配 了 構 造 函 數(shù)ofstream:ofstream(char*),只需求一個文件名,其它為默許。翻開方式默以為ios:
10、out|ios:trunc,即該文件用于接受程序的輸出。假設該文件已存在,那么其內(nèi)容必需先去除,否那么就新建。第9章 流類庫與輸入/輸出假設要檢查文件能否翻開,那么須判別成員函數(shù)fail():#include void func()ofstream fc(myfile);if(fc.fail()/fail()=1 cerrerror opening filen;return;fca;coutaendl;輸出結(jié)果為 H第9章 流類庫與輸入/輸出【例9-2】運用串流輸入對字符串中的數(shù)據(jù)進展解讀。#include#includechar*ioString(char*);void main()char
11、*str=100 123.456;char*Buf0=ioString(str);coutBuf0iNumberfNumber;/從串流中讀入一個整數(shù)和浮點數(shù)char*Buf1=new char28;ostrstream outS(Buf1,28);outSiNumber=iNumber,fNumber=fNumberendl;return Buf1;第9章 流類庫與輸入/輸出 程序運轉(zhuǎn)結(jié)果為 iNumber=100,fNumber=123.456 分析:在函數(shù)ioString()中,以pString為輸入設備,先定義一個輸入串流對象inS,從中輸入一個整數(shù)和一個浮點數(shù)。再開辟一個字符串空間作
12、為輸出設備,定義一個輸出串流對象outS,將從輸入設備輸入的兩個變量的值輸出。第9章 流類庫與輸入/輸出9.4 控制符控制符 9.4.1 運用流對象的成員函數(shù)【例9-3】運用width成員函數(shù)控制輸出寬度。#include void main()double values=1.44,36.47,625.7,4096.24;for(int i=0;i4;i+)第9章 流類庫與輸入/輸出cout.width(10);coutvaluesin;程序運轉(zhuǎn)結(jié)果為 1.4436.47625.74096.24第9章 流類庫與輸入/輸出 此例子在一列中以致少10個字符寬按右對齊方式輸出數(shù)據(jù)。從程序的輸出結(jié)果可
13、以看到,在少于10個字符寬的數(shù)值前參與了引導空格??崭袷悄S的填充符,當輸出的數(shù)據(jù)不能充溢指定的寬度時,系統(tǒng)會自動以空格填充。另外,還可以運用fill成員函數(shù)為曾經(jīng)指定寬度的域設置填充字符的值。為了用星號填充數(shù)值列,我們可以將例9-3中的for循環(huán)修正如下:第9章 流類庫與輸入/輸出for(int i=0;i4;i+)cout.width(10);cout.fill(*);coutvaluesiendl;其輸出結(jié)果為*1.44*36.47*625.7*4096.24第9章 流類庫與輸入/輸出 9.4.2 運用控制符 C+的輸入/輸出流類庫提供了一些控制符,可以直接嵌入到輸入/輸出語句中來實現(xiàn)對
14、I/O格式的控制。它的優(yōu)點是程序可以直接將控制符插入流中,而不用單獨調(diào)用。表9-4中列出了常用的I/O流類庫控制符。第9章 流類庫與輸入/輸出表9-4 常用的I/O流類庫控制符第9章 流類庫與輸入/輸出第9章 流類庫與輸入/輸出【例9-4】運用setw控制符指定寬度。#include#includevoid main()double values=1.44,36.47,625.7,4096.24;char*names=Rose,John,Alice,Mary;for(int i=0;i4;i+)第9章 流類庫與輸入/輸出 coutsetw(6)namesisetw(10)valuesiendl
15、;width成員函數(shù)在頭文件iostream.h中闡明。假設帶參量運用setw(n)或任何其它控制符,還必需包括頭文件iomanip.h。在輸出中,字符串輸出在寬度為6的域中,整數(shù)輸出在寬度為10的域中。程序運轉(zhuǎn)結(jié)果為 Rose 1.44 John 36.47 Alice 625.7 Mary 4096.24第9章 流類庫與輸入/輸出 setw和width都不截斷數(shù)值。假設一個數(shù)值需求比set(n)確定的字符數(shù)更多的字符,那么該值將運用它所需求的一切字符。當然,還要遵守該流的精度設置。setw和width僅影響緊隨其后的域,即使用setw和width設置的間隔方式并不保管其效能。在一個域輸出完
16、后,域?qū)挾然謴统伤哪S值(必要的寬度),但其它流格式選項堅持有效直到發(fā)生改動。第9章 流類庫與輸入/輸出例如,下面的程序代碼:/.cout setiosflags(ios:right)/設置為默許的右對齊方式,setw(5)1setw(5)2setw(5)3endl;cout setiosflags(ios:left)/設置成左對齊方式 第9章 流類庫與輸入/輸出 setw(5)1 setw(5)2 setw(5)3endl;coutresetiosflags(ios:left)/封鎖左對齊標志 /.這段程序代碼中,是經(jīng)過運用帶參數(shù)的setiosflags控制符來設置左、右對齊,參數(shù)是ios
17、:left和ios:right枚舉器。第9章 流類庫與輸入/輸出 該枚舉器定義在ios類中,因此,援用時必需包括ios:前綴。這里需求用resctiosflags支配符封鎖左、右對齊標志。setiosflags不同于width和setw,它的影響是耐久的,直到用resetiosflags重新恢復默許值時為止。這段程序代碼的輸出結(jié)果為 1 2 3 1 2 3 常用控制符和流格式控制成員函數(shù)如表9-5所示。第9章 流類庫與輸入/輸出表9-5 常用控制符和流成員函數(shù) 第9章 流類庫與輸入/輸出9.5 輸入輸入/輸出成員函數(shù)輸出成員函數(shù) 9.5.1 運用成員函數(shù)輸入 1getline()函數(shù) 在程序運
18、用cin輸入時,cin用空白符和行終了符將各個值分開。有時候輸入能夠需求讀取一整行文本并且分開不同的域,為此,我們可以運用getline成員函數(shù)。其函數(shù)原型如下:istream&getline(char*pch,int nCount,char delim=n);第9章 流類庫與輸入/輸出 其中,第一個參數(shù)是字符數(shù)組,用于放置讀取的文本;第二個參數(shù)是本次讀取的最大字符個數(shù);第三個參數(shù)是分隔字符,作為讀取一行終了的標志。getline成員函數(shù)的功能是允許從輸入流中讀取多個字符(包括空白字符和行終了符),并且允許指定輸入終止字符(默許值是換行字符)。在讀取完成后,從讀取的內(nèi)容中刪除該終止字符。第9章
19、 流類庫與輸入/輸出 【例9-5】為輸入流指定一個終止字符。本程序延續(xù)讀入一串字符,直到遇到字符t時停頓,字符個數(shù)最多不超越99個。程序中的t是大小寫敏感的。#include void main()char line100;coutType a line terminated by tendl;cin.getline(line,100,t);coutlineendl;第9章 流類庫與輸入/輸出 2get()函數(shù) 在輸入時,有些時候需求執(zhí)行每次只輸入單個字符的操作,我們可以運用get()成員函數(shù)來完成。get()函數(shù)的格式如下:char istream:get();【例9-6】循環(huán)讀入字符,直到
20、鍵入一個y字符,或遇到文件尾。#include void main()char letter;while(!cin.eof()第9章 流類庫與輸入/輸出letter=cin.get();if(letter=y)coutybe met!;break;coutletter;第9章 流類庫與輸入/輸出 get()函數(shù)還有一種方式可以輸入一系列字符,直到輸入流中出現(xiàn)終了符或所讀字符個數(shù)已到達要求讀的字符個數(shù)。這時,get()函數(shù)的函數(shù)原型如下:istream&istream:get(char*,int n,char delim=n);第9章 流類庫與輸入/輸出 例如,下面程序輸入一系列字符,將前24個
21、字符輸出。#include void main()char line25;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章 流類庫與輸入/輸出程序運轉(zhuǎn)結(jié)果為ABCDEFGHIJKMNOPQRSTUVWXYZ也可以像下面那樣在一條語句中延續(xù)調(diào)用put()函數(shù):cout.put(A).put(n);該
22、語句在輸出字符A后輸出一個新?lián)Q行符。還可以用ASCII碼值表達式調(diào)用put()函數(shù):cout.put(65);該語句也輸出字符A。第9章 流類庫與輸入/輸出9.6 用戶自定義類型的輸入用戶自定義類型的輸入/輸出輸出【例9-8】用戶自定義的插入運算符和提取運算符。#include class PhoneNumber private:char nationCode4;char areaCode4;char phoneCode8;第9章 流類庫與輸入/輸出public:friend ostream&operator(istream&,PhoneNumber&);ostream&operator(os
23、tream&output,PhoneNumber&num)output(num.nationCode)num.areaCode-(istream&input,PhoneNumber&num)input.ignore();/跳過 input.getline(num.nationCode,4);input.ignore();/跳過 input.getline(num.areaCode,4);input.ignore();/跳過-input.getline(num.phoneCode,8);return input;第9章 流類庫與輸入/輸出void main()PhoneNumber phone;
24、coutEnter a telephone number in thephone;coutThe phone number entered was:nphonephone1phone2;第9章 流類庫與輸入/輸出 插入運算符的兩個參數(shù)是對ostream對象的援用和對自定義類型本例中為PhoneNumber的對象的援用,前往對ostream對象的援用。在該程序中,重載的插入運算符按輸入格式顯示類PhoneNumber的對象。該運算符函數(shù)將號碼各部分顯示為字符串,由于它們是以字符串格式存儲的類istream中的成員函數(shù)getline在終了輸入后存儲一個空字符。第9章 流類庫與輸入/輸出 重載的運算符函數(shù)在類PhoneNumber中被聲明為友元函數(shù)。為了可以訪問類中非公有成員,重載的輸入和輸出運算符必需被聲明為類的友元。C+允許為用戶自定義類型添加新的輸入/輸出才干,而無需修正類ostream或istream中的聲明和私有數(shù)據(jù)成員。這大大提高了C+的可擴展性。
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習題含答案
- 2煤礦安全監(jiān)測工種技術比武題庫含解析
- 1 礦山應急救援安全知識競賽試題
- 1 礦井泵工考試練習題含答案
- 2煤礦爆破工考試復習題含答案
- 1 各種煤礦安全考試試題含答案