西安石油大學(xué)大二(上)C++面向?qū)ο蟪绦蛟O(shè)計(jì)課件chapter9課件_第1頁(yè)
西安石油大學(xué)大二(上)C++面向?qū)ο蟪绦蛟O(shè)計(jì)課件chapter9課件_第2頁(yè)
西安石油大學(xué)大二(上)C++面向?qū)ο蟪绦蛟O(shè)計(jì)課件chapter9課件_第3頁(yè)
西安石油大學(xué)大二(上)C++面向?qū)ο蟪绦蛟O(shè)計(jì)課件chapter9課件_第4頁(yè)
西安石油大學(xué)大二(上)C++面向?qū)ο蟪绦蛟O(shè)計(jì)課件chapter9課件_第5頁(yè)
已閱讀5頁(yè),還剩78頁(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)介

第9章I/O流類庫(kù)1主要內(nèi)容基本概念C++的基本流類結(jié)構(gòu)istream類和ostream類格式控制文件的讀/寫(xiě)可流類29.1基本概念設(shè)備間的數(shù)據(jù)傳送內(nèi)存顯示屏內(nèi)存文件鍵盤(pán)內(nèi)存文件內(nèi)存鍵盤(pán)文件輸出輸入39.1基本概念流面向?qū)ο蠹夹g(shù)中,任何設(shè)備都可以表示為相應(yīng)類的對(duì)象,設(shè)備之間的數(shù)據(jù)傳送即對(duì)象之間的數(shù)據(jù)傳送。數(shù)據(jù)從源對(duì)象到目的對(duì)象的傳送可以抽象看做一個(gè)“流”。輸入流:表示數(shù)據(jù)從某個(gè)設(shè)備傳送到內(nèi)存變量中。輸出流:表示數(shù)據(jù)從內(nèi)存變量傳送到某個(gè)設(shè)備中。49.1基本概念流類把實(shí)現(xiàn)設(shè)備之間信息交換的類稱作流類。根據(jù)一個(gè)流類定義的對(duì)象也時(shí)常被稱為流。

C++預(yù)定義流標(biāo)準(zhǔn)輸入流cin(缺省為鍵盤(pán))標(biāo)準(zhǔn)輸出流cout(顯示終端)非緩沖型的標(biāo)準(zhǔn)出錯(cuò)流cerr(顯示終端)緩沖型的標(biāo)準(zhǔn)出錯(cuò)流clog(顯示終端)59.1基本概念流庫(kù)若干流類的集合稱做流類庫(kù)。C++流類庫(kù)是用繼承方法建立起來(lái)的一個(gè)輸入/輸出類庫(kù),它具有兩個(gè)平行的基類,即streambuf類和ios類,所有其它的流類都是從它們直接或間接地派生出來(lái)的。69.2C++的基本流庫(kù)結(jié)構(gòu)C++為何建立自己的輸入輸出系統(tǒng)C語(yǔ)言的輸入/輸出庫(kù)函數(shù)不支持用戶自定義的數(shù)據(jù)類型(如結(jié)構(gòu)、類),用戶也不能通過(guò)重載這些庫(kù)函數(shù)來(lái)實(shí)現(xiàn)用戶自定義數(shù)據(jù)類型的輸入/輸出。structmy_struct{inti;floatf;char*str;}s;printf(“%my_struct”,s);//error79.2C++的基本流庫(kù)結(jié)構(gòu)C++流庫(kù)結(jié)構(gòu)C++流庫(kù)主要由兩個(gè)流類層次組成以streambuf類為父類的類層次主要完成信息通過(guò)緩沖區(qū)的交換。以ios類為父類的類層次在streambuf類實(shí)現(xiàn)功能的基礎(chǔ)上,增加了各種格式化的輸入/輸出控制方法。89.2C++的基本流庫(kù)結(jié)構(gòu)C++流庫(kù)結(jié)構(gòu)streambuf類層次結(jié)構(gòu)streambufstrstreambufstdiobuffilebufstreambuf類層次結(jié)構(gòu)99.2C++的基本流庫(kù)結(jié)構(gòu)C++流庫(kù)結(jié)構(gòu)streambuf類層次結(jié)構(gòu)streambuf類為所有的streambuf類層次對(duì)象設(shè)置了一個(gè)固定的內(nèi)存緩沖區(qū),動(dòng)態(tài)劃分為兩部分:用做輸入的取區(qū),用取指針指示當(dāng)前取字符位置。用做輸出的存區(qū),用存指針指示當(dāng)前存字符位置。109.2C++的基本流庫(kù)結(jié)構(gòu)C++流庫(kù)結(jié)構(gòu)streambuf類層次結(jié)構(gòu)filebuf類它是在fstream.h中定義的streambuf類的一個(gè)派生類,它使用文件來(lái)保存緩沖區(qū)中的字符序列。當(dāng)寫(xiě)文件時(shí),是將緩沖區(qū)的字符寫(xiě)到指定的文件中,之后刷新緩沖區(qū);當(dāng)讀文件時(shí),是將指定文件中的內(nèi)容讀到緩沖區(qū)中來(lái)。119.2C++的基本流庫(kù)結(jié)構(gòu)C++流庫(kù)結(jié)構(gòu)streambuf類層次結(jié)構(gòu)strstreambuf類擴(kuò)展了streambuf類的功能,增加了動(dòng)態(tài)內(nèi)存管理功能,提供了在內(nèi)存中進(jìn)行提取和插入操作的緩沖區(qū)管理。stdiobuf類主要用作C++語(yǔ)言的流類層次方法和C語(yǔ)言的標(biāo)準(zhǔn)輸入/輸出方法混合使用時(shí)系統(tǒng)的緩沖區(qū)管理。129.2C++的基本流庫(kù)結(jié)構(gòu)C++流庫(kù)結(jié)構(gòu)ios類層次結(jié)構(gòu)iosistreamostreamiostreamistrstreamistream_withassignifstreamostrstreamostream_withassignofstreamstrstreamstdiostreamfstreamios類層次結(jié)構(gòu)139.2C++的基本流庫(kù)結(jié)構(gòu)C++流庫(kù)結(jié)構(gòu)ios類層次結(jié)構(gòu)ios類及其派生類是在streambuf類實(shí)現(xiàn)的通過(guò)緩沖區(qū)信息交換的基礎(chǔ)上,進(jìn)一步增加了各種格式化的輸入/輸出控制方法。ios類的成員變量中包括一個(gè)streambuf類類型的指針成員變量,通過(guò)該指針,ios類中的成員函數(shù)可以調(diào)用streambuf類中的公有成員函數(shù)。學(xué)習(xí)中要注意的是,ios類通過(guò)指針類型的成員變量,調(diào)用streambuf類中公有成員函數(shù)的方法,是2.4.1節(jié)討論的對(duì)象模式中的消息模式的典型應(yīng)用例子。149.2C++的基本流庫(kù)結(jié)構(gòu)C++流庫(kù)結(jié)構(gòu)ios類層次結(jié)構(gòu)ios設(shè)計(jì)成虛基類。主要完成流的狀態(tài)設(shè)置、狀態(tài)報(bào)告、顯示精度、域?qū)?、填充字符的設(shè)置,文件流的操作模式定義等。ios類的定義在include目錄下的文件ios.h中:15classios{protected:streambuf*bp;longx_flags;intx_precision;charx_fill;intx_width;public:inlinelongflags()const;inlinelongflags(long_l);inlinelongsetf(long_l);inlinelongunsetf(long_l);16inlineintwidth()const;inlineintwidth(int_i);inlinecharfill()const;inlinecharfill(char_c);inlineintprecision(int_i);inlineintprecision()const;…};17C++流庫(kù)結(jié)構(gòu)ios類層次結(jié)構(gòu)istream類和ostream類對(duì)運(yùn)算符>>和<<進(jìn)行重載。iostream類以istream類和ostream類為基類,多重繼承派生??赏瑫r(shí)進(jìn)行輸入輸出操作。9.2C++的基本流庫(kù)結(jié)構(gòu)189.3istream類和ostream類istream類在流庫(kù)中提供主要的輸入操作,默認(rèn)對(duì)象是cinistream類是在include目錄下的文件istream.h中,istream類中定義的運(yùn)算符和成員函數(shù)包括輸入運(yùn)算符>>、get函數(shù)、getline函數(shù)、read函數(shù)等。istream類的定義:19classistream:virtualpublicios{public: istream(streambuf*); istream&operator>>(char*); istream&operator>>(int&); inlineistream&operator>>(unsignedchar*); intget(); istream&get(signedchar*,int,char=‘\n’); istream&get(streambuf&,char=‘\n’); istream&get(unsignedchar&); istream&getline(signedchar*,int,char=‘\n’);

intpeek(); //表示不輸入并返回下一個(gè)字符

intgcount(); //用來(lái)返回上次輸入的字符數(shù)

istream&read(signedchar*,int); …};209.3istream類和ostream類istream類>>叫做輸入運(yùn)算符,將數(shù)據(jù)從左邊的流中讀出。

inti;

cin>>i; //cin.operator>>(i);重載的輸入運(yùn)算符“>>”均返回流類istream的引用,因此輸入運(yùn)算符可連用。例如:intx;chary;cin>>x>>y;219.3istream類和ostream類istream類intget();跳過(guò)輸入流中1個(gè)字符。istream&get(unsignedchar&); 從輸入流中提出一個(gè)字符。istream&getline(signedchar*,int,char=‘\n’);從輸入流中提取指定個(gè)數(shù)(遇到回車換行符時(shí)計(jì)數(shù)結(jié)束)字符到字符數(shù)組中。229.3istream類和ostream類istream類例9.1設(shè)計(jì)一個(gè)從鍵盤(pán)輸入中提取若干個(gè)字符或字符串的例子。#include<iostream.h>voidmain(void){intlength=6;chara,b[6],c[6];cin.get(a);cin.get(); cin.getline(b,length);cin.get();cin.getline(c,length);cout<<a<<“”<<b<<“”<<c<<endl;}239.3istream類和ostream類ostream類ostream類在流庫(kù)中提供主要的輸出操作,默認(rèn)對(duì)象是cout。ostream類是在include目錄下的文件ostream.h中,ostream類中定義的運(yùn)算符和成員函數(shù)包括輸出運(yùn)算符<<、put函數(shù)、write函數(shù)等。ostream類定義:249.3istream類和ostream類classostream:virtualpublicios{public:ostream(streambuf*);ostream&operator<<(constchar*);ostream&operator<<(int);inlineostream&put(char);ostream&write(constchar*,int);//…};259.3istream類和ostream類ostream類<<叫做輸出運(yùn)算符,將運(yùn)算符右邊的數(shù)據(jù)存儲(chǔ)到左邊的流中。

cout<<“string”;//cout.operator<<(“string”);269.3istream類和ostream類

ostream類所有重載的輸出運(yùn)算符均返回ostream的引用,利用該引用可繼續(xù)調(diào)用下一個(gè)輸出運(yùn)算符函數(shù),因而在一條語(yǔ)句中可以顯示多個(gè)數(shù)據(jù),如:

intx;cout<<“x=“<<x;系統(tǒng)執(zhí)行如下:輸出運(yùn)算符按自左至右的順序cout.operator<<(“x=“).operator<<(x)279.3istream類和ostream類

ostream類ostream&put(char);把一個(gè)字符插入到輸出流中。ostream&write(constchar*,int);從字符數(shù)組中提取若干個(gè)字符插入到輸出流中。289.3istream類和ostream類

ostream類例9.2設(shè)計(jì)一個(gè)包含幾種典型情況的屏幕輸出的例子。#include<iostream.h>voidmain(void){charch1[]=“i=“,ch2=“x=“;inti=100;floatx=11.11cout<<ch1<<i<<endl;cout<<ch2<<x<<endl;charch3[]=“abcdefg”cout.write(ch3,5);}299.4格式控制C++語(yǔ)言提供了兩種格式控制方法利用ios類中的格式控制成員函數(shù)利用操作符309.4格式控制格式控制成員函數(shù)狀態(tài)設(shè)置和狀態(tài)報(bào)告ios類中定義的long類型的保護(hù)數(shù)據(jù)成員x_flags用于存入控制輸入輸出格式的狀態(tài)標(biāo)志。狀態(tài)標(biāo)志位共15個(gè),各占一個(gè)二進(jìn)制位,稱為格式狀態(tài)位。若設(shè)置了某個(gè)狀態(tài)標(biāo)志位,則x_flags中的某一位為“1”,否則為“0”。例如:若在狀態(tài)標(biāo)志中設(shè)定了skipws和dec,其它均未設(shè)定,則x_flags的值應(yīng)為0000000000010001,即為十六進(jìn)制的0x0011。這些狀態(tài)值之間是或的關(guān)系,可用“||”連接要設(shè)置的狀態(tài)標(biāo)志位。319.4格式控制格式控制成員函數(shù)狀態(tài)設(shè)置和狀態(tài)報(bào)告設(shè)置狀態(tài)標(biāo)志longios::setf(longflags){

x_flags=x_flags|flags; returnx_flag;}

功能:把指定位的狀態(tài)標(biāo)志設(shè)置為1。調(diào)用:cout<<setf(ios::hex||ios::scientific);329.4格式控制格式控制成員函數(shù)狀態(tài)設(shè)置和狀態(tài)報(bào)告清除狀態(tài)標(biāo)志longios::unsetf(longflags){

x_flags=(x_flags)&(~flags); returnx_flags;}功能:把指定位的狀態(tài)標(biāo)志設(shè)置為0。339.4格式控制格式控制成員函數(shù)狀態(tài)設(shè)置和狀態(tài)報(bào)告取狀態(tài)標(biāo)志longios::flags()const{ returnx_flags;}功能:返回當(dāng)前流的狀態(tài)標(biāo)志位數(shù)值。longios::flags(longflags){ longx=x_flags;

x_flags=flag; returnx;}功能:設(shè)置指定位的狀態(tài)標(biāo)志,并返回設(shè)置前的狀態(tài)標(biāo)志位數(shù)值。349.4格式控制格式控制成員函數(shù)精度設(shè)置C語(yǔ)言中采用%m.nf格式,n表示輸出精度。C++語(yǔ)言在ios類中用x_precision來(lái)存放浮點(diǎn)數(shù)的輸出顯示精度,表示整個(gè)數(shù)據(jù)的位數(shù)。int

ios::precision()

{ returnx_precision;}功能:返回當(dāng)前的顯示精度。359.4格式控制格式控制成員函數(shù)精度設(shè)置int

ios::precision(intn)

{

intx=x_precison;

x_precison=n; returnx;}功能:設(shè)置顯示精度為n位,并返回設(shè)置前的顯示精度。369.4格式控制格式控制成員函數(shù)域?qū)捲O(shè)置在ios類中用x_width存放域?qū)捴?。int

ios::width(){returnx_width;}功能:返回當(dāng)前的域?qū)捴怠?79.4格式控制格式控制成員函數(shù)域?qū)捲O(shè)置int

ios::width(intn){

inti=x_width;

x_width=n; returni;}功能:設(shè)置域?qū)挒閚位。389.4格式控制格式控制成員函數(shù)填充字符設(shè)置在ios類中用x_fill來(lái)存放填充字符,填充字符的作用是當(dāng)輸出值不滿域?qū)挄r(shí)用填充字符來(lái)填充。缺省情況下填充字符為空格。與width()函數(shù)配合使用。399.4格式控制格式控制成員函數(shù)填充字符設(shè)置charios::fill(){returnx_fill;}功能:返回當(dāng)前的填充字符值charios::fill(charc){charx=x_fill;

x_fill=c;returnx;} 功能:設(shè)置填充字符為c。40例子:#include<iostream.h>voidmain(){intcount=432,state=1234;floatx=555.55,y=666.66;cout.fill('#');cout<<"x=";cout.width(8);cout<<x<<endl;cout.setf(ios::dec);cout<<"count="<<count<<endl;cout.setf(ios::hex);cout<<"state="<<state<<endl;cout.precision(4);cout<<"x="<<x<<endl;cout.setf(ios::scientific);cout<<"y="<<y<<endl; }x=##555.55count=432state=4d2x=555.5y=6.6666e+002419.4格式控制操作符使用ios類的成員函數(shù)來(lái)控制輸入/輸出格式時(shí),必須綴上使用它的流對(duì)象(見(jiàn)例9.2),而且不能將它們直接嵌入到輸入/輸出語(yǔ)句中。操作符是一個(gè)函數(shù),它以一個(gè)流引用作為參數(shù),并返回同一流的引用。操作符可以嵌入到輸入/輸出操作的鏈中。例如,hex操作符的函數(shù)體定義:ios&hex(ios&o){o.setf(ios::hex);returno;}429.4格式控制操作符無(wú)參數(shù)操作符(表9.1)操作符功能dec選擇I/O十進(jìn)制格式化標(biāo)志endl插入換行符并刷新輸出緩沖流ends插入空字符flush刷新輸出緩沖流hex選擇I/O十六進(jìn)制格式化標(biāo)志oct選擇I/O八進(jìn)制格式化標(biāo)志ws從輸入流中提取空字符439.4格式控制操作符無(wú)參數(shù)操作符(表9.1)例9.4voidmain(void){intcount=432;intstate=1234;floatx=555.55;cout<<“count=“<<dec<<count<<endl;cout<<“state=“<<hex<<state<<endl;cout.setf(ios::scientific);cout<<“x=“<<x<<endl;}449.4格式控制操作符有參數(shù)操作符(表9.2)操作符功能resetionflat(longn)清除n指定的格式化標(biāo)志setbase(intn)設(shè)置以n表示的整型基數(shù)setfill(intc)設(shè)置以c表示的填充字符setionflags(longn)設(shè)置以n表示的格式化標(biāo)志setprecision(intn)設(shè)置以n表示的數(shù)值精度setw(intn)設(shè)置以n表示的I/O域?qū)?59.4格式控制操作符有參數(shù)操作符voidmain(void){constdoublePI=3.141592653589793;cout<<“PI=“<<setprecision(10)<<PI<<endl;intk;cin>>oct>>k;cout<<“k=“<<hex<<k<<endl;floatd=324.567;cout<<“d=“<<setw(10)<<setprecision(5)<<setfill(‘*’)<<dec<<d<<endl;}469.5文件的讀/寫(xiě)基本概念C++把文件看作字符序列,即所謂流式文件。根據(jù)數(shù)據(jù)的組織形式,文件可分為文本文件和二進(jìn)制文件。文本文件又稱ASCII文件,它的每個(gè)字節(jié)存放一個(gè)ASCII代碼,代表一個(gè)字符。這樣便于對(duì)字符進(jìn)行處理,也便于輸出,但占用存儲(chǔ)空間較多479.5文件的讀/寫(xiě)基本概念二進(jìn)制文件是把內(nèi)存中的數(shù)據(jù),按其在內(nèi)存中的存儲(chǔ)形式原樣寫(xiě)到磁盤(pán)上。用二進(jìn)制形式輸出數(shù)據(jù),可節(jié)省存儲(chǔ)空間和轉(zhuǎn)換時(shí)間,但一個(gè)字節(jié)并不對(duì)應(yīng)一個(gè)字符。489.5文件的讀/寫(xiě)基本概念文件流是文件與內(nèi)存等設(shè)備之間的信息交換過(guò)程。按操作方法,文件可分為輸入文件和輸出文件。輸入文件:文件流從文件到內(nèi)存(文件流的讀)輸出文件:文件流從內(nèi)存到文件(文件流的寫(xiě))文件流的讀打開(kāi)的文件其它設(shè)備(變量)文件流的寫(xiě)499.5文件的讀/寫(xiě)基本概念C++中文件輸入/輸出的基本過(guò)程在程序中要包含頭文件fstream.h。創(chuàng)建一個(gè)流。將這個(gè)流與文件相關(guān)聯(lián),即打開(kāi)文件。進(jìn)行文件的讀寫(xiě)操作。關(guān)閉文件。509.5文件的讀/寫(xiě)文件的打開(kāi)和關(guān)閉文件的打開(kāi)在C++中,打開(kāi)一個(gè)文件,就是將這個(gè)文件與一個(gè)流建立關(guān)聯(lián)。C++中的文件流類(fstream.h)輸入文件流類:ifstream輸出文件流類:ofstream輸入/輸出文件流類:fstream各有4個(gè)重載的構(gòu)造函數(shù)。519.5文件的讀/寫(xiě)文件的打開(kāi)和關(guān)閉打開(kāi)文件的兩種方式用構(gòu)造函數(shù)方法打開(kāi)文件——方法1ifstream(constchar*,int=ios::in,int=filebuf::openprot);ofstream(constchar*,int=ios::out,int=filebuf::openprot);fstream(constchar*,int,int=filebuf::openprot);參數(shù)含義:字符串形式的文件名、文件流的操作模式、打開(kāi)文件的共享/保護(hù)模式。529.5文件的讀/寫(xiě)文件的打開(kāi)和關(guān)閉打開(kāi)文件的兩種方式定義文件流類的對(duì)象,建立外存介質(zhì)上的文件和內(nèi)存的交換通道,并指定數(shù)據(jù)交換的方向。例如:ifstreamifs(“Data1.dat”);ofstreamofs(“Data2.dat”);fstreamiofs(“Data3.data”,ios::in|ios::out);539.5文件的讀/寫(xiě)文件的打開(kāi)和關(guān)閉打開(kāi)文件的兩種方式用打開(kāi)成員函數(shù)打開(kāi)文件——方法2voidifstream::open(constchar*,int=ios::in,

int=filebuf::openprot);voidofstream::open(constchar*,int=ios::out,

int=filebuf::openprot);voidfstream::open(constchar*,int,

int=filebuf::openprot);549.5文件的讀/寫(xiě)例如:ifstreamifs;ofstreamofs;fstreamiofs;ifs.open(“Data1.dat”);ofs.open(“Data2.dat”);iofs.open(“Data3.dat”,ios::in|ios::out);打開(kāi)當(dāng)前工作目錄下的指定的文件;如果當(dāng)前工作目錄下不存在指定文件,則在當(dāng)前工作目錄下創(chuàng)建一個(gè)新的指定文件??芍付ㄎ募夸?,如:ifstreamifs(“e:\mytest\Data1.dat”);559.5文件的讀/寫(xiě)文件的打開(kāi)和關(guān)閉文件的關(guān)閉關(guān)閉文件即是使打開(kāi)的文件與流“脫鉤”。使用流類的成員函數(shù)close()完成,它不帶參數(shù),無(wú)返回值。例如:ifs.close();將關(guān)閉與流ifs相連接的文件。569.5文件的讀/寫(xiě)文件的打開(kāi)和關(guān)閉關(guān)閉文件的作用把要寫(xiě)入文件的數(shù)據(jù)從緩沖區(qū)中完全寫(xiě)回磁盤(pán)。(內(nèi)存和文件的數(shù)據(jù)交換是通過(guò)緩沖區(qū)完成的。)保證文件安全。579.5文件的讀/寫(xiě)文件的打開(kāi)和關(guān)閉文件的操作模式ios類中定義的文件操作模式共8種,每種占一個(gè)二進(jìn)制。Emum

open_mod{in=0x01,out=0x02,….};允許同時(shí)有一個(gè)以上的操作模式位為1。文件打開(kāi)的默認(rèn)方式為文本方式。589.5文件的讀/寫(xiě)文本文件的讀/寫(xiě)基本概念文件打開(kāi)的默認(rèn)方式是文本格式(text)。本文件支持文件的順序訪問(wèn),即從文件的起始到文件的結(jié)束順序地訪問(wèn)(即存?。┪募械臄?shù)據(jù)。599.5文件的讀/寫(xiě)文本文件的讀/寫(xiě)文本文件的讀文件打開(kāi)的缺省方式是以文本格式打開(kāi),在輸入時(shí)回車和換行兩個(gè)字符要轉(zhuǎn)換為字符‘\n’;在輸出時(shí),字符‘\n’轉(zhuǎn)換為回車和換行兩個(gè)字符。文件流的讀對(duì)應(yīng)內(nèi)存變量的輸入,即產(chǎn)生一個(gè)輸入流。ifstream類的對(duì)象可以使用ios類中定義的輸入運(yùn)算符“>>”以及get()、getline()成員函數(shù)向內(nèi)存變量“輸入”信息。609.5文件的讀/寫(xiě)文本文件的讀/寫(xiě)文本文件的讀例9.6把當(dāng)前工作目錄下的Data1.dat文件中的字符數(shù)據(jù)顯示在屏幕上。用get()成員函數(shù)輸入#include<fstream.h>#include<stdlib.h>voidmain(){ifstreamifs(“data1.txt");if(!ifs){cerr<<"錯(cuò)誤:無(wú)法打開(kāi)文件"<<endl;return;}

619.5文件的讀/寫(xiě)

charc;intn=0;while(ifs.get(c)){cout.put(c);n++;}cout<<endl<<"字符個(gè)數(shù):"<<n<<endl;ifs.close();}注意:‘\n’轉(zhuǎn)換與回車和換行字符之間的轉(zhuǎn)換。629.5文件的讀/寫(xiě)用getline()成員函數(shù)輸入charbuffer[20];intn=0;while(!ifs.eof()){ifs.getline(buffer,sizeof(buffer));cout<<buffer<<endl;n++;}cout<<endl<<"行數(shù):"<<n<<endl;639.5文件的讀/寫(xiě)用輸入操作符“>>”把文件流中的數(shù)據(jù)輸入到內(nèi)存變量說(shuō)明:輸入操作符“>>”將略去回車換行符。charc;intn=12;while(n){ifs>>c;cout<<c<<endl;n--;}文件內(nèi)容:HowareyouThankyou程序運(yùn)行結(jié)果:HowareyouTha649.5文件的讀/寫(xiě)文本文件的讀/寫(xiě)文本文件的寫(xiě)文件流的寫(xiě)對(duì)應(yīng)內(nèi)存變量的輸出,即產(chǎn)生一個(gè)輸出流。

ofstream類的對(duì)象可以使用ostream類中定義的輸出操作符“<<”,以及put()、wirte()成員函數(shù)“輸出”信息。例9.7把內(nèi)存變量中的字符數(shù)據(jù)輸出到當(dāng)前目錄下的文件Data2.dat中。659.5文件的讀/寫(xiě)用put()成員函數(shù)輸出voidmain(){ofstreamofs("data2.txt");if(!ofs){cerr<<"錯(cuò)誤:無(wú)法打開(kāi)文件"<<endl;return;}

charstr[]="Howareyou\nThankyou";intlen=strlen(str);for(inti=0;i<len;i++)ofs.put(str[i]);}669.5文件的讀/寫(xiě)用write()成員函數(shù)輸出用輸出操作符“<<”輸出charstr1[]="Howareyou\n";charstr2[]="Thankyou\n";ofs.write(str1,strlen(str1));ofs.write(str2,strlen(str2));charstr1[]="Howareyou\n";charstr2[]="Thankyou\n";ofs<<str1;ofs<<str2;679.5文件的讀/寫(xiě)二進(jìn)制文件的讀/寫(xiě)基本概念二進(jìn)制文件不僅支持順序訪問(wèn),還支持隨機(jī)訪問(wèn)。文本文件的讀/寫(xiě)要進(jìn)行字符‘\n’與回車和換行符之間的轉(zhuǎn)換,而在二進(jìn)制方式下,不進(jìn)行這樣的轉(zhuǎn)換。在創(chuàng)建二進(jìn)制文件流類的文件對(duì)象時(shí),用邏輯或的方法加上操作模式ios::binary,即表示采用二進(jìn)制格式進(jìn)行文件流的讀/寫(xiě)。689.5文件的讀/寫(xiě)二進(jìn)制文件的讀/寫(xiě)//讀文件ifstreamifs("data3.dat",ios::binary);//…ifs>>d;ifs>>c;ifs>>r;cout<<"d="<<d<<endl;cout<<"r="<<r<<endl;ifs.close();699.5文件的讀/寫(xiě)二進(jìn)制文件的讀/寫(xiě)//寫(xiě)文件ofstreamofs("data3.dat",ios::binary);//…判斷打開(kāi)成功與否intd=44,r=99;charc=',';ofs<<d;ofs<<c;ofs<<r;ofs.close();709.5文件的讀/寫(xiě)二進(jìn)制文件的讀/寫(xiě)二進(jìn)制文件支持隨機(jī)訪問(wèn),使用read()和write()成員函數(shù)讀/寫(xiě)文件。istream&istream::read(char*,int);ostream&ostream:write(constchar*,int);例9.8719.5文件的讀/寫(xiě)隨機(jī)訪問(wèn)文件文件指針指示文件流的當(dāng)前位置。讀指針寫(xiě)指針729.5文件的讀/寫(xiě)

隨機(jī)訪問(wèn)文件文件指針的定位操作讀指針的成員函數(shù):istream&seekg(<偏移量>,<參照位置>);操作寫(xiě)指針的成員函數(shù):ostream&seekp(<偏移量>,<參照位置>);偏移量:文件指針相對(duì)于參照位置偏移的字節(jié)量。參照位置:ios::beg

ios

溫馨提示

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