第7章輸入輸出流_第1頁(yè)
第7章輸入輸出流_第2頁(yè)
第7章輸入輸出流_第3頁(yè)
第7章輸入輸出流_第4頁(yè)
第7章輸入輸出流_第5頁(yè)
已閱讀5頁(yè),還剩60頁(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+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流7.1 c+的輸入與輸出的輸入與輸出7.1.1 輸入輸出的含義 程序的輸入指的是從輸入文件將數(shù)據(jù)傳給程序,程序的輸出指的是從程序?qū)?shù)據(jù)傳給輸出文件。C+的輸入與輸出包括以下3方面的內(nèi)容: 對(duì)系統(tǒng)指定的標(biāo)準(zhǔn)設(shè)備的輸入和輸出。即從鍵盤(pán)輸入數(shù)據(jù),輸出到顯示器屏幕。這種輸入輸出成為標(biāo)準(zhǔn)的輸入輸出,簡(jiǎn)稱標(biāo)準(zhǔn)I/O。 以外存磁盤(pán)文件為對(duì)象進(jìn)行輸入輸出,即從磁盤(pán)文件輸入數(shù)據(jù),數(shù)據(jù)輸出到磁盤(pán)文件。近來(lái)已用光盤(pán)文件作為輸入文件。這種以外存文件為對(duì)象的輸入輸出稱為文件的輸入輸出,簡(jiǎn)稱文件I/O。C

2、+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流3、對(duì)內(nèi)存中指定的空間進(jìn)行輸入輸出。通常指定一個(gè)字符組作為儲(chǔ)存空間(實(shí)際上可以利用該空間儲(chǔ)存任何信息)。這種輸入輸出稱為字符串輸入輸出,簡(jiǎn)稱串I/O。C+采取不同的方式來(lái)實(shí)現(xiàn)以上3種輸出輸入。為了實(shí)現(xiàn)數(shù)據(jù)的有效流動(dòng),C+系統(tǒng)提供了龐大的I/O類(lèi)庫(kù),調(diào)用不同的類(lèi)去實(shí)現(xiàn)不同的功能。C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流7.1.2 c+的I/O對(duì)c的發(fā)展類(lèi)型安全和可擴(kuò)展性 C+為了與c兼容,保留了用prin

3、tf和scanf進(jìn)行輸入和數(shù)出的方法,以便使過(guò)去所編寫(xiě)的大量的c程序仍然可以在c+的環(huán)境下運(yùn)行,但是希望讀者在編寫(xiě)新的C+程序時(shí)不要用C的輸入輸出機(jī)制,而要用C+自己特有的輸入輸出方法。在C+的輸入輸出中,便以系統(tǒng)對(duì)數(shù)據(jù)類(lèi)型進(jìn)行嚴(yán)格的檢查,凡是類(lèi)型不正確的數(shù)據(jù)都不可能通過(guò)編譯。因此C+的I/O的操作是類(lèi)型安全的。C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流用printf和scanf可以輸入和輸出標(biāo)準(zhǔn)類(lèi)型的數(shù)據(jù),但無(wú)法輸出用戶自己聲明的類(lèi)型的數(shù)據(jù)。在C+中,會(huì)經(jīng)常用到對(duì)類(lèi)對(duì)象的輸入輸出,顯然無(wú)法使用printf和scanf

4、來(lái)處理。C+的I/O操作是可擴(kuò)展的,不僅可以用來(lái)輸入輸出標(biāo)準(zhǔn)類(lèi)型的數(shù)據(jù)也可以用于用戶自定義類(lèi)型的數(shù)據(jù)。C+對(duì)標(biāo)準(zhǔn)類(lèi)型的數(shù)據(jù)和對(duì)用戶聲明類(lèi)型的數(shù)據(jù)的輸入輸出,采用同樣的方法處理。顯然,在用戶聲明了一個(gè)新類(lèi)后是無(wú)法用printf和scanf函數(shù)直接輸出和輸入這個(gè)類(lèi)的對(duì)象的。可擴(kuò)展性是C+輸入輸出的重要特點(diǎn)之一,它能提高軟件的重用性,加快軟件的開(kāi)發(fā)過(guò)程。C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流7.1.3 c+的輸入與輸出流C+的輸入輸出流式指由若干字節(jié)組成的字節(jié)序列,這些字節(jié)中的數(shù)據(jù)按順序從一個(gè)對(duì)象傳到另一個(gè)對(duì)象。流表示了

5、信息從源到目的端的流動(dòng)。在內(nèi)存中為每一個(gè)數(shù)據(jù)流開(kāi)辟一個(gè)內(nèi)存緩沖區(qū),用來(lái)存放數(shù)據(jù)流中的數(shù)據(jù)。當(dāng)用count和插入運(yùn)算符“”向顯示器輸出數(shù)據(jù)時(shí),先將這些數(shù)據(jù)送到程序中的輸出緩沖區(qū)保存,直到緩沖區(qū)滿了或遇到endl,就將緩沖區(qū)的全部數(shù)據(jù)送到顯示器顯示出來(lái)。 在輸入時(shí),從鍵盤(pán)輸入的數(shù)據(jù)先放在鍵盤(pán)的緩沖區(qū)中,當(dāng)按回車(chē)鍵時(shí),鍵盤(pán)緩沖區(qū)的數(shù)據(jù)輸入到程序中的輸入緩沖區(qū),形成cin流,然后用提取運(yùn)算符“”從輸入緩沖區(qū)提取數(shù)據(jù)送給程序中的有關(guān)變量。流是與內(nèi)存緩沖區(qū)相對(duì)應(yīng),流是與內(nèi)存緩沖區(qū)相對(duì)應(yīng),或是說(shuō),緩沖區(qū)中的數(shù)據(jù)就是流?;蚴钦f(shuō),緩沖區(qū)中的數(shù)據(jù)就是流。C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流

6、標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流對(duì)iostream類(lèi)的對(duì)象進(jìn)一步的理解 1、iostream類(lèi)庫(kù)中的有關(guān)類(lèi)2、與iostream類(lèi)庫(kù)有關(guān)的頭文件3、在iostream頭文件中定義的流對(duì)象4、在isotream頭文件中重載運(yùn)算符 C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流7.2 標(biāo)準(zhǔn)輸出流 7.2.1 cout、cerr和clog流ostream類(lèi)定義了3個(gè)輸出流對(duì)象,即cout,cerr,clog。 1 1、coutcout流對(duì)象流對(duì)象coutcout是是console outputconso

7、le output的縮寫(xiě),意為在控制臺(tái)的縮寫(xiě),意為在控制臺(tái)(終端顯示器)的輸出(終端顯示器)的輸出(1)cout不是C+預(yù)定義的關(guān)鍵字,它是ostream流類(lèi)的對(duì)象,在iostream中定義。 C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流(2)用“cout”輸出基本類(lèi)型的數(shù)據(jù)時(shí),可以不考慮數(shù)據(jù)是什么類(lèi)型,系統(tǒng)會(huì)判斷數(shù)據(jù)的類(lèi)型,并根據(jù)其類(lèi)型選擇調(diào)用與之匹配的運(yùn)算符重載函數(shù)。(3)cout流在內(nèi)存中對(duì)應(yīng)開(kāi)辟了一個(gè)緩沖區(qū),用來(lái)存放流中的數(shù)據(jù),當(dāng)向cout流插入一個(gè)endl時(shí),不論緩沖區(qū)是否已満,都立即輸出流中所有數(shù)據(jù),然后插入

8、一個(gè)換行符,并刷新流(清空緩沖區(qū))。 C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流(4)在iostream中只對(duì)“”和“”運(yùn)算符用于標(biāo)準(zhǔn)類(lèi)型數(shù)據(jù)的輸出進(jìn)行了重載,但未對(duì)用戶聲明的類(lèi)型數(shù)據(jù)的輸入輸進(jìn)行重載。2 2cerrcerr流對(duì)象流對(duì)象cerr流對(duì)象是標(biāo)準(zhǔn)錯(cuò)誤流。cerr流已被指定與顯示器關(guān)聯(lián)。cerr的作用是向標(biāo)準(zhǔn)錯(cuò)誤設(shè)備(standard error device)輸出有關(guān)錯(cuò)信息。cerr是console error 的縮寫(xiě),意為“在控制臺(tái)(顯示器) 顯示出錯(cuò)信息”。 C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出

9、流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流3.3.clogclog流對(duì)象流對(duì)象clog流對(duì)象也是標(biāo)準(zhǔn)錯(cuò)誤流,它是console log的縮寫(xiě)。它的作用和cerr相同,都是在終端顯示器上顯示出錯(cuò)信息。它們之間有一個(gè)微小的區(qū)別:cerr是不經(jīng)過(guò)緩沖區(qū),直接向顯示器上輸出有關(guān)信息,而clog中的信息存放在緩沖區(qū)中,緩沖區(qū)満后或遇endl時(shí)向顯示器輸出。C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流7.2.2 格式輸出1.1.使用控制符控制輸出格式使用控制符控制輸出格式例例7.27.2用控制符控制輸出

10、格式。用控制符控制輸出格式。#include #include #include #include using namespace std;using namespace std;int main()int main()int a;int a; coutinput a:; couta; cina;C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流 coutdec:decaendl; couthex:hexaendl; coutoct:setbase(8)aendl; char *pt=China; coutsetw(10)pt

11、endl; coutsetfill(*)setw(10)ptendl; double pi=22.0/7.0;coutsetiosflags(ios:scientific)setprecision(8); coutpi=piendl; coutpi=setprecision(4)piendl; coutpi=setiosflags(ios:fixed)piendl; return 0;C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流2.2.用流對(duì)象的成員函數(shù)控制輸出格式用流對(duì)象的成員函數(shù)控制輸出格式除了可以用控制符來(lái)控制輸出

12、格式外,還可以通過(guò)調(diào)用流對(duì)象cout中用于控制輸出格式的成員函數(shù)來(lái)控制輸出格式。例7.3用流控制成員函數(shù)輸出數(shù)據(jù)#include using namespace std;int main()int a=21; cout.setf(ios:showbase); coutdec:aendl; cout.unsetf(ios:dec); cout.setf(ios:hex);C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流 couthex:aendl; cout.unsetf(ios:hex); cout.setf(ios:oct

13、); coutoct:aendl; char *pt=China; cout.width(10); coutptendl; cout.width(10); cout.fill(*); coutptendl; double pi=22.0/7.0; cout.setf(ios:scientific); coutpi=; cout.width(14);C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流 coutpiendl; cout.unsetf(ios:scientific); cout.setf(ios:fixed); co

14、ut.width(12); cout.setf(ios:showpos); cout.setf(ios:internal); cout.precision(6); coutpiendl; return 0;C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流7.2.3 用流成員函數(shù)put輸出字符在程序中一般用cout和插入運(yùn)算符“”實(shí)現(xiàn)輸出,cout流在內(nèi)存中有相應(yīng)的緩沖區(qū)。有時(shí)用戶還有輸出一個(gè)字符的特殊要求。Ostream類(lèi)還提供了專用于輸出單字符的成員函數(shù)put。完成C中putchar()的功能,如:cout.put(a);

15、cout.put(65+32);put函數(shù)可連續(xù)調(diào)用:如輸出GOODcout.put(71).put(79).put(79).put(68).put(n);C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流例7.4有一個(gè)字符串“BASIC”要求把它們按相反的順序輸出。#include using namespace std;int main()char *a=BASIC; for(int i=4;i=0;i-) cout.put(*(a+i); cout.put(n); return 0;C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流

16、標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流7.3 標(biāo)準(zhǔn)輸入流 iostream.h提供:cin,cout,cerr,clog7.3.1 cin 流 cin 是istream類(lèi)的對(duì)象,它從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤(pán))獲取數(shù)據(jù),程序中的變量通過(guò)流提取符“”從流中提取數(shù)據(jù)。流提取符“”從流中提取數(shù)據(jù)時(shí)通常跳過(guò)輸入流中的空格、tab鍵、換行符等空白字符。注意:只有在輸入完數(shù)據(jù)再按回車(chē)鍵后,該行數(shù)據(jù)才被送入鍵盤(pán)緩沖區(qū),形成輸入流,提取運(yùn)算符“”才能從中提取數(shù)據(jù)。需要保證從流中讀取數(shù)據(jù)能正常進(jìn)行(如何保證呢?)。 C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)

17、準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流例7.5通過(guò)測(cè)試cin的真值,判斷流對(duì)象是否處于正常狀態(tài)。#include using namespace std;int main()float grade; coutgrade) if(grade=85) coutgrade GOOD!endl; if(grade60) coutgrade fail!endl; coutenter grade:; C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流7.3.2 用于字符輸入的流成員函數(shù)用于字符輸入的流成員函數(shù)用用get

18、get 函數(shù)讀入一個(gè)字符函數(shù)讀入一個(gè)字符流成員函數(shù)get有3種形式:無(wú)參數(shù)的,有一個(gè)參數(shù)的,有3個(gè)參數(shù)的。(1)不帶參數(shù)的get函數(shù)其調(diào)用形式為cin.get()(2)有一個(gè)參數(shù)的get函數(shù)其調(diào)用形式為cin.get(ch)(3)有3個(gè)參數(shù)的get函數(shù)其調(diào)用形式為cin.get(字符數(shù)組,字符個(gè)數(shù)n,終止字符)或cin.get(字符指針,字符個(gè)數(shù)n,終止字符)C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流2.用成員函數(shù)用成員函數(shù)getline函數(shù)讀入一行字符函數(shù)讀入一行字符 getline函數(shù)的作用是從輸入流中讀取一行字符

19、,其用法與帶3個(gè)參數(shù)的get函數(shù)類(lèi)似。cin.getline(字符數(shù)組(或字符指針),字符個(gè)數(shù)n,終止標(biāo)志字符)例 7.7 用getline函數(shù)讀入一行字符。#include using namespace std;int main()char ch20; coutenter a sentence:ch; coutThe string read with cin is:chendl; cin.getline(ch,20,/);C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流 coutThe second part is:ch

20、endl; cin.getline(ch,20); /默認(rèn)n coutThe third part is:chendl; return 0;C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流7.3.3 istream 類(lèi)的其他成員函數(shù) 除了以上介紹的用于讀取的成員函數(shù)外,istream類(lèi)還有其他在輸入數(shù)據(jù)時(shí)用得著的一些成員函數(shù)。常用的有以下幾種: eofeof函數(shù)函數(shù)2. peek2. peek函數(shù)函數(shù)3. putback3. putback函數(shù)函數(shù)4. ignore4. ignore函數(shù)函數(shù)C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸

21、出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流1. eof 函數(shù) eof是end of file的縮寫(xiě),表示“文件結(jié)束”。從輸入流讀取數(shù)據(jù),如果到達(dá)文件末尾(遇文件結(jié)束符),eof函數(shù)值為非零值(表示真),否則為0(假)。C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流例7.8 逐個(gè)讀入一行字符,將其中的非空格字符輸出。#include using namespace std;int main( )char c; while(!cin.eof( )/eof( )為假表示未遇到文件結(jié)束符i

22、f(c=cin.get( )!= ) /檢查讀入的字符是否為空格字符 cout.put(c); return 0;運(yùn)行情況如下:C+ is very interesting.C+isveryinteresting.Z(結(jié)束)C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流2. peek函數(shù) peek是“觀察”的意思,peek函數(shù)的作用是觀測(cè)下一個(gè)字符。其調(diào)用形式為:c=cin.peek( );cin.peek 函數(shù)的返回值是指針指向的當(dāng)前字符,但它只是觀測(cè),指針仍停留在當(dāng)前位置,并不后移。如果要訪問(wèn)的字符是文件結(jié)束符,則函數(shù)

23、值是EOF(-1)。C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流3. putback函數(shù) 調(diào)用形式為: cin.putback(ch); 其作用是將前面用get或getline函數(shù)從輸入流中讀取的字符ch返回到輸入流,插入到當(dāng)前指針位置,以供后面讀取。例7.9 peek函數(shù)和putback函數(shù)的用法。#include using namespace std;int main( )char c20; int ch; coutplease enter a sentence:endl; cin.getline(c,15,/);

24、 coutThe first part is:cendl;C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流 ch=cin.peek( );/觀看當(dāng)前字符 coutThe next character(ASCII code) is:chendl; cin.putback(c0); /將I插入到指針?biāo)柑?cin.getline(c,15,/); coutThe second part is:cendl; return 0;運(yùn)行情況如下:please enter a sentence: I am a boy./ am a stu

25、dent./The first part is:I am a boy.The next character(ASCII code) is:32(下一個(gè)字符是空格)The second part is:I am a studentC+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流4. ignore函數(shù)調(diào)用形式為:cin.ignore(n, 終止字符) 函數(shù)作用是跳過(guò)輸入流中n個(gè)字符,或在遇到指定的終止字符時(shí)提前結(jié)束。如 cin.ignore(5, A)/跳過(guò)輸入流中5個(gè)字符,遇A后就不再跳了也可以不帶參數(shù)或只帶一個(gè)參數(shù)。如 ci

26、n.ignore( )(n默認(rèn)值為1,終止字符默認(rèn)為EOF)相當(dāng)于: ignore(1,EOF)C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流所謂“文件”,一般指存儲(chǔ)在外部介質(zhì)上數(shù)據(jù)的集合。一批數(shù)據(jù)是以文件的形式存放在外部介質(zhì)上的。操作系統(tǒng)是以文件為單位對(duì)數(shù)據(jù)進(jìn)行管理的。要向外部介質(zhì)上存儲(chǔ)數(shù)據(jù)也必須先建立一個(gè)文件(以文件名標(biāo)識(shí)),才能向它輸出數(shù)據(jù)。對(duì)用戶來(lái)說(shuō),常用到的文件有兩大類(lèi),一類(lèi)是程序文件(program file)。一類(lèi)是數(shù)據(jù)文件(data file)。程序中的輸入和輸出的對(duì)象就是數(shù)據(jù)文件。根據(jù)文件中數(shù)據(jù)的組織形式

27、,可分為ASCII文件和二進(jìn)制文件。7.4 文件操作與文件流 7.4.1 文件的概念C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流7.4.2 文件流類(lèi)與文件對(duì)象文件流是以外存文件為輸入輸出對(duì)象的數(shù)據(jù)流。輸出文件流是從內(nèi)存流向外存文件物數(shù)據(jù),輸入文件流是從外存文件向內(nèi)存的數(shù)據(jù)。每一個(gè)文件流都有一個(gè)內(nèi)存緩沖區(qū)與之對(duì)應(yīng)。文件流與文件的概念不同,不要誤以為文件流是由若干個(gè)文件組成的流。文件流本身不是文件,而只是以文件為輸入輸出對(duì)象的流。若要對(duì)磁盤(pán)文件輸入輸出,就必須通過(guò)文件流來(lái)實(shí)現(xiàn)。C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流

28、 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流7.4.3 文件的打開(kāi)與關(guān)閉1.1.打開(kāi)磁盤(pán)文件打開(kāi)磁盤(pán)文件所謂打開(kāi)(open)文件是一種形象的說(shuō)法。打開(kāi)文件是指在文件讀寫(xiě)之前做必要的準(zhǔn)備工作,包括:(1)為文件流對(duì)象和指定的磁盤(pán)文件建立關(guān)聯(lián),以便使文件流流向指定的磁盤(pán)文件。(2)指定文件的工作方式,如,該文件是作為輸入文件還是輸出文件,是ASCII文件還是二進(jìn)制文件等。C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流以上工作可以通過(guò)兩種不同的方法實(shí)現(xiàn)。(1)調(diào)用文件流的成員函數(shù)open。 調(diào)用成員函數(shù)

29、open的一般形式為文件流對(duì)象文件流對(duì)象.open.open(磁盤(pán)文件名,輸入輸出(磁盤(pán)文件名,輸入輸出方式);方式);磁盤(pán)文件名可以包括路徑,如c:newfl.dat,如缺省路徑,則默認(rèn)為當(dāng)前目錄下的文件。(2)在定義文件流對(duì)象時(shí)指定參數(shù)在聲明文件流類(lèi)時(shí)定義了帶參數(shù)的構(gòu)造函數(shù),其中包含了打開(kāi)磁盤(pán)文件的功能。因此,可以在定義文件流對(duì)象時(shí)指定參數(shù),調(diào)用文件流類(lèi)的構(gòu)造函數(shù)來(lái)實(shí)現(xiàn)打開(kāi)文件的功能。C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流2.2.關(guān)閉磁盤(pán)文件關(guān)閉磁盤(pán)文件在對(duì)打開(kāi)的磁盤(pán)文件的讀寫(xiě)操作完成后,應(yīng)關(guān)閉該文件。關(guān)閉文件

30、用成員函數(shù)close。如outfile.close( ); /將輸出文件流所關(guān)聯(lián)的磁盤(pán)文件關(guān)閉所謂關(guān)閉,實(shí)際上是解除該磁盤(pán)文件與文件流的關(guān)聯(lián),原來(lái)設(shè)置的工作方式也失效,這樣,就不能再通過(guò)文件流對(duì)該文件進(jìn)行輸入或輸出。此時(shí)可以將文件流與其他磁盤(pán)文件建立關(guān)聯(lián),通過(guò)文件流對(duì)新的文件進(jìn)行輸入或輸出。C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流7.4.4 對(duì)ASCII文件的操作如果文件的每一個(gè)字節(jié)中均以ASCII代碼形式存放數(shù)據(jù),即一個(gè)字節(jié)存放一個(gè)字符,這個(gè)文件就是ASCII文件(或稱字符文件)。如存放一篇英文文章的文本文件就是A

31、SCII文件。程序可以從ASCII文件中讀入若干個(gè)字符,也可以向它輸出一些字符。對(duì)ASCII文件的讀寫(xiě)操作可以用兩種方法:C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流(1)用流插入運(yùn)算符“”和流提取運(yùn)算符“”輸入輸出標(biāo)準(zhǔn)類(lèi)型的數(shù)據(jù)。 “”和“”都已在iostream中被重載為能用于ostream和istream類(lèi)對(duì)象的標(biāo)準(zhǔn)類(lèi)型的輸入輸出。由于ifstresm和ofstream分別是istream 和ostream 類(lèi)的派生類(lèi),它們從ostream 和istream 類(lèi)繼承了公用的重載函數(shù),所以在對(duì)磁盤(pán)文件的操作中,可以通

32、過(guò)文件流對(duì)象和插入運(yùn)算符“”及流提取運(yùn)算符“”實(shí)現(xiàn)了對(duì)磁盤(pán)文件的讀寫(xiě),如同用cin,cout和,對(duì)標(biāo)準(zhǔn)設(shè)備讀寫(xiě)一樣。C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流(2)用文件流的put,get,geiline等成員函數(shù)進(jìn)行字符的輸入輸出。例7-11 有一個(gè)整型數(shù)組,含10個(gè)元素,從鍵盤(pán)輸入10個(gè)整數(shù)給數(shù)組,將此數(shù)組送到磁盤(pán)文件中存放。#include using namespace std;int main()int a10; ofstream outfile(f1.dat); if(!outfile) cerropen

33、error!endl;C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流 exit(1); coutenter 10 integer numbers:endl; for(int i=0;iai; outfileai ; outfile.close(); return 0;C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流7.4.5 對(duì)二進(jìn)制文件的操作對(duì)二進(jìn)制文件的操作二進(jìn)制文件還是以ASCII代碼存放數(shù)據(jù)的,它將內(nèi)存中數(shù)據(jù)存儲(chǔ)形式不加轉(zhuǎn)換地傳送到磁盤(pán)文件,因此

34、它又稱為內(nèi)存數(shù)據(jù)的映像文件。因?yàn)槲募械男畔⒉皇亲址麛?shù)據(jù),而是字節(jié)中的二進(jìn)制形式的信息,因此它又稱為字節(jié)文件。C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流1.1.用成員函數(shù)用成員函數(shù)readread和和writewrite讀寫(xiě)二讀寫(xiě)二進(jìn)制文件進(jìn)制文件2.2.與文件指針有關(guān)的流成員函數(shù)與文件指針有關(guān)的流成員函數(shù)3.3.隨機(jī)訪問(wèn)二進(jìn)制數(shù)據(jù)文件隨機(jī)訪問(wèn)二進(jìn)制數(shù)據(jù)文件C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流1. 用成員函數(shù)read和write讀寫(xiě)二進(jìn)制

35、文件 對(duì)二進(jìn)制文件的讀寫(xiě)主要用istream類(lèi)的成員函數(shù)read和write來(lái)實(shí)現(xiàn)。這兩個(gè)成員函數(shù)的原型為 istream& read(char *buffer,int len); ostream& write(const char * buffer,int len); 字符指針buffer指向內(nèi)存中一段存儲(chǔ)空間。len是讀寫(xiě)的字節(jié)數(shù)。調(diào)用的方式為a. write(p1,50);b. read(p2,30);C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流2. 與文件指針有關(guān)的流成員函數(shù) 在磁盤(pán)文件中有一個(gè)文

36、件指針,用來(lái)指明當(dāng)前應(yīng)進(jìn)行讀寫(xiě)的位置。對(duì)于二進(jìn)制文件,允許對(duì)指針進(jìn)行控制,使它按用戶的意圖移動(dòng)到所需的位置,以便在該位置上進(jìn)行讀寫(xiě)。文件流提供一些有關(guān)文件指針的成員函數(shù)。表7.7。說(shuō)明: (1) 這些函數(shù)名的第一個(gè)字母或最后一個(gè)字母不是g就是p。(2) 函數(shù)參數(shù)中的“文件中的位置”和“位移量”已被指定為long型整數(shù),以字節(jié)為單位?!皡⒄瘴恢谩笨梢允窍旅嫒咧? C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流 ios:beg文件開(kāi)頭(beg是begin的縮寫(xiě)),這是默認(rèn)值。 ios:cur指針當(dāng)前的位置(cur是curr

37、ent的縮寫(xiě))。 ios:end文件末尾。它們是在ios類(lèi)中定義的枚舉常量。例如:infile.seekg(100);/輸入文件中的指針向前移到100字節(jié)位置infile.seekg(-50,ios:cur); /輸入文件中的指針從當(dāng)前位置后移50字節(jié)outfile.seekp(-75,ios:end); /輸出文件中的指針從文件尾后移50字節(jié)C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流3. 隨機(jī)訪問(wèn)二進(jìn)制數(shù)據(jù)文件 一般情況下讀寫(xiě)是順序進(jìn)行的,即逐個(gè)字節(jié)進(jìn)行讀寫(xiě)。但是對(duì)于二進(jìn)制數(shù)據(jù)文件來(lái)說(shuō),可以利用上面的成員函數(shù)移動(dòng)指針

38、,隨機(jī)地訪問(wèn)文件中任一位置上的數(shù)據(jù),還可以修改文件中的內(nèi)容。例7.16 有5個(gè)學(xué)生的數(shù)據(jù),要求: (1) 把它們存到磁盤(pán)文件中;(2) 將磁盤(pán)文件中的第1,3,5個(gè)學(xué)生數(shù)據(jù)讀入程序,并顯示出來(lái);(3) 將第3個(gè)學(xué)生的數(shù)據(jù)修改后存回磁盤(pán)文件中的原有位置。(4) 從磁盤(pán)文件讀入修改后的5個(gè)學(xué)生的數(shù)據(jù)并顯示出來(lái)。C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流需要解決3個(gè)問(wèn)題: (1) 由于同一磁盤(pán)文件在程序中需要頻繁地進(jìn)行輸入和輸出,因此可將文件的工作方式指定為輸入輸出文件,即ios:in|ios:out|ios:binary。

39、(2) 正確計(jì)算好每次訪問(wèn)時(shí)指針的定位,即正確使用seekg或seekp函數(shù)。(3) 正確進(jìn)行文件中數(shù)據(jù)的重寫(xiě)(更新)。程序: #include using namespace std;struct studentint num; char name20; float score;C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流int main( )student stud5=1001,Li,85,1002,Fun,97.5,1004,Wang,54,1006,Tan,76.5,1010,ling,96; fstream i

40、ofile(stud.dat,ios:in|ios:out|ios:binary); /用fstream類(lèi)定義輸入輸出二進(jìn)制文件流對(duì)象iofile if(!iofile) cerropen error!endl; abort( ); C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流for(int i=0;i5;i+)/向磁盤(pán)文件輸出5個(gè)學(xué)生的數(shù)據(jù) iofile.write(char *)&studi,sizeof(studi); student stud15; /用來(lái)存放從磁盤(pán)文件讀入的數(shù)據(jù) for(int i=0;

41、i5;i=i+2) iofile.seekg(i*sizeof(studi),ios:beg); /定位于第0,2,4學(xué)生數(shù)據(jù)開(kāi)頭 iofile.read(char *)&stud1i/2,sizeof(stud10); /讀入3個(gè)數(shù)據(jù),存放在stud10,stud1和stud2中 coutstud1i/2.num stud1i/2.name stud1i/2.scoreendl;/輸出stud10,stud1和stud2各成員的值 C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流stud2.num=1012; /修

42、改第3個(gè)學(xué)生(序號(hào)為2)的數(shù)據(jù) strcpy(,Wu); stud2.score=60; iofile.seekp(2*sizeof(stud0),ios:beg); /定位于第3個(gè)學(xué)生數(shù)據(jù)的開(kāi)頭 iofile.write(char *)&stud2,sizeof(stud2); /更新第3個(gè)學(xué)生數(shù)據(jù) iofile.seekg(0,ios:beg); /重新定位于文件開(kāi)頭 for(int i=0;i5;i+) iofile.read(char *)&studi,sizeof(studi); /讀入5個(gè)學(xué)生的數(shù)據(jù) coutstudi.num studi.nam

43、e studi.scoreendl; iofile.close( );return 0;C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流7.5 字符串流文件流是以外存文件為輸入輸出對(duì)象的數(shù)據(jù)流,字符串流不是以外存文件為輸入輸出的對(duì)象,而以內(nèi)存中用戶定義的字符數(shù)組(字符串)為輸入輸出的對(duì)象,即將數(shù)據(jù)輸出到內(nèi)存中的字符數(shù)組,或者從字符數(shù)組(字符串)將數(shù)據(jù)讀入。字符串流也稱為內(nèi)存流。C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流注意:C+是統(tǒng)一以流方式進(jìn)行I/

44、O的。 字符串流也有相應(yīng)的緩沖區(qū),開(kāi)始時(shí)流緩沖區(qū)是空的。如果向字符數(shù)組存入數(shù)據(jù),隨著向流插入數(shù)據(jù),流緩沖區(qū)中的數(shù)據(jù)不斷增加,待緩沖區(qū)滿了(或遇換行符),一起存入字符數(shù)組。如果是從字符數(shù)組讀數(shù)據(jù),先將字符數(shù)組中的數(shù)據(jù)送到流緩沖區(qū),然后從緩沖區(qū)中提取數(shù)據(jù)賦給有關(guān)變量。C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流在字符數(shù)組中可以存放字符,也可以存放整數(shù)、浮點(diǎn)數(shù)以及其他類(lèi)型的數(shù)據(jù)。在向字符數(shù)組存入數(shù)據(jù)之前,要先將數(shù)據(jù)從二進(jìn)制形式轉(zhuǎn)換為ASCII代碼,然后存放在緩沖區(qū),再?gòu)木彌_區(qū)送到字符數(shù)組。從字符數(shù)組讀數(shù)據(jù)時(shí),先將字符數(shù)組中的數(shù)

45、據(jù)送到緩沖區(qū),在賦給變量前要先將ASCII代碼轉(zhuǎn)換為二進(jìn)制形式??傊?,流緩沖區(qū)中的數(shù)據(jù)格式與字符數(shù)組相同。C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流 文件流類(lèi)有ifstream, ofstream和 fstream,與之類(lèi)似,字符串流有 istrstream ostrstream和 strstream,類(lèi)名前面幾個(gè)字母 str是 string的縮寫(xiě)。 它們都是 ostream,istream和 iostream類(lèi)的派生類(lèi),因此對(duì)它們的操作方法是基本相同的。向內(nèi)存中的一個(gè)字符組寫(xiě)數(shù)據(jù)就如同向文件寫(xiě)數(shù)據(jù)一樣.但有3點(diǎn)不同:

46、 C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流()輸出時(shí)數(shù)據(jù)不是流向外存文件,而是流向內(nèi)存中的一個(gè)存儲(chǔ)空間。 輸入時(shí)從內(nèi)存中的存儲(chǔ)空間讀取數(shù)據(jù)。在嚴(yán)格的意義上說(shuō),這不屬于輸入輸出,稱為讀寫(xiě)比較合適。但由于的字符串流采用了的流輸入輸出機(jī)制,因此往往也用輸入和輸出表述讀寫(xiě)操作。C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流()字符串流對(duì)象關(guān)聯(lián)的不是文件,而是內(nèi)存中的一個(gè)字符數(shù)組,因此不需要打開(kāi)和關(guān)閉文件。()每個(gè)文件的最后都有一個(gè)文件結(jié)束符,表示文件的結(jié)

47、束。而字符串流所關(guān)聯(lián)的字符數(shù)組中沒(méi)有相應(yīng)的結(jié)束標(biāo)志,用戶要自己指定一個(gè)特殊字符作為結(jié)束符,在向字符數(shù)組寫(xiě)入全部數(shù)據(jù)后要寫(xiě)入此字符-“0”。C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流字符串流類(lèi)沒(méi)有open成員函數(shù),因此要在建立字符串流對(duì)象時(shí)通過(guò)給定參數(shù)來(lái)確立字符串流與字符數(shù)組的關(guān)聯(lián)。即通過(guò)調(diào)用構(gòu)造函數(shù)來(lái)解決此問(wèn)題。建立字符串流對(duì)象的方法與含義如下:建立輸出字符串流對(duì)象ostrstream類(lèi)提供的構(gòu)造函數(shù)的原型為ostrstream:ostrstream(cahr * buffer, int n, int mode=ios

48、:out); buffer是指向字符數(shù)組首元素的指針; n 為指定的流緩沖區(qū)的大小(一般選與字符數(shù)組的大小相同,也可以不同),mode是可選的,默認(rèn)為ios:out方式. 建立輸出字符串流對(duì)象并與字符數(shù)組建立關(guān)聯(lián): ostrstream strout(ch1,20);C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流2建立輸入字符串流對(duì)象 istrstream類(lèi)提供了兩個(gè)帶參的構(gòu)造函數(shù),其原型為 istrstream:istrstream(char*buffer);istrstream:istrstream(char*buff

49、er, int n); buffer是指向字符數(shù)組首元素的指針,用它來(lái)初始化流對(duì)象(使流對(duì)象與字符數(shù)組建立關(guān)聯(lián))。可以用以下語(yǔ)句建立輸入字符串流對(duì)象: istrstream strin(ch2);C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流3建立輸入輸出字符串流對(duì)象strstream類(lèi)提供的構(gòu)造函數(shù)的原型為strstream:strstream(char* buffer, int n , int mode);以下語(yǔ)句用于建立輸入輸出字符串流對(duì)象:strstreamstrio(ch3,sizeof(ch3),ios:in|

50、ios:out); 以字符數(shù)組ch3為輸入輸出對(duì)象,流緩沖區(qū)大小與數(shù)組ch3相同。C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流例7.17 將一組數(shù)據(jù)保存在字符數(shù)組中。#include struct studentint num; char name20; float score;int main( ) student stud3 =1001,Li,78,1002,Wang,89.5,1004,Fun,90; char c50; /用戶定義的字符數(shù)組 ostrstream strout(c,30); /建立輸出字符串流,與

51、數(shù)組c建立關(guān)聯(lián),緩沖區(qū)長(zhǎng)30 for(int i=0;i3;i+) /向c寫(xiě)3個(gè)學(xué)生的數(shù)據(jù) studi.score; stroutends; /ends是C+的I/O操作符,插入一個(gè)0 coutarray c:cendl; /顯示字符數(shù)組c中的字符C+的輸入與的輸入與輸出輸出標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流文件操作與文文件操作與文件流件流字符串流字符串流輸出如下: array c:1001Li781002Wang89.51004Fun90可以看到: (1) 字符數(shù)組c中的數(shù)據(jù)全部是以ASCII代碼形式存放的字符,而不是以二進(jìn)制形式表示的數(shù)據(jù)。(2) 一般都把流緩沖區(qū)的大小指定與字符數(shù)組的大小相同。(3)字符數(shù)組c中的數(shù)據(jù)之間沒(méi)有空格,連成一片。如果以后想將這些數(shù)據(jù)讀回賦給程序中相應(yīng)的變量,就會(huì)出現(xiàn)問(wèn)題。為解

溫馨提示

  • 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)論