大一下學(xué)期課件_第1頁
大一下學(xué)期課件_第2頁
大一下學(xué)期課件_第3頁
大一下學(xué)期課件_第4頁
大一下學(xué)期課件_第5頁
已閱讀5頁,還剩62頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目錄第1章第2章第3章第4章第5章第6章第7章第8章第9章C+概述數(shù)據(jù)類型、運算符和表達(dá)式簡單的輸入/輸出C+的流程函數(shù)編譯預(yù)處理數(shù)組FFFFFFFFFv 第一部分面向過程的程序設(shè)計結(jié)構(gòu)體、指針和和枚舉類型第10章第11章第12章第13章第14章第15章類和對象類和對象的其他特性繼承和派生多態(tài)性輸入/輸出流模板FFFFFFv 第二部分面向?qū)ο蟮某绦蛟O(shè)計第14章輸入/輸出流類庫14.114.214.314.414.514.614.714.8輸入輸出基本概念輸入輸出流類體系輸入輸出格式使用成員函數(shù)實現(xiàn)輸入輸出重載和提取運算符文件流類文件的隨機(jī)輸入輸出流的出錯處理14.1 輸入輸出基本概念14.1.

2、1 輸入輸出流(Stream)流數(shù)據(jù)在程序和設(shè)備之間“”輸出流輸入流數(shù)據(jù)數(shù)據(jù)14.1.2 文本流、二進(jìn)制流和數(shù)據(jù)文件文本流 - 一串ASCII 字符。二進(jìn)制流按二進(jìn)制格式存放的數(shù)據(jù)(內(nèi)存映象)。邏輯設(shè)備內(nèi)部程序邏輯設(shè)備區(qū)別:數(shù)值 12345 在 文本流中和二進(jìn)制流中的形式:ASCII 形式:(文本流 , 字符串)在內(nèi)存中int 型數(shù)據(jù)的形式:在“流”中的數(shù)據(jù)是以字節(jié)在二進(jìn)制流中的形式:為的。0011000100110010001100110011010000110101'1''2''3''4''5'00000000

3、00000000001100000011100100000000000000000011000000111001整數(shù) 12345若存于文本文件中,占 5 個字節(jié),即存放 5 個ASCII 字符(看成字符串)若存于二進(jìn)制文件中,占 4 個字節(jié),內(nèi)存映象因為一個整數(shù)在內(nèi)存中占 4 個字節(jié)數(shù)據(jù)文件用于存放信息:存放ASCII字符的文件稱為文本文件。存放二進(jìn)制數(shù)據(jù)的文件稱為二進(jìn)制文件。一個邏輯設(shè)備對應(yīng)一個文件,“文件”指:(1) 磁盤文件(2) 設(shè)備文件(如鍵盤、顯示器、打印機(jī)等)14.1.3 緩沖輸入流輸出流數(shù)據(jù)數(shù)據(jù)引入緩沖的目的是解決CPU的運行速度和外設(shè)操作速度不匹配的。如輸出時先寫入緩沖區(qū),再

4、成批輸出。成批寫出數(shù)據(jù)比一個一個寫出數(shù)據(jù)節(jié)約時間。一般地,緩沖區(qū)在內(nèi)存中。內(nèi)存緩沖區(qū)內(nèi)存緩沖區(qū)邏輯設(shè)備邏輯設(shè)備內(nèi)部程序14.2 輸入輸出流類體系14.2.1 基本輸入輸出流類流基類抽象緩沖區(qū)基類(輸入輸出)C+預(yù)定義了流類,用于完成數(shù)據(jù)的“ios通用輸入流基類在這些已定義的類中,類給出了若干方法(成員函數(shù)),輸入輸出。流類基類cout、cerr、clog所屬的輸出流類cin所屬的輸入流類ostream_withassignistream_withassignstreambuf用于i使用上述流類,必須包含頭文件 “ iostream.h”14.2.2用運算符重載實現(xiàn)標(biāo)準(zhǔn)設(shè)備的輸入輸出觀察頭文件i

5、stream.h :class istream : virtual public ios public:istream& operator>>(char *);/A 字符串輸入重載函數(shù)/B 字符輸入重載函數(shù)/C 整數(shù)輸入重載函數(shù)istream& operator>>(char &);istream& operator>>(int &);istream& operator>>(double &); /D 實型數(shù)據(jù)輸入重載函數(shù);class istream_withassign : public

6、istream;extern istream_withassign cin;cin 是 istream_withassign 類對象,繼承了重載運算符>>。編譯器會將 cin>>x>>y;解釋成 (cin.operator>>(x) .operator>>(y);返回 cin同理:C+還定義了三個輸出流對象 cout、cerr 和 clog。這三個對象均是ostream_withassign類的對象,它們均在頭文件ostream.h中被定義 cin標(biāo)準(zhǔn)輸入流(輸入設(shè)備是鍵盤) cout 標(biāo)準(zhǔn)輸出流(輸出設(shè)備是顯示器) cerr 標(biāo)準(zhǔn)錯

7、誤輸出流,沒有緩沖,立刻輸出。 clog 輸出日志信息,有緩沖,緩沖區(qū)滿后被輸出。同理在ostream類中重載了<< 運算符編譯器會將 cout<<x<<y;解釋成 (cout.operator<<(x) .operator<<(y);返回 cout例14.2使用cout、cerr和clog#include <iostream.h>#include <math.h>voidmain( ) double x;cout<<"Please input x:" cin>>x;

8、if(x<0)/Acerr<<x<<" is not a positive number!n" return;/Bclog<<"The root of "<<x<<" is "<<sqrt(x)<<endl;/C在本例中,cout、cerr和clog的作用相同。而cerr和clog的區(qū)別在于,cerr是非緩沖輸出, 而clog是緩沖輸出。請看例14.3:例14.3體會cerr和clog的區(qū)別#include <iostream.h>v

9、oidmain( ) double x;clog<<"Please input x:" cin>>x;cout<<x<<endl;/A/B此程序在屏幕上的運行過程如下:5<回車>5Please input x:/輸入/B行的輸出/A行的輸出:clog是緩沖輸出,當(dāng)緩沖區(qū)滿或程序結(jié)束時,才“真正”輸出到屏幕上。14.2.3缺省的輸入輸出格式1缺省的(默認(rèn)的)輸入格式©cin 是緩沖流,當(dāng)輸結(jié)束按回車(Enter)時,操作系統(tǒng)將輸入內(nèi)容放入輸入緩沖區(qū),然后 cin 從輸入緩沖區(qū)提取數(shù)據(jù)。©輸入數(shù)據(jù)的

10、類型必須與提取數(shù)據(jù)的變量類型一致。©輸入數(shù)據(jù)時,在缺省的情況下,數(shù)據(jù)之間的分隔符為:<Space>鍵(空格鍵)、<Tab>鍵(制表鍵)或<Enter>鍵(回車鍵),這三個鍵通稱為空白字符。如:charc1, c2, c3; cin>>c1>>c2>>c3;程序運行時,可輸入:a<Space>b<Tab>c<Enter>也可輸入:ab <Tab> c <Enter>或輸入:a <Enter> b <Enter> c <Ente

11、r>在上述情況下,三個變量c1、c2和c3獲得值均為 a、b 和c。應(yīng)注意,最后輸入的總是回車鍵。又如:char s120, s220;cin>>s1>>s2;輸入ab<Space>cd<Enter> 或輸入ab<Tab>cd<Enter> 或輸入ab<Enter>cd<Enter>結(jié)果字符串s1和s2提取的值均分別為"ab"和"cd"。©回車< Enter > 起兩個作用:表示一行結(jié)束,可進(jìn)行提取操作了??捎盟鰯?shù)據(jù)分隔符。14.

12、2.3缺省的輸入輸出格式2缺省的(默認(rèn)的)輸出格式不同類型數(shù)據(jù)的輸出有其缺省的(默認(rèn)的)輸出格式:©輸出整型數(shù):十進(jìn)制、為0、右對齊、空格填充。©輸出實型數(shù):精度6位、浮點輸出、為0、右對齊、空格填充。若整數(shù)部分超過7 位或有效數(shù)字在小數(shù)點后第4 位之后, 自動轉(zhuǎn)為科學(xué)計數(shù)法格式輸出。©輸出字符或字符串:為0、右對齊、空格填充。例14.4標(biāo)準(zhǔn)輸出的默認(rèn)輸出格式#include <iostream.h>#include <iomanip.h>voidmain( )double d1=12.3456789, d2=123456.789, d3=

13、0.0000123456;cout<<d1<<','<<d2<<','<<d3<<endl; cout<<setw(10)<<d1<<','<<setw(10)<<d2<<',<<setw(10)<<d3<<endl; char s10="abcd", c='k' cout<<s<<','

14、;<<setw(4)<<c<<endl;輸出結(jié)果:12.3457, 123457, 1.23456e-005 12.3457, 123457, 1.23456e-005abcd, k注意: 表示空格14.3輸入輸出格式缺省的輸入輸出格式都可以改變:具體方法有兩種。14.3.1使用成員函數(shù)在 ios 類中,定義了用于進(jìn)行輸入輸出格完整內(nèi)容見 “第14章enum/ 部分內(nèi)容如下,含義見表141。skipws=0x0001,/跳過輸入中的空白字符I.dec=0x0010,oct=0x0020, hex=0x0040,/將數(shù)據(jù)轉(zhuǎn)換成十進(jìn)制數(shù)/將數(shù)據(jù)轉(zhuǎn)換成八進(jìn)制數(shù)I/

15、OI/O/將數(shù)據(jù)轉(zhuǎn)換成十六進(jìn)制數(shù) I/Oshowbase=0x0080, /輸出時帶有一個表示數(shù)制的字符 O.;另外,ios 類有靜態(tài)成員:basefield 其值為dec | oct | hexadjustfield 其值為 left | right | internalfloatfield 其值為scientific | fixed在ios.h中的定義形式:static const long basefield;static const long adjustfield; static const long floatfield;/ dec | oct | hex/ left | righ

16、t | internal/ scientific | fixed類的靜態(tài)成員必須在全局有一個定義性說明,并賦初值。class _CRTIMP ios public:protected:int long int char intstate; / 輸入輸出流出錯狀態(tài)字(其使用見14.8節(jié))x_flags;/ 輸入輸出格式狀態(tài)字/ 輸入輸出精度/ 填充字符/ 輸出數(shù)據(jù)的x_precision; x_fill; x_width;.;C+系統(tǒng)提供了若干公有成員函數(shù),對 x_flags、x_precision、x_fill 和 x_width 進(jìn)行設(shè)置,并依據(jù)這些設(shè)置來不同的輸入輸出格式。在 ios 類中

17、,定義了一個保護(hù)的長整型成員,稱為輸入輸出狀態(tài)標(biāo)志字:protected:longx_flag;x_flag 是32位的(實際只用了低16位), 其每一個二進(jìn)制位代表一種狀態(tài),系統(tǒng)按照 x_flag 中指定的狀態(tài)進(jìn)行輸入輸出。上述每個枚舉常量代表一種輸入輸出狀態(tài)。例:x_flag.XXXXios:skipws=0x0001代表該位如果該位的值是1(該位的缺省值是1 ),則輸入時,跳過輸入數(shù)據(jù)中的空白字符。x_flag.XXXX表示按十進(jìn)制輸出ios:dec=0x0010代表該位ios:oct=0x0020表示按八進(jìn)制輸出代表該位ios:hex =0x0040 代表該位表示按十六進(jìn)制輸出ios:

18、showbase=0x0080代表該位表示輸出數(shù)字前導(dǎo)字符經(jīng)常用多個枚舉常量組一個狀態(tài)標(biāo)志字,ios:oct | ios:showbase輸入輸出格式,例:用于組合出 x-flag :0x00A0表示按八進(jìn)制輸出 ,并輸出表示八進(jìn)制數(shù)的前導(dǎo)0. 0000 0000 1010 0000因為 x_flag是ios類保護(hù)成員,ios類的派生類對象 cin、cout等不能直接它,所以ios 類提供了一些公有成員函數(shù)來設(shè)置 x_flag 的各個狀態(tài)位 。(見表14-2 )下面舉例:例14.6:使用成員函數(shù),輸入時是否提取空白字符運行時輸入:abcd<回車>efg<回車>#incl

19、ude < iostream.h > void main( )charc, str80;實際: 永遠(yuǎn)不停hij<回車>inti=0;.運行狀況如何?cin >> c ; while( c!='n' )stri+=c ; cin >> c ;stri='0'跟蹤調(diào)試發(fā)現(xiàn):cin >> c ;不提取'n':缺省狀態(tài)下, ios:skipws值為1,空白字符:<Tab> 'n' 空格。cout << str<< endl;例14.7使用成員函

20、數(shù),輸入格式#inclu運行結(jié)果:a b c<回車> /輸入的a,b,c之間分別有一個空格void cha ab#cin 10 20<回車>/輸入12, 16cin>>c1>>c2>>c3;cout<<c1<<c2<<c3<<'#'<<endl;cin.setf(ios:skipws);/ 設(shè)置為跳過空白字符cin.setf(ios:hex, ios:basefield); / 設(shè)置輸入十六進(jìn)制數(shù)int x, y; cin>>x>>y;

21、cout<<x<<','<<y<<endl;14.3.2使用算子進(jìn)行格式在 iomanip.h 中預(yù)定義了一些算子,表14-3,用于流格式。常用的有 dec、oct、hex、ws、endl、flush、setw( )例14.9使用算子輸入輸出格式#include <iostream.h>#include <iomanip.h>/必須要包含此頭文件voidmain( )int x, y, a, b; cin>>hex>>x>>y;cin>>oct>>

22、a>>b;cout<<setw(8)<<setfill('*')<<x<<', '<<setfill('$')<<setw(4)<<y<<endl; cout<<setiosflags(ios:left) <<a<<','<<setw(8)<<b<<endl;例14.11使用算子浮點數(shù)的輸出精度。#include <iostream.h#inclu

23、de <iomanip.h運行結(jié)果:12.3457/6位有效數(shù)字/4位有效數(shù)字/小數(shù)點后4位數(shù)字voidmain( )double x=12.3 12.35cout<<x<<end12.3457cout<<setprec 1.23e+001/小數(shù)點后2位數(shù)字ision( )xendl;cout.setf(ios:fixed, ios:floatfield);/設(shè)置以定點數(shù)格式輸出cout<<x<<endl;cout.setf(ios:scientific, ios:floatfield);/設(shè)置以科學(xué)表示法格式輸出cout<

24、;<setprecision(2)<<x<<endl;14.4用成員函數(shù)實現(xiàn)輸入輸出14.4.1輸出函數(shù)表示輸出一個字符在ostream類中定義了一些公有成員函ostream & ostream:put(char );出。表示輸出字符串前 n 個字符ostream & ostream:put(unsigned char ostream & ostream:put(signed char );ostream & ostream:write(const char *, int);ostream & ostream:write(c

25、onst unsigned char *, int); ostream & ostream:write(const signed char *, int);ostream& flush( );/刷新輸出流例:int i=97;cout.put( char(i) );char c='*' cout.put( c );cout.write("abcd", 2);運行結(jié)果:a*ab14.4.2輸入函數(shù)在istream類中定義了一些公有成員函一個字符,不跳過空白字符intistream:get( );istream & istream:get

26、(char &);istream & istream:get(unsigned char &); istream & istream:get(signed char &);一行字符,不提取nistream & istream:get(char *, int , char='n');istream & istream:get(unsigned char *, int , c一行字符提取nistream & istream:get(signed char *, int , char='n );istream &

27、amp; istream:getline(char *, int , char='n');istream & istream:getline(unsigned char *, int , char='n');istream & istream:getline(signed char *, int , char='n');注意 get( ) 和 getline( ) 的區(qū)別!例:字符和字符串void main( )運行:abc<回車> computer<回車> operator<回車> char

28、c1, c2, c3;char str180, str2100; cout<<"輸入三個字符:" c1=cin.get( );cin.get(c2);cin.get(c3);cin.get( );/第一行后的回車cout<<"輸入第一行字符串:" cin.get(str1,80);cin.get( );/第二行后的回車cout<<"輸入第二行字符串:"/第三行后的回車自動被提取cin.getline(str2,80);續(xù):cout.put(c1).put(c2).put(c3).put('n

29、'); cout.write(str1, 3);cout.write(str2, strlen(str2); cout.put('n');輸出結(jié)果:abccomoperator例14.14輸入成員函數(shù)的使用#include <iostream.h>#include <string.h>void main( )char buf20, max20; int cnum, mc=0; while(cin.getline(buf, 20)/ A 提取一行字符,并舍棄行尾標(biāo)志'n'cnum = cin.gcount( );/ B 獲取A行的g

30、etline( )實際if(cnum>mc)的字符個數(shù)mc=cnum; strcpy(max, buf);cout<<"len="<<cnum-1<<","<<buf<<endl; / Ccout<<"max len="<<mc-1<<","<<max<<endl;/ D程序的運行狀況是:an apple<回車>len=8, an apple very good<回車>

31、; len=9, very good pear? <回車> len=5, pear?ok! <回車>len=3, ok!Z<回車>max len=9, very good/輸入Ctrl+z,表示輸入流結(jié)束。14.5重載和提取運算符 istream 和 ostream 類對標(biāo)準(zhǔn)數(shù)據(jù)類型,已定義了重載運算符: 提取運算符 >> 和運算符 << ??搭^文件istream.hcin.operator>>(x);如:int x; cin>>x;則自動解釋成 對用戶新定義的數(shù)據(jù)類型如“復(fù)數(shù)”, 能否直接使用 >>

32、; 和 << 進(jìn)行提取和操作呢?即 如果 Complexc1,c2;能否cin >> c1 ; cout << c2;回答:能!但必須在定義Complex 類時, 載運算符 >> 和 << 。例14.18元函數(shù)實現(xiàn)復(fù)數(shù)類對象和提取運算符重載函數(shù)程序見 “第14章 輸入輸出流(例子).doc”或。14.6 文件流類前已述,“文件”指:(1) 磁盤文件(2) 設(shè)備文件(如鍵盤、顯示器、打印機(jī)等)本節(jié)特別介紹: 磁盤文件文本文件中存放的是“文本流”-一串ASCII 字符二進(jìn)制文件中存放的是“二進(jìn)制流”- 按內(nèi)存的二進(jìn)制格式存放(內(nèi)存映象)在

33、“流”中的數(shù)據(jù)是以字節(jié)為的。文件操作是指對文件中的內(nèi)容進(jìn)行讀寫。14.6.1文件流類體系在流類體系中,包含文件流類體系filebuf完成提取操作完成文件緩沖區(qū)管理完成從文件提取數(shù)據(jù)完成向文件數(shù)據(jù)fstreamiostreamostreamistream14.6.2文件的打開和關(guān)閉文件的使用過程如下:(1) 定義一個文件流對象(2) 打開文件(3) 對文件進(jìn)行讀寫操作(4) 關(guān)閉文件1. 定義一個文件流對象如:ifstream infile;/用于與一個輸入文件建立ofstreamoutfile; /用于與一個輸出文件建立fstreamiofile; /用于與一個輸入輸出文件建立open( )

34、函數(shù)格式2.打開文件如:infile.open(“myfile1.txt”); /打開 myfile1.txt 用于讀outfile.open(“myfile2.txt”); /打開 myfile2.txt 用于寫iofile.open(“myfile3.txt”, ios:in| ios:out);/打開 myfile3.txt 用于讀寫定義流對象和打開文件可合二為一:調(diào)用成員函數(shù)打開文件。調(diào)用構(gòu)造函數(shù)打開文件。打開文件成員函數(shù)格式:無缺省值void voidvoidfstream:open(const char *,int,int=filebuf:openprot);ifstream:op

35、en(const char *, int=ios:in, int=filebuf:openprot);ofstream:open(const char *, int=ios:out, int=filebuf:openprot)打開的文件名文件的打開方式參數(shù) ios: 意義文件打開時的保護(hù)方式,如:獨占打開在 ios 類中,定義了一個公有的無名枚舉成員,用于定義文件的打開方式。enumopen_modein=0x01, out=0x02, ate=0x04, app=0x08,trunc=0x10,/按讀方式打開文件/按寫方式打開文件/按增補(bǔ)(追加)方式打開文件位運算“|”或,組合條件nocre

36、ate=0x20, noplace=0x40,binary=0x80, /打開二進(jìn)制文件:;ios:in ios:in|ios:binaryios:outios:out |ios:binary等等3.對文件進(jìn)行讀寫操作與 cin 和 cout 的用法相同如:infile >> x;outfile << y;在對文件進(jìn)行讀寫時,文件看成字符流,讀寫位置指針隨著文件的讀寫,指針移動。4.關(guān)閉文件文件讀寫完畢,必須關(guān)閉。關(guān)閉文件成員函數(shù) 格式 :如:infile.close( );/切斷與輸入文件 myfile1.txt 的outfile.close( ); /切斷與輸出文件

37、 myfile2.txt 的iofile.close( ); /切斷與輸入輸出文件 myfile3.txt 的14.6.3文本文件的讀寫例 14.21將數(shù)值1100及其平方根寫入文件sqrttable.txt#include <iostream.h> #include <fstream.h> #include <math.h> void main( )double x;演示并察看結(jié)果文件ofstream out;/ 定義一個輸出流對象out.open("sqrttable.txt"); for(x=1; x<=100; x+)/ 打

38、開文本文件sqrttable.txtout<<x<<'t'<<sqrt(x)<<endl; / 將結(jié)果寫入文件out.close( );/ 關(guān)閉文件例 14.22編寫一個程序,用于顯示一個文本文件#include <iostream.h> #include <fstream.h> #include <stdlib.h> void main( )char filename40, line80;ifstreaminfile;cout<<"Please input a filen

39、ame: "cin>>filename; infile.open(filename);/ A/ B如果打開不infile 為 0,if(!infile)演示cout<<"Can not open file: "<<filename<<endl; exit(1);/ 讀/ 顯示一行改寫為:例 14.24編一個程序用于文本文件演示程序見 “第14章 輸入輸出流(例子).doc”或。例 14.25從一個文本文件source.txt中讀入若干整數(shù),用選擇法將這些數(shù)據(jù)排成升序, 將排序后的結(jié)果寫入另一個文件文本文件target

40、.txt中事前準(zhǔn)備數(shù)據(jù)文件: source.txt演示程序見 “第14章 輸入輸出流(例子).doc”或。14.6.4二進(jìn)制文件的讀寫1.文件的讀寫操作(成塊讀寫)成員函數(shù):istream & istream:read( char *, int );istream & istream:read( unsigned char *, int ); istream & istream:read( signed char *, int );ostream & ostream:write( constchar *, int );ostream & ostream:

41、write( const unsigned char *, int ); ostream & ostream:write( const signed char *, int );前三個為操作:將第二個參數(shù)指定的字節(jié)數(shù)讀入到以第一個參數(shù)為起始地址的內(nèi)存中。后三個為寫操作:從第一個參數(shù)為起始地址的內(nèi)存開始,將連續(xù)的第二個參數(shù)指定字節(jié)數(shù)的內(nèi)容寫到文件中。例 14.28讀入文本文件data.txt 中的數(shù)據(jù), 寫入二進(jìn)制文件data.bin中。假定文本文件data.txt的內(nèi)容如下程序見 “第14章 輸入輸出流(例子).doc”或。例 14.27從鍵盤輸入若干學(xué)生的信息,寫入二進(jìn)制文件,再從該

42、二進(jìn)制文件中讀出學(xué)生的信息,輸出到屏幕上。程序見 “第14章 輸入輸出流(例子).doc”或。14.7文件的隨機(jī)文件內(nèi)容文件剛打開時:讀寫位置指針讀寫數(shù)據(jù)后自動移動讀寫位置指針istream類和ostream類提供成員函數(shù) ,讀寫位置指針的移動,實現(xiàn)文件的隨機(jī)讀寫。.讀寫位置指針的成員函數(shù):istream & istream:seekg( streampos );istream & istream:seekg( streamoff, ios:seek_dir );streampos & istream:tellg();ostream & ostream:seek

43、p( streampos );ostream & ostream:seekp( streamoff, ios:seek_dir );streampos & ostream:tellp();前三個:適用于輸入文件 get后三個:適用于輸出文件 put其中: 在 ios 類中定義typedef typedeflong longstreamoff ; streampos;/offset/position所以, 本質(zhì)上, streamoff 和 streampos 就是long 類型讀寫位置指針的成員函數(shù):istream & istream:seekg( streampos )

44、;istream & istream:seekg( streamoff, ios:seek_dir );streampos & istream:tellg();ostream & ostream:seekp( streampos );ostream & ostream:seekp( streamoff, ios:seek_dir );streampos & ostream:tellp();另外,在 ios 類中定義枚舉類型:enum seek_dirbeg=0, cur=1, end=2/文件開始處,使用 ios:beg/當(dāng)前位置,使用 ios:cur/

45、文件結(jié)束處,使用 ios:end;用于指定移動文件指針時的參照點。讀寫位置指針的成員函數(shù):istream & istream:seekg( streampos );istream & istream:seekg( streamoff, ios:seek_dir );streampos & istream:tellg();ostream & ostream:seekp( streampos );ostream & ostream:seekp( streamoff, ios:seek_dir );streampos & ostream:tellp()

46、;表示將指針絕對移動到streampos 字節(jié)處。按ios:seek_dir指定的參照點位置, 將指針相對移動到 streamoff 字節(jié)處。返回指針的當(dāng)前位置(相對于文件開始的字節(jié)數(shù))。同理得出后三個函數(shù)的功能!例 14.29將Fibonnaci數(shù)列的前40項寫入二進(jìn)制文件fib.bin中,然后輸出其中的奇數(shù)項,每行輸出5個數(shù)。#include <iostream.h> #include <fstream.h> #include <stdlib.h> #include <iomanip.h>voidmain( )fstreamiofile(&q

47、uot;fib.bin", ios:in|ios:out|ios:binary);if(!iofile)cout<<"Can not open file: fib.bin"<<endl; exit(1);例 14.29續(xù)1streampos pos = iofile.tellp( );cout<<"Begin posi="<<pos<<endl; int f1=1, f2=1;for(int i=0; i<20; i+)iofile.write(char*)&f1, sizeof(int); iofile.write(char*)&f2, sizeof(int); f1=f1+f2;f2=f2+f1;pos=iofile.tellp( );/獲取當(dāng)前位置cout<<"End posi="<<pos<<endl;例 14.29續(xù)2iofile.seekp(0, ios:beg);/將讀寫位置指針重新for(i=0; i<20; i+)于文

溫馨提示

  • 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

提交評論