面向?qū)ο蟮某绦蛟O(shè)計:七、文件和流.ppt_第1頁
面向?qū)ο蟮某绦蛟O(shè)計:七、文件和流.ppt_第2頁
面向?qū)ο蟮某绦蛟O(shè)計:七、文件和流.ppt_第3頁
面向?qū)ο蟮某绦蛟O(shè)計:七、文件和流.ppt_第4頁
面向?qū)ο蟮某绦蛟O(shè)計:七、文件和流.ppt_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、面向?qū)ο蟮某绦蛟O(shè)計,第七章 文件和流,本章主要內(nèi)容,流庫 輸入流和輸出流 格式化輸入輸出 文件的輸入輸出,流 庫,C語言中的輸入輸出函數(shù)只能識別系統(tǒng)預(yù)定義的類型。 C+通過流庫來支持用戶自定義類型(結(jié)構(gòu)和類)的輸入輸出。 流是對從源到失的數(shù)據(jù)流的抽象,流與特定的設(shè)備相聯(lián)系。 流庫是用于輸入輸出的一組類。,流 庫,ios類及其派生類為用戶提供了使用流庫的接口。,輸入流和輸出流,系統(tǒng)預(yù)定義類型的輸入輸出可直接使用運算符“”和“”來實現(xiàn)。 輸出流 cout : 輸出流ostream類的一個預(yù)定義對象 與標(biāo)準(zhǔn)輸出設(shè)備(終端屏幕)相聯(lián)系 ostream中重載了運算符(輸出運算符) ostream /重載

2、形式:注意優(yōu)先級和結(jié)合順序,cout“string”;,注意:C編譯器將根據(jù)對象類型選用相應(yīng)版本的重載)運算符函數(shù),用戶不必關(guān)心。,輸入流 cini; cin.operator(i); 輸入運算符:跳過開始空白字符。 char ch; cinch; /輸入“ x”,讀入x,讀入一個字符串時,空格作為串的終止。 char buffer20; cinbuffer; /輸入“Jack Spart”,讀入“Jack”,若類型不符,返回零值,并終止程序。 int readints( ) int v10; for(int i=0; ivi) continue; return i; ,輸入:1 2 3 4

3、5. 6 7 8,用戶自定義類型的輸入輸出,通過重載運算符“”和“”來實現(xiàn)。 class Complex double rpart, ipart; public: friend ostream,第一個參數(shù)是流,第二個參數(shù)是要輸入輸出的對象,返回流的引用,#include class Complex double rpart, ipart; public: Complex(double r=0.0, double i=0.0) ipart=i; part=r; friend ostream,istream ,重載的實質(zhì):分別輸入/輸出自定義類型的每個分量(系統(tǒng)預(yù)定義類型)。,格式化輸入輸出,C+

4、提供了兩種格式控制方法: 使用ios類中定義的格式成員函數(shù) 通過對格式狀態(tài)標(biāo)志、字段寬度、填充字符和輸出精度的操作來實現(xiàn)。 控制符和控制函數(shù) 可以直接插入到輸入輸出語句中。,格式化輸入輸出 ios類中定義的格式成員函數(shù): class ios / public int width(int w); /設(shè)置字段寬度 int width( ) const; /返回設(shè)置字段的寬度 char fill(char); /設(shè)置填充字符 char fill( ) const; /返回設(shè)置的填充字符 long flags(long f); long flags( ) const; long setf(long s

5、etbits, long field); long setf(long); long unsetf(long); int precision(int); /設(shè)置浮點數(shù)精度 int precision( ) const; /返回設(shè)置的浮點數(shù)精度 / ;,格式函數(shù)的使用: 輸入流:char buffer20; cin.width(20); cinbuffer;,輸出流:cout.width(4); cout(12) ; cout.width(4); cout.fill(#); cout(12) ;,( 12),( #12),width( )作用于輸入輸出的數(shù)字或串,數(shù)據(jù)的長度超過width,忽略設(shè)

6、置,按數(shù)據(jù)實際長度顯示; cout.width(4); cout(121212) ; 每次輸出操作后,width被置為0; cout.width(4); cout.fill(#); cout(12“),(“ 12) ;,格式狀態(tài)標(biāo)志 ios中用枚舉記錄狀態(tài)標(biāo)志來控制I/O class ios public: enum skipws=0 x0001, /輸入操作忽略空白字符 left=0 x0002, right=0 x0004, internal=0 x0008, /值按右對齊,符號按左對齊 dec=0 x0010, oct =0 x0020, hex=0 x0040, showbase=0

7、x0080, showpoint=0 x0100, /float,double顯示小數(shù)和尾數(shù)后的零 uppercase=0 x0200, showpos=0 x0400, /在正整數(shù)前插入“+”號 scientific=0 x0800, /科學(xué)計數(shù)法,小數(shù)點前一位數(shù)字 / ; / ;,可用下列函數(shù)設(shè)置、讀取、取消標(biāo)志位; long flags( ) /返回當(dāng)前格式化標(biāo)志值 long flags(long f) /設(shè)置標(biāo)志值f,并返回上次標(biāo)志值 long setf(long f) /設(shè)置標(biāo)志位f,并返回當(dāng)前標(biāo)志值 long unsetf(long f) /取消在f中設(shè)置的標(biāo)志位,并返回當(dāng)前標(biāo)志值

8、,舉例: void your_function( ) long old_options=cout.flags(ios:left | ios:oct | ios:showpoint); / cout.flags(old_options); ,cout.flags(cout.flags( ) | ios:showbase);,相抵觸的標(biāo)志不能同時設(shè)置,如:ios:dec和ios:oct,控制符 函數(shù)控制不方便,寬度控制符,預(yù)定義的控制符合控制函數(shù)有: hex dec oct指定基數(shù),缺省是dec ws用于輸入流,略去空白字符 endl換行 ends插入一個NULL(0)字符,結(jié)束一個字符串 flu

9、sh強制將流從緩沖區(qū)寫入相應(yīng)設(shè)備 setfill(char f)設(shè)置填充字符,缺省是空格 setprecision(int p)設(shè)置浮點數(shù)精度,缺省為6 .,int x=1, y=2; coutsetw(5)xsetw(4)y;,文件和流 處理文件的類在fstream.h中定義。 文件輸入輸出:1、創(chuàng)建流對象 2、使用流的成員函數(shù)打開文件,輸出流對象my_file與文件hello.dat相聯(lián)系,#include #lnclude void main( ) ofstream my_file; my_file.open(“hello.dat”, ios:out); / ,打開文件 C+中有三種類型

10、的文件流類: 輸入文件類ifstream; 輸出文件類ofstream; 輸入 輸出文件類fstream。,打開文件: void open(const char* name, int mod, int access=filebuf:openprot); mod為下列一些方式: ios:app附加方式寫到流 ios:ate打開文件,并把文件指針移到文件尾 ios:in為讀打開 ios:out為寫打開 ios:trunc如文件存在,舍去文件內(nèi)容 ios:nocreate文件不存在,則失敗 ios:noreplace文件存在,則失敗 access指明文件屬性: 普通文件、只讀文件、隱藏文件、系統(tǒng)文件

11、。,#lnclude void main( ) ofstream my_file; my_file.open(“hello.dat”); my_file“Hello world”endl; my_file.close( ); ,按文本方式讀文件 直接使用輸入輸出運算符“”和“ void main( ) char string120, string220; ifstream my_file(“hello.dat”); my_filestring1; my_filestring2; coutstring1 string2endl; my_file.close( ); ,按二進(jìn)制方式讀/寫文件 讀寫

12、的數(shù)據(jù)無含義,不用,而是get( )和put( ) istream ,讀數(shù)據(jù): #include void main( ) char my_char; int i=0; ifstream my_in_file(“hello.dat”); while(my_in_file) my_in_file.get(my_char ); coutmy_char; my_in_file.close( ); ,使用read( ) 和write( )函數(shù) 一次讀寫多個字符,其原型: istream ,使用文件指針 讀指針用istream中的成員函數(shù)seekg( )來定位; 寫指針用ostream中的成員函數(shù)seekp( )來定位。 其原型: istream seek_dir的三種取值: ios:beg /從文件頭算起 ios:end /從文件尾算起 ios:cur /從文件指針的當(dāng)前位置算起,讀寫指針在文件中位置,指出指針相對于何處,void main( ) ofstream my_file2(“file.dat”); strcpy(my_, “wang”

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論