




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 C+程序設(shè)計(jì)實(shí)例教程程序設(shè)計(jì)實(shí)例教程第第12章章 輸入輸出流輸入輸出流 C+語(yǔ)言程序中的輸入和輸出數(shù)據(jù)以字節(jié)流的形式存在。標(biāo)準(zhǔn)庫(kù)中提供一組類(lèi)模板用于數(shù)據(jù)的輸入和輸出,這些類(lèi)模板的實(shí)例所生成的對(duì)象稱(chēng)為流對(duì)象。流對(duì)象關(guān)聯(lián)輸入或輸出設(shè)備時(shí),對(duì)流對(duì)象的操作就等于對(duì)流對(duì)象關(guān)聯(lián)的輸入或輸出設(shè)備進(jìn)行操作。各種流對(duì)象所屬的類(lèi)型都繼承自同一個(gè)基類(lèi),因此,C+語(yǔ)言程序與各種輸入或輸出設(shè)備交換數(shù)據(jù)時(shí),所采用的語(yǔ)法格式基本相同。 本章以自頂向下的順序介紹流類(lèi)庫(kù)中提供的類(lèi)模板,介紹類(lèi)模板中用于輸入輸出操作的成員函數(shù)。最后介紹與輸入輸出流相關(guān)的迭代器。 C+程序設(shè)計(jì)實(shí)例教程程序設(shè)計(jì)實(shí)例教程知識(shí)體系知識(shí)體系 本章要點(diǎn):本
2、章要點(diǎn):12.1輸入輸出流的概述輸入輸出流的概述 12.2ios_base中的狀態(tài)標(biāo)志中的狀態(tài)標(biāo)志 12.3ios_base中的格式標(biāo)志中的格式標(biāo)志 12.4利用操縱算子設(shè)置流的格式標(biāo)志利用操縱算子設(shè)置流的格式標(biāo)志 12.5basic_istream中主要的成員函數(shù)中主要的成員函數(shù) 12.6basic_ostream中主要的成員函數(shù)中主要的成員函數(shù) 12.7文件流文件流 12.8string流流 12.9流的流的iterator C+程序設(shè)計(jì)實(shí)例教程程序設(shè)計(jì)實(shí)例教程12.1 輸入輸出流的概述輸入輸出流的概述 不論輸入或輸出的數(shù)據(jù)是什么類(lèi)型,輸入或輸出的數(shù)據(jù)總以字節(jié)流的形式存在。字節(jié)流就是指字節(jié)
3、的序列;輸入設(shè)備(如鍵盤(pán)、磁盤(pán)等)中的數(shù)據(jù)流向內(nèi)存,稱(chēng)為輸入;內(nèi)存中的數(shù)據(jù)流向輸出設(shè)備(如顯示器、磁盤(pán)等),稱(chēng)為輸出。C+語(yǔ)言標(biāo)準(zhǔn)庫(kù)中有一族類(lèi)模板專(zhuān)門(mén)負(fù)責(zé)數(shù)據(jù)的輸入和輸出,這些類(lèi)模板以統(tǒng)一的方式來(lái)處理標(biāo)準(zhǔn)I/O、文件讀/寫(xiě)等與數(shù)據(jù)流有關(guān)的操作。我們經(jīng)常使用的cout和cin就是標(biāo)準(zhǔn)庫(kù)中的流對(duì)象,它們的數(shù)據(jù)類(lèi)型分別是就是標(biāo)準(zhǔn)庫(kù)中的流對(duì)象,它們的數(shù)據(jù)類(lèi)型分別是ostream和和istream。 C+程序設(shè)計(jì)實(shí)例教程程序設(shè)計(jì)實(shí)例教程 那么,ostream和istream在關(guān)于流的“大家族”中到底處于什么位置呢?通過(guò)下圖,我們來(lái)回答這個(gè)問(wèn)題。 C+程序設(shè)計(jì)實(shí)例教程程序設(shè)計(jì)實(shí)例教程12.2 ios_ba
4、se中的狀態(tài)標(biāo)志中的狀態(tài)標(biāo)志 類(lèi)型ios_base中定義了4個(gè)狀態(tài)標(biāo)志稱(chēng)為ios:goodbit、ios:eofbit、ios:failbit、ios:badbit,它們都是枚舉類(lèi)型io_state的常量。 很奇怪這里都是ios:,而不是ios_base:。您可以認(rèn)為類(lèi)型ios_base繼承自類(lèi)型ios,或者ios_base就是ios。 程序12.1驗(yàn)證上面的論述。 C+程序設(shè)計(jì)實(shí)例教程程序設(shè)計(jì)實(shí)例教程1 /12.1 流的狀態(tài)標(biāo)志流的狀態(tài)標(biāo)志 2 #include 3 #include 4 #include 5 using std:cin; 6 using std:cout; 7 using
5、std:endl; 8 using std:ios; 9 using std:istream;10 using std:ifstream;11 using std:string;13 void f(const istream& in)14 coutin.good()=in.good()endl;16 coutin.eof()=in.eof()endl;17 coutin.fail()=in.fail()endl;18 coutin.bad()=in.bad()endl;19 coutin.rdstate()=in.rdstate()endl;20 cout-a;29 couta=astr;37
6、 coutstr=strc;13 cout(int)c=(int)cendl;14 cin.setf(ios:skipws);15 cout-endl;17 cout.flags(ios:showbase|ios:uppercase|ios:hex|ios:internal);18 cout.width(15);19 cout.fill($);20 cout12endl;21 cout-endl;23 cout.setf(ios:showpos);24 cout.setf(ios:dec,ios:basefield);25 cout.setf(ios:scientific,ios:floatf
7、ield);26 cout.setf(ios:right,ios:adjustfield);27 cout.precision(2);28 cout.width(15);29 cout.fill(*);30 cout12.5555555endl;31 cout-noskipwsc;34 cout(int)c=(int)cskipws;36 cout-endl;38 coutshowbaseuppercasehexinternalsetw(15)setfill($)12endl;39 cout-endl;41 coutshowposdecscientificrightsetprecision(2
8、)setw(15)42 setfill(*)12.5555555endl;43 cout-endl;45 bool b=0;47 coutb=setw(10)right_boolalphabendl;48 cout-函數(shù)。 下面介紹的成員函數(shù)getline完成與第3個(gè)get函數(shù)類(lèi)似的功能,其函數(shù)原型如下: istream& istream:getline(char*, streamsize,char= n); 函數(shù)getline與第3個(gè)函數(shù)get的區(qū)別在于,函數(shù)get當(dāng)遇到分隔符后,停止獲取,并將分隔符留在輸入流中,函數(shù)getline當(dāng)遇到分隔符后,停止獲取,但會(huì)將分隔符從輸入流中取出。 程序
9、12.4演示上述函數(shù)的使用方法。 C+程序設(shè)計(jì)實(shí)例教程程序設(shè)計(jì)實(shí)例教程1 /12.4 輸入函數(shù)輸入函數(shù) 2 #include 3 #include 4 using std:cout; 5 using std:endl; 6 using std:ifstream;8 int main() 9 ifstream in1(c:/hello.txt);11 int i;12 while(i=in1.get()!=-1)13 cout(char)i;14 in1.close();15 cout-endl;17 ifstream in2(c:/hello.txt);18 char c;19 while(i
10、n2.get(c)20 coutc;21 in2.close();22 cout-endl;24 ifstream in3(c:/hello.txt);25 char str10; C+程序設(shè)計(jì)實(shí)例教程程序設(shè)計(jì)實(shí)例教程26 while(in3.get(str,10)27 coutstrn;29 in3.get();30 31 in3.close();32 cout-endl;34 ifstream in4(c:/hello.txt);35 while(in4.getline(str,10)36 coutstrn;37 in4.close();38 cout-endl;41 ifstream i
11、n5(c:/hello.txt);42 str9=0;43 in5.read(str,9);44 coutstrendl;45 in5.close();46 cout-endl;48 return 0;49 顯示結(jié)果:顯示結(jié)果:HelloC+!-HelloC+!-HelloC+!-HelloC+!-HelloC+- C+程序設(shè)計(jì)實(shí)例教程程序設(shè)計(jì)實(shí)例教程12.6 basic_ostream中主要的成員函數(shù)中主要的成員函數(shù) 類(lèi)模板basic_ostream是負(fù)責(zé)輸出的類(lèi)模板,其中主要的成員函數(shù)都與輸出有關(guān),在這些負(fù)責(zé)輸出的成員函數(shù)中,最常用的就是operator函數(shù)。本節(jié)介紹除了operator以
12、外的put和write函數(shù)。put和write函數(shù)對(duì)應(yīng)于類(lèi)模板basic_istream中的成員函數(shù)get(上一節(jié)介紹的3個(gè)get函數(shù)中的第2個(gè))和成員函數(shù)read。函數(shù)put和write的函數(shù)原型如下:ostream& ostream:put(char);ostream& ostream:write(const char*, streamsize); 程序12.5演示函數(shù)put和write的使用方法。 C+程序設(shè)計(jì)實(shí)例教程程序設(shè)計(jì)實(shí)例教程1 /12.5 輸出函數(shù)輸出函數(shù) 2 #include 3 using std:cout; 4 using std:endl; 5 6 int main()
13、 7 8 char str=HellonC+!n; 9 int i=0;10 while(stri)11 cout.put(stri+);12 cout-endl;13 cout.write(str,11);14 cout-endl;15 return 0;16 顯示結(jié)果:顯示結(jié)果:HelloC+!-HelloC+!- C+程序設(shè)計(jì)實(shí)例教程程序設(shè)計(jì)實(shí)例教程12.7 文件流文件流 使用文件流對(duì)象時(shí),除了使用以上幾節(jié)中使用過(guò)的成員函數(shù)外,還經(jīng)常用到tellg或或tellp函數(shù)獲取輸入流對(duì)象或輸出流對(duì)象中“文件指針”的位置,使用seekg或或seekp函數(shù)設(shè)置輸入流對(duì)象或輸出流對(duì)象中“文件指針”的位
14、置。在使用seekg或seekp函數(shù)設(shè)置“文件指針”位置時(shí),可以使用“絕對(duì)位置”或“相對(duì)位置”,使用“絕對(duì)位置”的seekg或seekp函數(shù)從文件頭部開(kāi)始計(jì)算偏移的位數(shù),使用“相對(duì)位置”的seekg或seekp函數(shù)通過(guò)函數(shù)中的第2個(gè)參數(shù)確定移動(dòng)的方向,第2個(gè)參數(shù)的取值可以是ios:beg、ios:cur、ios:end等 3個(gè)標(biāo)志之一,ios:beg表示從文件頭開(kāi)始的“相對(duì)位置”,ios:cur表示從當(dāng)前“文件指針”的位置開(kāi)始的“相對(duì)位置”,ios:end表示從文件尾開(kāi)始的“相對(duì)位置” 。 C+程序設(shè)計(jì)實(shí)例教程程序設(shè)計(jì)實(shí)例教程 open和close也是在文件處理中經(jīng)常被使用的成員函數(shù),open
15、用于打開(kāi)文件,close用于關(guān)閉文件。open函數(shù)除了接受char * 型參數(shù)(用于指定打開(kāi)文件的路徑和名字)以外,還能夠接受ios:in、ios:out等打開(kāi)模式標(biāo)志作為參數(shù)。這些標(biāo)志可以組合在一起相或使用。關(guān)于打開(kāi)模式標(biāo)志的含義參見(jiàn)表12.3。 表表12.3 打開(kāi)模式標(biāo)志打開(kāi)模式標(biāo)志 C+程序設(shè)計(jì)實(shí)例教程程序設(shè)計(jì)實(shí)例教程1 /12.6 為程序加行號(hào)為程序加行號(hào) 2 #include 3 #include 4 #include 5 #include 6 using std:cout; 7 using std:ifstream; 8 using std:setw; 910 int main()
16、11 12 ifstream in(為程序加行號(hào)為程序加行號(hào).cpp);13 char str100;14 int i=0;15 while(in.getline(str,99)16 coutsetw(2)+i strdi;18 coutd=dendl;19 couti=iendl;21 d*=2;22 i*=2;23 ostringstream oss;24 ossd i;25 str=oss.str();26 coutstr=strendl;27 28 return 0;29 顯示結(jié)果:顯示結(jié)果:d=12.34i=56str=24.68 112 C+程序設(shè)計(jì)實(shí)例教程程序設(shè)計(jì)實(shí)例教程12.9
17、 流的流的iterator iterator(迭代器)用于訪問(wèn)“數(shù)據(jù)容器”中的數(shù)據(jù)元素,iterator對(duì)象操縱數(shù)據(jù)元素的方式就像指向數(shù)據(jù)元素的指針一樣。在11.6節(jié)中我們介紹了string類(lèi)型的iterator,string類(lèi)型對(duì)象是char類(lèi)型變量的“容器”,string類(lèi)型的iterator對(duì)象操縱string類(lèi)型對(duì)象中的字符時(shí),就像char型指針操縱char型數(shù)組中的字符一樣,iterator對(duì)象本身可以進(jìn)行“+”、“-”等操作,利用“*”運(yùn)算符還可以對(duì)所指向的字符進(jìn)行讀寫(xiě)操作。 本節(jié)介紹的流的iterator繼承自標(biāo)準(zhǔn)庫(kù)中的類(lèi)模板iterator,它們并不屬于“stream家族”。流
18、的iterator提供了以“指針”方式操縱流中數(shù)據(jù)的方法。標(biāo)準(zhǔn)庫(kù)中提供關(guān)于流的iterator主要有istream_iterator和ostream_iterator兩個(gè)類(lèi)模板。 程序12.8簡(jiǎn)單演示了流iterator對(duì)象的定義和使用方法。 C+程序設(shè)計(jì)實(shí)例教程程序設(shè)計(jì)實(shí)例教程1 /12.8 流的流的iterator 2 #include 3 #include5 using std:cout; 6 using std:endl; 7 using std:istream_iterator; 8 using std:ostream_iterator;10 int main()11 int a,b;13 cout請(qǐng)輸入兩個(gè)整數(shù):請(qǐng)輸入兩個(gè)整數(shù):endl;14 istream_iterator
溫馨提示
- 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2031年中國(guó)手電筒燈行業(yè)投資前景及策略咨詢研究報(bào)告
- 防護(hù)網(wǎng)圍欄網(wǎng)施工方案
- 2025至2030年中國(guó)焙烤食品數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 墻掛式籃球架施工方案
- 2025年中國(guó)床式醫(yī)用氣墊(電子遙控式)市場(chǎng)調(diào)查研究報(bào)告
- 2025年中國(guó)塑膠插座市場(chǎng)調(diào)查研究報(bào)告
- 2025年中國(guó)噴絨乳膠家用手套市場(chǎng)調(diào)查研究報(bào)告
- 水上攔污浮筒施工方案
- 2025年中國(guó)TF-內(nèi)焊卡座市場(chǎng)調(diào)查研究報(bào)告
- 12 家鄉(xiāng)的喜與憂 第二課時(shí) 教學(xué)設(shè)計(jì)-2023-2024學(xué)年道德與法治四年級(jí)下冊(cè)統(tǒng)編版
- 長(zhǎng)江委水文局2025年校園招聘17人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年湖南韶山干部學(xué)院公開(kāi)招聘15人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 廣東省廣州市番禺區(qū)2023-2024學(xué)年七年級(jí)上學(xué)期期末數(shù)學(xué)試題
- 健身新人直播流程
- 不可切除肺癌放療聯(lián)合免疫治療專(zhuān)家共識(shí)(2024年版)j解讀
- DB23/T 3657-2023醫(yī)養(yǎng)結(jié)合機(jī)構(gòu)服務(wù)質(zhì)量評(píng)價(jià)規(guī)范
- 教科版科學(xué)六年級(jí)下冊(cè)14《設(shè)計(jì)塔臺(tái)模型》課件
- 企業(yè)的生產(chǎn)過(guò)程課件
- 智研咨詢發(fā)布:2024年中國(guó)MVR蒸汽機(jī)械行業(yè)市場(chǎng)全景調(diào)查及投資前景預(yù)測(cè)報(bào)告
- 法規(guī)解讀丨2024新版《突發(fā)事件應(yīng)對(duì)法》及其應(yīng)用案例
- JGJ46-2024 建筑與市政工程施工現(xiàn)場(chǎng)臨時(shí)用電安全技術(shù)標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論