第12章輸入輸出流_第1頁(yè)
第12章輸入輸出流_第2頁(yè)
第12章輸入輸出流_第3頁(yè)
第12章輸入輸出流_第4頁(yè)
第12章輸入輸出流_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論