【正文】
第 11章 C++輸入 /輸出流與文件系統(tǒng) C++語言程序設(shè)計(jì)教程 第11章 C++輸入輸出流 第 11章 C++輸入 /輸出流與文件系統(tǒng) ?學(xué)習(xí)目標(biāo) 1. 理解 C++的輸入 /輸出流的概念; 2. 熟悉 I/O流的工作過程; 3. 熟悉各種格式標(biāo)志與各種格式控制方法; 4. 分清文本文件與二進(jìn)制文件的區(qū)別; 5. 掌握文本文件的輸入 /輸出的步驟與操作; 6. 掌握二進(jìn)制文件的輸入 /輸出的步驟與操作; 7. 會運(yùn)用文件指針以及各種標(biāo)志; C++語言程序設(shè)計(jì)教程 第11章 C++輸入輸出流 C++中的 I/O是以流 (stream)的形式出現(xiàn)的。流是實(shí)際上是一個(gè)處于傳輸狀態(tài)的字節(jié)序列,是字節(jié)在對象之間的“流動”, 流的操作包括輸入與輸出。輸入操作是字節(jié)從外部設(shè)備 (包括鍵盤、磁盤、網(wǎng)絡(luò)連接 )輸入到內(nèi)存,是字節(jié)從設(shè)備到內(nèi)存的流動。輸出操作是從內(nèi)存輸出到外部設(shè)備 (如顯示器、打印機(jī)、磁盤、網(wǎng)絡(luò)連接 ),是字節(jié)從內(nèi)存到外部設(shè)備的流動。 C++語言程序設(shè)計(jì)教程 第11章 C++輸入輸出流 1. I/O流的概念 ba s i c _ i os ba s i c _ i s t r e a m ba s i c _ os t r e a m ba s i c _ i f s t r e a m ba s i c _ i os t r e a m ba s i c _ of s t r e a m ba s i c _ f s t r e a m i os _b a s e ostream 類提供了格式化和無格式的輸出功能。輸出功能包括 : 用插入操作符 輸出標(biāo)準(zhǔn)類型數(shù)據(jù);用 put成員函數(shù)輸出字符;用 write成員函數(shù)實(shí)現(xiàn)無格式輸出。 最常用的輸出方法是在 cout上用插入操作符 ,插入操作符可以接受任何標(biāo)準(zhǔn)類型的實(shí)參,包括 const char *、標(biāo)準(zhǔn)庫 string、 plex等類型。實(shí)參可以是任何表達(dá)式包括函數(shù)調(diào)用,只要其結(jié)果是能被插入操作符能接受的數(shù)據(jù)類型即可。 C++語言程序設(shè)計(jì)教程 第11章 C++輸入輸出流 2. 輸出流 的功能 C++語言程序設(shè)計(jì)教程 第11章 C++輸入輸出流 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 17 18 19 20 21 23 24 25 26 /************************************************ * 程序文件名 : * * 功能:演示 的功能 * * ***********************************************/ include iostream include plex include string using namespace std。 void main() { char *s1=a c string。 string s2(a c++ string)。 plex double c (,)。 int i(10)。 int *pi=amp。i。 couts1endl s2endl。 coutcendl。 couti++39。\t39。 i++39。\t39。 i++endl。 coutamp。i:amp。i39。\t39。 pi:piendl。 coutamp。s1:amp。s139。\t39。 s1:const_castvoid *(s1)endl。 // s1:(void *)s1endl。 } 運(yùn)行結(jié)果 : a c string a c++ string (,) 12 11 10 amp。i:006AFDC4 pi:006AFDC4 amp。s1:006AFDE8 s1:0046C040 C++語言程序設(shè)計(jì)教程 第11章 C++輸入輸出流 1 2 3 4 5 6 7 8 9 10 11 12 13 14 /************************************************ * 程序文件名 : * * 功能:演示 的優(yōu)先級 * * 設(shè)計(jì)者 : Antony * * 時(shí) 間 : 8182021 * ***********************************************/ include iostream using namespace std。 void main() { int val1(10),val2(20)。 coutthe larger of val139。,39。val2 is:。 cout(val1 val2) ? val1 : val2。 // couti10endl。 錯(cuò)誤 } 運(yùn)行結(jié)果 : the larger of 10, 20 is 0 每一個(gè)輸入 /輸出流對象都維護(hù)一個(gè) 格式狀態(tài)字 ,用它表示流對象當(dāng)前的格式狀態(tài)并控制流的格式,例如整型值的進(jìn)制基數(shù)或浮點(diǎn)數(shù)的精度。 C++提供了多種格式控制的方法,如使用操縱符修改對象的格式狀態(tài)字來控制流的格式、運(yùn)用成員函數(shù)。 格式標(biāo)志 是一組用于設(shè)置 I/O流格式狀態(tài)字的一個(gè)數(shù),這些格式標(biāo)志屬于 ios類。 C++語言程序設(shè)計(jì)教程 第11章 C++輸入輸出流 3. 流的格式控制 表 113 格式狀態(tài)字設(shè)置函數(shù) 函數(shù) 功能 long flags() const 返回流的當(dāng)前格式狀態(tài)字 long flags( long lFlags ) 設(shè)置流的格式位 IFlags,返回以前的格式 long setf( long lFlags ) 設(shè)置流的格式位 IFlags,返回以前的格式 long setf( long lFlags, long lMask ) 清除 IMask,設(shè)置 IFlags, 返回以前的格式 long unsetf( long lFlags ) 清除 IMask 其中 , IFlags與 IMask 可以是單個(gè)格式標(biāo)志,也可以是與運(yùn)算 amp。 和或運(yùn)算 |將格式標(biāo)志 連接的表達(dá)式,還可以是一個(gè)長整型數(shù)。 C++語言程序設(shè)計(jì)教程 第11章 C++輸入輸出流 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 /************************************************ * 程序名: * * 功能: 揭開格式標(biāo)志的秘密 * * By Antony * * 8192021 * *************************************************/ include iostream using namespace std。 struct fmtflags { long flag。 char flagname[12]。 } flags[18]={{ios::hex,hex}, {ios::dec,dec}, {ios::oct,oct}, {ios::basefield,basefield}, {ios::internal,internal}, {ios::left,left}, {ios::right,right}, {ios::adjustfield,adjustfield}, {ios::fixed,fixed}, {ios::scientific,scientific}, C++語言程序設(shè)計(jì)教程 第11章 C++輸入輸出流 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 {ios::basefield,basefield}, {ios::showbase,showbase}, {ios::showpoint,showpoint}, {ios::showpos,showpos}, {ios::skipws,skipws}, {ios::uppercase,uppercase}, {ios::boolalpha,boolalpha}, {ios::unitbuf,unitbuf} }。 void main() { long IFlags。 IFlags=(0,())。 (ios::hex,ios::basefield)。 coutDefault flag is:IFlagsendl。 for(int i=0。i18。i++) coutflags[i].flag39。\t39。flags[i].flagnameendl。 } 運(yùn)行結(jié)果 : Default flag is:201 800 hex 200 dec 400 oct e00 basefield 100 internal 40 left 80 right 1c0 adjustfield 2021 fixed 1000 scientific e00 ba