版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1第第10章章 C+語(yǔ)言的輸入和輸出語(yǔ)言的輸入和輸出本章重點(diǎn):本章重點(diǎn):vC+的流類(lèi)庫(kù)的流類(lèi)庫(kù)v預(yù)定義類(lèi)型的輸入與輸出預(yù)定義類(lèi)型的輸入與輸出v文件的輸入與輸出文件的輸入與輸出2v 在程序設(shè)計(jì)中,數(shù)據(jù)輸入在程序設(shè)計(jì)中,數(shù)據(jù)輸入/ /輸出(輸出(I/OI/O)操操作是必不可少的,作是必不可少的,C+C+的數(shù)據(jù)輸入的數(shù)據(jù)輸入/ /輸出操輸出操作是通過(guò)作是通過(guò)來(lái)實(shí)現(xiàn)的。來(lái)實(shí)現(xiàn)的。v C+C+支持兩個(gè)完備的支持兩個(gè)完備的I/OI/O系統(tǒng):一個(gè)是從系統(tǒng):一個(gè)是從C C繼承而來(lái)的系統(tǒng),另一個(gè)是繼承而來(lái)的系統(tǒng),另一個(gè)是C+C+定義的面定義的面向?qū)ο蟮南驅(qū)ο蟮腎/OI/O系統(tǒng)。系統(tǒng)。3vC+C+的流類(lèi)比的流類(lèi)比
2、C C的輸入輸出函數(shù)具有更大的優(yōu)越的輸入輸出函數(shù)具有更大的優(yōu)越性。性。 首先它是首先它是類(lèi)型安全類(lèi)型安全的,可以防止用戶(hù)輸出數(shù)據(jù)與類(lèi)的,可以防止用戶(hù)輸出數(shù)據(jù)與類(lèi)型不一致的錯(cuò)誤。型不一致的錯(cuò)誤。 另外,另外,C+C+中可以重載運(yùn)算符中可以重載運(yùn)算符“”“”和和“”“”“”和和“”“”“”和和“”“ cin變量;變量; / /輸入輸入 cout cout( cin.operator(變量變量) ); cout. operator( cout. operator(常量或變量常量或變量) );1210.2.2 格式化輸入輸出格式化輸入輸出 C+提供了兩種格式的控制方法:提供了兩種格式的控制方法:v一種
3、是使用一種是使用iosios類(lèi)中的有關(guān)格式控制的類(lèi)中的有關(guān)格式控制的成員函數(shù)成員函數(shù)進(jìn)行格式控制;進(jìn)行格式控制;v另一種是使用另一種是使用稱(chēng)為操作符的特殊類(lèi)型函數(shù)稱(chēng)為操作符的特殊類(lèi)型函數(shù)進(jìn)行進(jìn)行格式控制。格式控制。 下面介紹這兩種格式控制的方法。下面介紹這兩種格式控制的方法。131 1 用用ios類(lèi)的成員函數(shù)進(jìn)行格式控制類(lèi)的成員函數(shù)進(jìn)行格式控制 表表10.2 控制輸入輸出格式的成員函數(shù)控制輸入輸出格式的成員函數(shù)函數(shù)原型函數(shù)原型功能功能long ios:setf(long flags);Long ios:unsetf(long flags);long ios:flags();long ios:
4、flags(long flags);int ios: width();int ios:width(int w);int ios:precision(int p);char ios:fill();char ios:fill(char ch);設(shè)置狀態(tài)標(biāo)志設(shè)置狀態(tài)標(biāo)志flags清楚狀態(tài)標(biāo)志,并返回前狀態(tài)標(biāo)志清楚狀態(tài)標(biāo)志,并返回前狀態(tài)標(biāo)志測(cè)試狀態(tài)標(biāo)志測(cè)試狀態(tài)標(biāo)志設(shè)置標(biāo)志設(shè)置標(biāo)志flags, 并返回前狀態(tài)標(biāo)志并返回前狀態(tài)標(biāo)志返回當(dāng)前的寬度設(shè)置值返回當(dāng)前的寬度設(shè)置值設(shè)置域?qū)捲O(shè)置域?qū)抴,返回以前的設(shè)置返回以前的設(shè)置設(shè)置小數(shù)位數(shù)設(shè)置小數(shù)位數(shù)p,返回以前的小數(shù)位數(shù)返回以前的小數(shù)位數(shù)返回當(dāng)前的填充字符返回當(dāng)前的
5、填充字符設(shè)置填充字符設(shè)置填充字符ch,返回當(dāng)前的填充字符返回當(dāng)前的填充字符14下面分別介紹這些成員函數(shù)的使用方法;下面分別介紹這些成員函數(shù)的使用方法; (1 1)設(shè)置狀態(tài)標(biāo)志:)設(shè)置狀態(tài)標(biāo)志: 是將某一狀態(tài)標(biāo)志位置是將某一狀態(tài)標(biāo)志位置“1”“1”,可使用,可使用setf()setf()函數(shù),其函數(shù),其一般格式為一般格式為 long ios: : setf(long flags) long ios: : setf(long flags) 使用時(shí),其一般的調(diào)用格式為:使用時(shí),其一般的調(diào)用格式為: 流對(duì)象流對(duì)象. .setf(ios:setf(ios:狀態(tài)標(biāo)志狀態(tài)標(biāo)志) );例如:例如:istrea
6、m isobj;istream isobj;ostream osobj;ostream osobj;isobj.setf(ios:skipws); /isobj.setf(ios:skipws); /跳過(guò)輸入中的空白跳過(guò)輸入中的空白o(hù)sobj.setf(ios:left); /osobj.setf(ios:left); /設(shè)置輸出左對(duì)齊設(shè)置輸出左對(duì)齊15【例【例10.1】設(shè)置狀態(tài)標(biāo)志函數(shù)的使用?!吭O(shè)置狀態(tài)標(biāo)志函數(shù)的使用。 /* 10_01.cpp */#includeusing namespace std;int main()cout.setf(ios:showpos|ios:scientif
7、ic);cout567” ”567.89endl;return 0;16+567 +5.678900e+002v注意:要設(shè)置多項(xiàng)標(biāo)志時(shí),中間用或運(yùn)算符注意:要設(shè)置多項(xiàng)標(biāo)志時(shí),中間用或運(yùn)算符“|”“|”分隔,分隔,例如:例如: cout.setf(ios:showpos|ios:dec|ios:cientific);程序的運(yùn)行結(jié)果為:程序的運(yùn)行結(jié)果為:17(2)清除狀態(tài)標(biāo)志:是將某一狀態(tài)標(biāo)志位置清除狀態(tài)標(biāo)志:是將某一狀態(tài)標(biāo)志位置“0”“0”,可使用,可使用unsef()unsef()函數(shù),它的一般格式為:函數(shù),它的一般格式為: long ios:unsef(long flags) long io
8、s:unsef(long flags)使用時(shí)的調(diào)用格式與使用時(shí)的調(diào)用格式與setf()setf()相同。相同。 18(3 3)取狀態(tài)標(biāo)志:取一個(gè)狀態(tài)標(biāo)志,可使用)取狀態(tài)標(biāo)志:取一個(gè)狀態(tài)標(biāo)志,可使用flags()flags()函數(shù)。函數(shù)。flags()flags()函數(shù)有不帶參數(shù)與帶參數(shù)兩種形式。函數(shù)有不帶參數(shù)與帶參數(shù)兩種形式。其一般格式為:其一般格式為: long ios:flags(); long ios:flags(); long ios:flags(long flag); long ios:flags(long flag);v前者用于返回當(dāng)前的狀態(tài)標(biāo)志字(即前者用于返回當(dāng)前的狀態(tài)標(biāo)志字(
9、即x_flagsx_flags的值);的值);v后者將狀態(tài)標(biāo)志字設(shè)置為后者將狀態(tài)標(biāo)志字設(shè)置為flagflag,并返回設(shè)置前的狀態(tài)標(biāo)并返回設(shè)置前的狀態(tài)標(biāo)志字。志字。vflags()flags()函數(shù)與函數(shù)與setf()setf()函數(shù)的差別在于:函數(shù)的差別在于:setf()setf()函數(shù)是函數(shù)是在原有的基礎(chǔ)上在原有的基礎(chǔ)上追加追加設(shè)定,而設(shè)定,而flags()flags()函數(shù)是用新設(shè)定函數(shù)是用新設(shè)定覆蓋覆蓋以前的狀態(tài)標(biāo)志字。以前的狀態(tài)標(biāo)志字。19(4 4)設(shè)置域?qū)挘河驅(qū)捴饕脕?lái)控制輸出,在)設(shè)置域?qū)挘河驅(qū)捴饕脕?lái)控制輸出,在iosios類(lèi)中域?qū)挻娣蓬?lèi)中域?qū)挻娣旁跀?shù)據(jù)成員在數(shù)據(jù)成員int x_
10、widthint x_width中。中。設(shè)置域?qū)挼某蓡T函數(shù)有兩個(gè),其一般格式為:設(shè)置域?qū)挼某蓡T函數(shù)有兩個(gè),其一般格式為: int ios:width(); int ios:width(); int ios:width(int w); int ios:width(int w);v前者用來(lái)返回當(dāng)前的域?qū)捴?;前者用?lái)返回當(dāng)前的域?qū)捴?;v后者用來(lái)設(shè)置域?qū)?,并返回原?lái)的域?qū)?。后者用?lái)設(shè)置域?qū)?,并返回原?lái)的域?qū)?。v注意注意,所設(shè)置的域?qū)?,所設(shè)置的域?qū)拑H對(duì)下一個(gè)流輸出操作有效僅對(duì)下一個(gè)流輸出操作有效,當(dāng)一次,當(dāng)一次輸出操作完成之后,域?qū)捰只謴?fù)為輸出操作完成之后,域?qū)捰只謴?fù)為0 0。20(5 5)填充字符:填
11、充字符的作用是,當(dāng)輸出值不滿(mǎn)域?qū)挄r(shí))填充字符:填充字符的作用是,當(dāng)輸出值不滿(mǎn)域?qū)挄r(shí)用填充字符來(lái)填充,用填充字符來(lái)填充,缺省情況下填充字符為空格缺省情況下填充字符為空格。v所以在使用填充字符函數(shù)時(shí),必須與所以在使用填充字符函數(shù)時(shí),必須與width()width()函數(shù)相配函數(shù)相配合,否則就沒(méi)有意義。合,否則就沒(méi)有意義。v在在iosios類(lèi)中用數(shù)據(jù)成員類(lèi)中用數(shù)據(jù)成員x_fillx_fill來(lái)存放填充的字符。填充來(lái)存放填充的字符。填充字符的成員函數(shù)有兩個(gè),其一般形式為:字符的成員函數(shù)有兩個(gè),其一般形式為: char ios: : fill( ); char ios: : fill( ); char
12、ios: : fill(char ch); char ios: : fill(char ch);v前者用來(lái)返回?cái)?shù)據(jù)填充字符,后者用前者用來(lái)返回?cái)?shù)據(jù)填充字符,后者用chch重新設(shè)置填充字重新設(shè)置填充字符,并返回設(shè)置前的填充字符。符,并返回設(shè)置前的填充字符。 21( 6 6 ) 設(shè) 置 顯 示 的 精 度 : 在) 設(shè) 置 顯 示 的 精 度 : 在 i o si o s 類(lèi) 中 用 數(shù) 據(jù) 成 員類(lèi) 中 用 數(shù) 據(jù) 成 員 i n t i n t x_precisionx_precision來(lái)存放浮點(diǎn)數(shù)的輸出顯示精度。設(shè)置現(xiàn)實(shí)來(lái)存放浮點(diǎn)數(shù)的輸出顯示精度。設(shè)置現(xiàn)實(shí)的精度的成員函數(shù)的一般格式為:的精
13、度的成員函數(shù)的一般格式為: int ios: : precision(int p);int ios: : precision(int p);v此函數(shù)用來(lái)重新設(shè)置浮點(diǎn)數(shù)所需小數(shù)的位數(shù),并返回設(shè)此函數(shù)用來(lái)重新設(shè)置浮點(diǎn)數(shù)所需小數(shù)的位數(shù),并返回設(shè)置前的小數(shù)點(diǎn)后的位數(shù)。置前的小數(shù)點(diǎn)后的位數(shù)。 22【例【例10.2】 成員函數(shù)進(jìn)行格式控制。成員函數(shù)進(jìn)行格式控制。 /* 10_02.cpp */# includeusing namespace std;int main( ) cout”x_width=”cout.width( )endl;cout”x_fill=”cout.fill ( )endl;cout
14、”x_precision=”cout.precision( )endl;cout123” ”123.45678endl;cout”_n”;cout”* x_width=10,x_fill=, x_precision=4 *n”;cout.width(10);cout.precision(4);cout123” ”123.45678” ”234.567endl;x_width=0;x_fill=x_precision=0; 123 123.45678_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ * x_width=10, x_fill= , x_precisio
15、n=4 * 123 123.4568 234.56723cout”x_width=”cout.width( )endl;cout”x_fill=”cout.fill ( )endl;cout”x_precision=”cout.precision( )endl;cout”_n”;cout”* x_width=10,x_fill=&, x_precision=4 *n”;cout.fill(&);cout.width(10);cout123” ”123.45678endl;cout.setf(ios: : left);cout.width(10);cout123” ”123.45
16、678endl;cout”x_width=”cout.width( )endl;cout”x_fill=”cout.fill ( )endl;cout”x_precision=”cout.precision( )endl;return 0;x_width=0 x_fill=x_precision=424x_width=0;x_fill=x_precision=0; 123 123.45678_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ * x_width=10, x_fill= , x_precision=4 * 123 123.4568 234.567x_w
17、idth=0 x_fill=x_precision=4_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ * x_width=10, x_fill=&, x_precision=4 *&123 123.4568123& 123.4568x_width=0 x_fill=&x_precision=4程序的運(yùn)行結(jié)果為:程序的運(yùn)行結(jié)果為:25分析以上程序和運(yùn)行結(jié)果,可以看出:分析以上程序和運(yùn)行結(jié)果,可以看出:(1 1)在缺省情況下,)在缺省情況下,x_widthx_width取值為取值為0 0,這個(gè),這個(gè)0 0意味著一個(gè)特意味著一個(gè)特殊的意
18、義殊的意義無(wú)域?qū)挓o(wú)域?qū)挘磾?shù)據(jù)按自身的寬度打印,即數(shù)據(jù)按自身的寬度打印;x_fil;x_fil取值為取值為空格空格; ;x_precisionx_precision取值為取值為0 0,數(shù)據(jù)按實(shí)際的小數(shù)位,數(shù)據(jù)按實(shí)際的小數(shù)位數(shù)打印,例如數(shù)打印,例如 123.45678 123.45678,其小數(shù)的位數(shù)就按其實(shí)際的,其小數(shù)的位數(shù)就按其實(shí)際的5 5位打印。位打印。(2 2)當(dāng)用)當(dāng)用width( )width( )函數(shù)設(shè)置了域?qū)捄螅粚?duì)緊跟著它的第一函數(shù)設(shè)置了域?qū)捄?,只?duì)緊跟著它的第一個(gè)輸出有影響,當(dāng)?shù)谝粋€(gè)輸出完成后,個(gè)輸出有影響,當(dāng)?shù)谝粋€(gè)輸出完成后,x_width x_width 立即自立即自動(dòng)置
19、為動(dòng)置為0 0。而調(diào)用。而調(diào)用precision( )precision( )函數(shù)和函數(shù)和fill( )fill( )函數(shù),設(shè)函數(shù),設(shè)置了置了 x_fillx_fill和和 x_precisionx_precision后,在程序中一直有效,除后,在程序中一直有效,除非它們被重新設(shè)置。非它們被重新設(shè)置。26(3 3)當(dāng)設(shè)置了)當(dāng)設(shè)置了x_precisionx_precision后,若實(shí)際輸出數(shù)值的精度與其后,若實(shí)際輸出數(shù)值的精度與其不一致時(shí),最終的輸出結(jié)果為:當(dāng)實(shí)際輸出的小數(shù)位數(shù)不一致時(shí),最終的輸出結(jié)果為:當(dāng)實(shí)際輸出的小數(shù)位數(shù)大于大于x_precisionx_precision,則以則以x_pr
20、ecisionx_precision的位數(shù)按四舍五入的位數(shù)按四舍五入輸出;當(dāng)實(shí)際輸出的小數(shù)位數(shù)小于輸出;當(dāng)實(shí)際輸出的小數(shù)位數(shù)小于x_precisionx_precision,則按則按實(shí)際的小數(shù)位數(shù)輸出。實(shí)際的小數(shù)位數(shù)輸出。 例如本例中當(dāng)例如本例中當(dāng)x_precisionx_precision設(shè)置為設(shè)置為4 4時(shí),時(shí),123.45678123.45678被四舍五入為被四舍五入為123.4568123.4568輸出,而輸出,而234.567234.567仍按原值輸出。仍按原值輸出。(4 4)當(dāng)顯示數(shù)據(jù)所需的寬度比使用)當(dāng)顯示數(shù)據(jù)所需的寬度比使用ios:width( )ios:width( )設(shè)置的
21、寬設(shè)置的寬度小時(shí),空余的位置用填充字符來(lái)填充,缺省情況下的度小時(shí),空余的位置用填充字符來(lái)填充,缺省情況下的填充字符是填充字符是空格空格。填充字符的填充位置由。填充字符的填充位置由ios:leftios:left和和ios:rightios:right規(guī)定,若設(shè)置規(guī)定,若設(shè)置ios:leftios:left,則字符填充在數(shù)則字符填充在數(shù)據(jù)右邊(輸出數(shù)據(jù)左對(duì)齊);若設(shè)置據(jù)右邊(輸出數(shù)據(jù)左對(duì)齊);若設(shè)置ios:rightios:right(缺省缺省設(shè)置),則字符填充在數(shù)據(jù)左邊(輸出數(shù)據(jù)右對(duì)齊)。設(shè)置),則字符填充在數(shù)據(jù)左邊(輸出數(shù)據(jù)右對(duì)齊)。272.使用預(yù)定義的操作符進(jìn)行使用預(yù)定義的操作符進(jìn)行I/O
22、格式控制格式控制 v使用使用iosios類(lèi)中的成員函數(shù)進(jìn)行類(lèi)中的成員函數(shù)進(jìn)行I/OI/O格式控制時(shí),格式控制時(shí),每個(gè)函數(shù)的調(diào)用需要寫(xiě)一條語(yǔ)句,而且不能將每個(gè)函數(shù)的調(diào)用需要寫(xiě)一條語(yǔ)句,而且不能將他們直接嵌入到他們直接嵌入到I/OI/O語(yǔ)句中去,顯然使用起來(lái)不語(yǔ)句中去,顯然使用起來(lái)不太方便。太方便。vC+C+提供了另一種進(jìn)行提供了另一種進(jìn)行I/OI/O格式控制的方法,這格式控制的方法,這一方法使用了一種稱(chēng)為一方法使用了一種稱(chēng)為操作符操作符的特殊函數(shù)。的特殊函數(shù)。v在很多情況下,使用操作符(操作符函數(shù))進(jìn)在很多情況下,使用操作符(操作符函數(shù))進(jìn)行格式化控制比用行格式化控制比用iosios類(lèi)中的成員函
23、數(shù)要方便。類(lèi)中的成員函數(shù)要方便。28v所有不帶形參的操作符都定義在頭文件所有不帶形參的操作符都定義在頭文件iostream.hiostream.h中中v而帶形參的操作符則定義在頭文件而帶形參的操作符則定義在頭文件iomanip.hiomanip.h中,中,因而使用相應(yīng)的操作符就必須包含相應(yīng)的頭文因而使用相應(yīng)的操作符就必須包含相應(yīng)的頭文件。件。 29C+C+提供的預(yù)定操作符如下:提供的預(yù)定操作符如下: decdec:以十進(jìn)制形式輸入或輸出整型數(shù),可用于輸入或輸以十進(jìn)制形式輸入或輸出整型數(shù),可用于輸入或輸出。出。 hexhex:以十六進(jìn)制形式輸入或輸出整型數(shù),可用于輸入或以十六進(jìn)制形式輸入或輸出整
24、型數(shù),可用于輸入或輸出。輸出。 octoct:以八進(jìn)制形式輸入或輸出整型數(shù),可用于輸入或輸以八進(jìn)制形式輸入或輸出整型數(shù),可用于輸入或輸出。出。 wsws:用于在輸入時(shí)跳過(guò)前導(dǎo)的空白符,可用于輸入用于在輸入時(shí)跳過(guò)前導(dǎo)的空白符,可用于輸入 endlendl:插入一個(gè)換行符并刷新輸出流,僅用于輸出。插入一個(gè)換行符并刷新輸出流,僅用于輸出。 endsends:插入一個(gè)空字符插入一個(gè)空字符00,通常用來(lái)結(jié)束一個(gè)字符,通常用來(lái)結(jié)束一個(gè)字符串,僅用于輸出。串,僅用于輸出。 flushflush:刷新一個(gè)輸出流,僅用于輸出。刷新一個(gè)輸出流,僅用于輸出。30 setbase(int n)setbase(int
25、n):設(shè)置數(shù)制轉(zhuǎn)換基為設(shè)置數(shù)制轉(zhuǎn)換基為 n n(n n的取值為的取值為0 0、8 8、1010或或1616),),n n的缺省值為的缺省值為0 0,即表示采用十進(jìn)制,僅用于,即表示采用十進(jìn)制,僅用于輸出。輸出。 resetiosflags(long f)resetiosflags(long f):關(guān)閉由參數(shù)關(guān)閉由參數(shù)f f指定的格式標(biāo)志,指定的格式標(biāo)志,可用于輸入或輸出??捎糜谳斎牖蜉敵觥?setiosflags(long f)setiosflags(long f):設(shè)置由參數(shù)設(shè)置由參數(shù)f f指定的格式標(biāo)志,指定的格式標(biāo)志,可用于輸入或輸出??捎糜谳斎牖蜉敵?。 setfill(int ch)s
26、etfill(int ch):設(shè)置設(shè)置chch為填充字符,缺省時(shí)為空格,為填充字符,缺省時(shí)為空格,可用于輸入或輸出??捎糜谳斎牖蜉敵觥?setprecision(int n)setprecision(int n):設(shè)置小數(shù)部分的位數(shù),可用于輸設(shè)置小數(shù)部分的位數(shù),可用于輸入或輸出。入或輸出。 setw(int n)setw(int n):設(shè)置域?qū)挒樵O(shè)置域?qū)挒閚 n,可用于輸入或輸出??捎糜谳斎牖蜉敵觥?1操作符操作符setiosflags()setiosflags()和和resetiosflagsresetiosflags中所有的格式標(biāo)志如表中所有的格式標(biāo)志如表10.310.3所示。所示。 操作
27、符操作符setiosflagssetiosflags中所用的格式標(biāo)志中所用的格式標(biāo)志格式標(biāo)志名格式標(biāo)志名含義含義ios:left輸出數(shù)據(jù)按域?qū)捵髮?duì)齊輸出輸出數(shù)據(jù)按域?qū)捵髮?duì)齊輸出ios:right輸出數(shù)據(jù)按域?qū)捰覍?duì)齊輸出輸出數(shù)據(jù)按域?qū)捰覍?duì)齊輸出ios:scientific使用科學(xué)計(jì)數(shù)法表示浮點(diǎn)數(shù)使用科學(xué)計(jì)數(shù)法表示浮點(diǎn)數(shù)ios:fixed使用定點(diǎn)形式表示浮點(diǎn)數(shù)使用定點(diǎn)形式表示浮點(diǎn)數(shù)ios:dec轉(zhuǎn)換基數(shù)為十進(jìn)制形式轉(zhuǎn)換基數(shù)為十進(jìn)制形式ios:hex轉(zhuǎn)換基數(shù)為十六進(jìn)制形式轉(zhuǎn)換基數(shù)為十六進(jìn)制形式ios:oct轉(zhuǎn)換基數(shù)為八進(jìn)制形式轉(zhuǎn)換基數(shù)為八進(jìn)制形式ios:uppercase十六進(jìn)制形式和科學(xué)計(jì)數(shù)法輸出
28、時(shí),表示數(shù)值的字符一律為大寫(xiě)十六進(jìn)制形式和科學(xué)計(jì)數(shù)法輸出時(shí),表示數(shù)值的字符一律為大寫(xiě)ios:showbase輸出帶有一個(gè)表示制式的字符(如輸出帶有一個(gè)表示制式的字符(如“X”表示十六進(jìn)制,表示十六進(jìn)制,“O”表示八進(jìn)表示八進(jìn)制)制)ios:showpos在正數(shù)前添加一個(gè)在正數(shù)前添加一個(gè)“+”號(hào)號(hào)ios:showpoint浮點(diǎn)輸出時(shí)必須帶有一個(gè)小數(shù)點(diǎn)浮點(diǎn)輸出時(shí)必須帶有一個(gè)小數(shù)點(diǎn)32【例【例10.3】 操作符的使用。操作符的使用。 /* 10_03.cpp */#include#includeint main() coutsetw(10)123567endl; / cout123setiosfla
29、gs(ios:scientific)setw(20) / 123.456789endl; cout123setw(10)hex123endl; / cout123setw(10)oct123endl; / cout123setw(10)dec123endl; / coutresetiosflags(ios:scientific)setprecision(4) / 123.456789endl; coutsetiosflags(ios:left)setfill(#)setw(8) / 123endl; coutresetiosflags(ios:left)setfill($)setw(8) /
30、456”和和“”“”和輸出流運(yùn)算符和輸出流運(yùn)算符“”“”的內(nèi)容,在的內(nèi)容,在第章的第章的7.47.4節(jié)中已經(jīng)詳細(xì)講解,在此再通過(guò)一節(jié)中已經(jīng)詳細(xì)講解,在此再通過(guò)一個(gè)示例加以鞏固。個(gè)示例加以鞏固。Continue3510.4 文件的輸入輸出文件的輸入輸出 v文件是指存儲(chǔ)在外部介質(zhì)上的具有相同名字的一組相關(guān)文件是指存儲(chǔ)在外部介質(zhì)上的具有相同名字的一組相關(guān)數(shù)據(jù)的集合。它可以是具有一定功能的程序模塊或一組數(shù)據(jù)的集合。它可以是具有一定功能的程序模塊或一組數(shù)據(jù)。數(shù)據(jù)。vC+C+把數(shù)據(jù)文件看作字符(字節(jié))序列,即由一個(gè)一個(gè)把數(shù)據(jù)文件看作字符(字節(jié))序列,即由一個(gè)一個(gè)字符(字節(jié))的數(shù)據(jù)順序組成的。字符(字節(jié))的
31、數(shù)據(jù)順序組成的。v根據(jù)文件中數(shù)據(jù)的存放形式,文件分為根據(jù)文件中數(shù)據(jù)的存放形式,文件分為: : ASCIIASCII文件文件 二進(jìn)制文件二進(jìn)制文件36vASCIIASCII文件又稱(chēng)文件又稱(chēng)文本文件文本文件,它的每一個(gè)字節(jié)存放一個(gè),它的每一個(gè)字節(jié)存放一個(gè)ASCIIASCII代碼,代表一個(gè)字符。代碼,代表一個(gè)字符。v其優(yōu)點(diǎn)是可直接按字符形式輸出文件的內(nèi)容,也可用一其優(yōu)點(diǎn)是可直接按字符形式輸出文件的內(nèi)容,也可用一般的字處理軟件直接打開(kāi)并查看文件的內(nèi)容般的字處理軟件直接打開(kāi)并查看文件的內(nèi)容. .v缺點(diǎn)是占存儲(chǔ)空間較多。缺點(diǎn)是占存儲(chǔ)空間較多。v二進(jìn)制文件,將數(shù)據(jù)用二進(jìn)制形式存放在文件中,并保二進(jìn)制文件,將
32、數(shù)據(jù)用二進(jìn)制形式存放在文件中,并保持了數(shù)據(jù)在內(nèi)存中存放的原有格式;持了數(shù)據(jù)在內(nèi)存中存放的原有格式;v其優(yōu)點(diǎn)是存儲(chǔ)效率高,無(wú)須進(jìn)行存儲(chǔ)形式的轉(zhuǎn)換其優(yōu)點(diǎn)是存儲(chǔ)效率高,無(wú)須進(jìn)行存儲(chǔ)形式的轉(zhuǎn)換. .v但不能直接按字符形式輸出。但不能直接按字符形式輸出。37C+C+語(yǔ)言中進(jìn)行文件操作的一般步驟如下語(yǔ)言中進(jìn)行文件操作的一般步驟如下: :()為要進(jìn)行操作的文件定義一個(gè)流對(duì)象。()為要進(jìn)行操作的文件定義一個(gè)流對(duì)象。()建立(或打開(kāi))文件。如果文件不存在,則建立該文()建立(或打開(kāi))文件。如果文件不存在,則建立該文件;如果磁盤(pán)上已存在該文件,則打開(kāi)它。件;如果磁盤(pán)上已存在該文件,則打開(kāi)它。()進(jìn)行讀()進(jìn)行讀/
33、 /寫(xiě)操作。在建立(或打開(kāi))的文件上執(zhí)行所寫(xiě)操作。在建立(或打開(kāi))的文件上執(zhí)行所要求的輸入要求的輸入/ /輸出操作。一般來(lái)說(shuō),在主存與外設(shè)的數(shù)輸出操作。一般來(lái)說(shuō),在主存與外設(shè)的數(shù)據(jù)傳輸中,由主存到外設(shè)叫做輸出或?qū)懀赏庠O(shè)到主據(jù)傳輸中,由主存到外設(shè)叫做輸出或?qū)?,而由外設(shè)到主存叫做輸入或讀。存叫做輸入或讀。()關(guān)閉文件。當(dāng)不需要進(jìn)行其他輸入輸出操作時(shí),應(yīng)把()關(guān)閉文件。當(dāng)不需要進(jìn)行其他輸入輸出操作時(shí),應(yīng)把已打開(kāi)的文件關(guān)閉。已打開(kāi)的文件關(guān)閉。38對(duì)文件的讀寫(xiě)操作有兩種方式:對(duì)文件的讀寫(xiě)操作有兩種方式:()順序文件操作()順序文件操作: :v從文件的第一個(gè)字符(字節(jié))開(kāi)始順序地處理到文件的從文件的第
34、一個(gè)字符(字節(jié))開(kāi)始順序地處理到文件的最后一個(gè)字符(字節(jié))。最后一個(gè)字符(字節(jié))。v只能只能從文件的開(kāi)始處依次順序讀寫(xiě)文件內(nèi)容,而不能任從文件的開(kāi)始處依次順序讀寫(xiě)文件內(nèi)容,而不能任意讀寫(xiě)文件內(nèi)容意讀寫(xiě)文件內(nèi)容。()隨機(jī)文件操作()隨機(jī)文件操作: :v在文件中通過(guò)在文件中通過(guò)C+C+相關(guān)的函數(shù)移動(dòng)文件指針,并指向所相關(guān)的函數(shù)移動(dòng)文件指針,并指向所要處理的字符(字節(jié))。要處理的字符(字節(jié))。v可以在文件中來(lái)回移動(dòng)文件指針和非順序地讀寫(xiě)文件內(nèi)可以在文件中來(lái)回移動(dòng)文件指針和非順序地讀寫(xiě)文件內(nèi)容容。能快速地檢索、修改和刪除文件中的信息。能快速地檢索、修改和刪除文件中的信息。 3910.4.1 通過(guò)通過(guò)F
35、ILE結(jié)構(gòu)進(jìn)行文件操作結(jié)構(gòu)進(jìn)行文件操作 vC+C+保留了保留了ANSI CANSI C對(duì)文件的處理方式,程序?qū)γ總€(gè)文件對(duì)文件的處理方式,程序?qū)γ總€(gè)文件都使用一個(gè)單獨(dú)的都使用一個(gè)單獨(dú)的FILEFILE結(jié)構(gòu)結(jié)構(gòu)來(lái)處理。來(lái)處理。v每個(gè)被使用的文件都在內(nèi)存中開(kāi)辟一個(gè)區(qū),用來(lái)存放文每個(gè)被使用的文件都在內(nèi)存中開(kāi)辟一個(gè)區(qū),用來(lái)存放文件的有關(guān)信息(如文件的名字、文件狀態(tài)、文件當(dāng)前位件的有關(guān)信息(如文件的名字、文件狀態(tài)、文件當(dāng)前位置等)。這些信息保存在一個(gè)類(lèi)型為置等)。這些信息保存在一個(gè)類(lèi)型為FILEFILE的結(jié)構(gòu)體變量的結(jié)構(gòu)體變量中。中。40v該結(jié)構(gòu)體類(lèi)型該結(jié)構(gòu)體類(lèi)型FILEFILE是由系統(tǒng)定義的。是由系統(tǒng)定
36、義的。在在stdio.hstdio.h文件中對(duì)文件中對(duì)FILEFILE結(jié)構(gòu)體類(lèi)型是這樣定義的:結(jié)構(gòu)體類(lèi)型是這樣定義的:typedef structtypedef struct int _fd; int _fd; /文件號(hào)文件號(hào)int _cleft; int _cleft; /緩沖區(qū)中剩余的字符緩沖區(qū)中剩余的字符int _mode; int _mode; /文件操作模式文件操作模式char char * *_nextc; _nextc; / /下一個(gè)字符位置下一個(gè)字符位置char char * *_buff; _buff; /文件緩沖區(qū)位置文件緩沖區(qū)位置 FILE;FILE;v用結(jié)構(gòu)體類(lèi)型用結(jié)構(gòu)
37、體類(lèi)型FILEFILE可以定義文件型指針變量,例如:可以定義文件型指針變量,例如:FILE FILE * *fp;fp;41打開(kāi)文件打開(kāi)文件v用用stdio.hstdio.h文件中定義的文件中定義的fopen()fopen()函數(shù)可以實(shí)現(xiàn)文件的建函數(shù)可以實(shí)現(xiàn)文件的建立和打開(kāi)操作。立和打開(kāi)操作。C+C+中中stdio.hstdio.h改為改為cstdio.hcstdio.h。vfopenfopen函數(shù)的調(diào)用方式通常為函數(shù)的調(diào)用方式通常為: : FILE FILE * *fp;fp; fp=fopen( fp=fopen(文件名,文件的使用方式文件名,文件的使用方式););例如:例如:FILE F
38、ILE * *fp;fp;fp=fopen(abc.txt,r);fp=fopen(abc.txt,r);42v在打開(kāi)一個(gè)文件時(shí),通知給編譯系統(tǒng)以下在打開(kāi)一個(gè)文件時(shí),通知給編譯系統(tǒng)以下3 3個(gè)信息:個(gè)信息:(1 1)需要打開(kāi)的文件名,也就是準(zhǔn)備訪(fǎng)問(wèn)的文件的名字。)需要打開(kāi)的文件名,也就是準(zhǔn)備訪(fǎng)問(wèn)的文件的名字。(2 2)讓哪一個(gè)指針變量指向被打開(kāi)的文件。)讓哪一個(gè)指針變量指向被打開(kāi)的文件。(3 3)使用文件的方式()使用文件的方式(“讀讀”還是還是“寫(xiě)寫(xiě)”等)。文件的使等)。文件的使 用方式如表用方式如表10.410.4所示。所示。43表表10.4 文件的使用方式文件的使用方式442 關(guān)閉文件關(guān)
39、閉文件 v在使用完一個(gè)文件后應(yīng)該關(guān)閉它,以防止文件再被誤用。在使用完一個(gè)文件后應(yīng)該關(guān)閉它,以防止文件再被誤用?!瓣P(guān)閉關(guān)閉”就是使文件指針變量不指向該文件,此后不能就是使文件指針變量不指向該文件,此后不能再通過(guò)該指針對(duì)原來(lái)與其相聯(lián)系的文件進(jìn)行讀寫(xiě)操作。再通過(guò)該指針對(duì)原來(lái)與其相聯(lián)系的文件進(jìn)行讀寫(xiě)操作。除非再次打開(kāi),使該指針變量重新指向該文件。除非再次打開(kāi),使該指針變量重新指向該文件。v用用fclosefclose函數(shù)函數(shù)可以實(shí)現(xiàn)文件的關(guān)閉操作??梢詫?shí)現(xiàn)文件的關(guān)閉操作。fclosefclose函數(shù)調(diào)函數(shù)調(diào)用的一般形式為用的一般形式為: :fclosefclose(文件指針);文件指針);vfclos
40、efclose函數(shù)也帶回一個(gè)值,當(dāng)順利執(zhí)行了關(guān)閉操作,則函數(shù)也帶回一個(gè)值,當(dāng)順利執(zhí)行了關(guān)閉操作,則返回值為返回值為0 0;否則返回;否則返回EOFEOF(即即-1-1)。)。45文件的讀寫(xiě)文件的讀寫(xiě) ()順序文件操作()順序文件操作 fgetcfgetc和和fputcfputc函數(shù)函數(shù)vfgetcfgetc函數(shù)的功能是函數(shù)的功能是從指定的文件讀入一個(gè)字符從指定的文件讀入一個(gè)字符,該文,該文件必須是以讀或讀寫(xiě)方式打開(kāi)的。件必須是以讀或讀寫(xiě)方式打開(kāi)的。例如,例如,ch=fgetc(fp);ch=fgetc(fp);v其中,其中,fpfp為文件型指針變量,為文件型指針變量,chch為字符變量。為字符
41、變量。fgetcfgetc函函數(shù)帶回一個(gè)字符賦給數(shù)帶回一個(gè)字符賦給chch。v如果在執(zhí)行如果在執(zhí)行fgetcfgetc函數(shù)讀字符時(shí)遇到文件結(jié)束符,函數(shù)函數(shù)讀字符時(shí)遇到文件結(jié)束符,函數(shù)返回一個(gè)文件結(jié)束標(biāo)志返回一個(gè)文件結(jié)束標(biāo)志EOFEOF(即即-1-1)。)。EOFEOF是在是在cstdio.hcstdio.h文件中定義的符號(hào)常量,值為文件中定義的符號(hào)常量,值為-1-1。46v如果想從一個(gè)磁盤(pán)順序文件讀入字符并在屏幕上顯示出如果想從一個(gè)磁盤(pán)順序文件讀入字符并在屏幕上顯示出來(lái),可以用以下程序段來(lái)實(shí)現(xiàn)來(lái),可以用以下程序段來(lái)實(shí)現(xiàn): :ch=fgetc(fp);ch=fgetc(fp);while(ch!
42、=EOF)while(ch!=EOF) putchar(ch);putchar(ch);ch=fgetc(fp);ch=fgetc(fp); 47fgetsfgets和和fputsfputs函數(shù)函數(shù)vfgetsfgets函數(shù)的功能是從指定文件讀入一個(gè)函數(shù)的功能是從指定文件讀入一個(gè)字符串字符串如:如:fgets(str,n,fp);fgets(str,n,fp);n n為要求得到的字符,放到字符數(shù)組為要求得到的字符,放到字符數(shù)組strstr中,如果在讀入中,如果在讀入過(guò)程中遇到換行符或過(guò)程中遇到換行符或EOFEOF,讀入結(jié)束。讀入結(jié)束。fgetsfgets函數(shù)的返回值為函數(shù)的返回值為strstr
43、的首地址的首地址。vfputsfputs函數(shù)的功能是向指定的文件輸出一個(gè)字符串如語(yǔ)函數(shù)的功能是向指定的文件輸出一個(gè)字符串如語(yǔ)句:句:fputs(Olympic,fp);fputs(Olympic,fp);把字符串把字符串“Olympic”O(jiān)lympic”輸出到輸出到fpfp指向的文件。指向的文件。fgetsfgets和和fputsfputs函數(shù)以指定的文件為讀寫(xiě)對(duì)象。函數(shù)以指定的文件為讀寫(xiě)對(duì)象。48fscanffscanf和和fprintffprintf函數(shù)函數(shù)vfscanffscanf、fprintffprintf函數(shù)與函數(shù)與scanfscanf、printfprintf函數(shù)的作用相仿,函數(shù)
44、的作用相仿,但但scanfscanf和和printfprintf函數(shù)的函數(shù)的讀寫(xiě)對(duì)象是終端讀寫(xiě)對(duì)象是終端(屏幕),而(屏幕),而fscanffscanf和和fprintffprintf函數(shù)的函數(shù)的讀寫(xiě)是磁盤(pán)文件讀寫(xiě)是磁盤(pán)文件。它們的一般。它們的一般調(diào)用形式為調(diào)用形式為: :fprintf(fprintf(文件指針文件指針, ,格式字符串格式字符串, ,輸出表列輸出表列););fscanf(fscanf(文件指針文件指針, ,格式字符串格式字符串, ,輸入表列輸入表列););例如:例如:fprintf(fp, %d,% f,i,t);fprintf(fp, %d,% f,i,t);v該語(yǔ)句的作用
45、是將整型變量該語(yǔ)句的作用是將整型變量i i和實(shí)型變量和實(shí)型變量t t的值按的值按% %d d和和% %f f的格式輸出到的格式輸出到fpfp指向的文件中。指向的文件中。49()隨機(jī)文件操作()隨機(jī)文件操作freadfread和和fwritefwrite函數(shù)函數(shù)v它們的功能是用來(lái)它們的功能是用來(lái)讀寫(xiě)一個(gè)數(shù)據(jù)塊讀寫(xiě)一個(gè)數(shù)據(jù)塊。一般調(diào)用形式為。一般調(diào)用形式為: :fread(buffer,size,count,fp);fread(buffer,size,count,fp);fwrite(buffer,size,count,fp);fwrite(buffer,size,count,fp);其中,其中,
46、bufferbuffer是一個(gè)指針,是讀入或輸出數(shù)據(jù)的地址。是一個(gè)指針,是讀入或輸出數(shù)據(jù)的地址。sizesize是要讀寫(xiě)的字節(jié)數(shù)。是要讀寫(xiě)的字節(jié)數(shù)。countcount是要進(jìn)行讀寫(xiě)多少個(gè)是要進(jìn)行讀寫(xiě)多少個(gè)sizesize字節(jié)的數(shù)據(jù)項(xiàng)。字節(jié)的數(shù)據(jù)項(xiàng)。fpfp為文件型指針。為文件型指針。例如:例如: fread(f,4,2,fp); fread(f,4,2,fp); 從從fpfp所指向的文件讀入兩次(每次所指向的文件讀入兩次(每次4 4個(gè)字節(jié))數(shù)據(jù),存儲(chǔ)個(gè)字節(jié))數(shù)據(jù),存儲(chǔ) 到數(shù)組中到數(shù)組中f f中。中。 50文件定位函數(shù)文件定位函數(shù)v文件的隨機(jī)讀寫(xiě)就是可以將文件指針直接定位在所要求文件的隨機(jī)讀寫(xiě)就
47、是可以將文件指針直接定位在所要求讀寫(xiě)的位置上,而不必從文件頭開(kāi)始直到要求的位置再讀寫(xiě)的位置上,而不必從文件頭開(kāi)始直到要求的位置再進(jìn)行讀寫(xiě)。進(jìn)行讀寫(xiě)。v為此為此C+C+提供了文件定位函數(shù)提供了文件定位函數(shù)rewindrewind函數(shù)、函數(shù)、fseekfseek函數(shù)和函數(shù)和ftellftell函數(shù)。函數(shù)。vrewindrewind函數(shù)函數(shù)的功能是使位置指針重新返回到文件的開(kāi)頭。的功能是使位置指針重新返回到文件的開(kāi)頭。該函數(shù)沒(méi)有返回值。其調(diào)用形式為該函數(shù)沒(méi)有返回值。其調(diào)用形式為rewind(rewind(文件指針文件指針););51vfseekfseek函數(shù)函數(shù)的功能是將文件指針移動(dòng)到指定的位置上。
48、的功能是將文件指針移動(dòng)到指定的位置上。其調(diào)用形式為其調(diào)用形式為: :fseek(fseek(文件指針文件指針, ,偏移量偏移量, ,起始點(diǎn)起始點(diǎn)) )v“偏移量偏移量”指以指以“起始點(diǎn)起始點(diǎn)”為基點(diǎn),向前移動(dòng)的字節(jié)數(shù)。為基點(diǎn),向前移動(dòng)的字節(jié)數(shù)。v“起始點(diǎn)起始點(diǎn)”可以是文件開(kāi)始、文件當(dāng)前位置和文件末尾可以是文件開(kāi)始、文件當(dāng)前位置和文件末尾3 3種,如表種,如表10.510.5所示。所示。表表10.510.5“起始點(diǎn)起始點(diǎn)”的符號(hào)常量和數(shù)字表示的符號(hào)常量和數(shù)字表示 52例如:例如:fseek(fp,100,0);fseek(fp,100,0);/將位置指針移到離文件頭將位置指針移到離文件頭1001
49、00個(gè)字節(jié)處個(gè)字節(jié)處fseek(fp,50,1); fseek(fp,50,1); /將位置指針移到離當(dāng)前位置將位置指針移到離當(dāng)前位置5050個(gè)字節(jié)處個(gè)字節(jié)處fseek(fp,-10,2); fseek(fp,-10,2); /將位置指針從文件末尾處后退將位置指針從文件末尾處后退1010個(gè)字節(jié)個(gè)字節(jié) ftellftell函數(shù)函數(shù)vftellftell函數(shù)的功能是函數(shù)的功能是返回文件指針的當(dāng)前讀寫(xiě)位置返回文件指針的當(dāng)前讀寫(xiě)位置。這。這個(gè)位置是用相對(duì)于文件起始位置的字節(jié)偏移量來(lái)表示的。個(gè)位置是用相對(duì)于文件起始位置的字節(jié)偏移量來(lái)表示的。其調(diào)用形式為其調(diào)用形式為: :ftell(ftell(文件指針文
50、件指針););v當(dāng)函數(shù)成功調(diào)用后則返回文件的當(dāng)前讀寫(xiě)位置,否則返當(dāng)函數(shù)成功調(diào)用后則返回文件的當(dāng)前讀寫(xiě)位置,否則返回回-1-1。 5310.4.2 通過(guò)文件流進(jìn)行文件操作通過(guò)文件流進(jìn)行文件操作 1. 1. 文件的打開(kāi)文件的打開(kāi) v在在C+C+中,打開(kāi)一個(gè)文件,就是將這個(gè)文件與一個(gè)中,打開(kāi)一個(gè)文件,就是將這個(gè)文件與一個(gè)流流建建立立關(guān)聯(lián)關(guān)聯(lián);關(guān)閉一個(gè)文件,就是取消這種關(guān)聯(lián)。;關(guān)閉一個(gè)文件,就是取消這種關(guān)聯(lián)。vC+C+有有3 3種類(lèi)型的文件流:種類(lèi)型的文件流:輸入文件流輸入文件流ifstreamifstream輸出文件流輸出文件流ofstreamofstream輸入輸出文件流輸入輸出文件流fstrea
51、mfstreamv這些文件流都定義在這些文件流都定義在fstream.hfstream.h文件中或名字空間文件中或名字空間stdstd的的文件文件fstreamfstream中。中。54要執(zhí)行文件的輸入輸出,需做以下幾件事:要執(zhí)行文件的輸入輸出,需做以下幾件事:()在程序中包含頭文件()在程序中包含頭文件fstream.hfstream.h或名字空間或名字空間stdstd的文件的文件fsteamfsteam。()()建立流。建立流的過(guò)程就是定義流類(lèi)的對(duì)象,建立流。建立流的過(guò)程就是定義流類(lèi)的對(duì)象, 例如:例如:ifstream in;ifstream in;ofstream out;ofstre
52、am out;fstream both;fstream both; 分別定義了輸入流對(duì)象分別定義了輸入流對(duì)象inin;輸出流對(duì)象輸出流對(duì)象outout,輸入輸出輸入輸出流對(duì)象流對(duì)象bothboth。55()使用()使用open( )open( )函數(shù)打開(kāi)文件,也就是使某一文件與上函數(shù)打開(kāi)文件,也就是使某一文件與上面的某一流相聯(lián)系。面的某一流相聯(lián)系。open( )open( )函數(shù)是上述函數(shù)是上述3 3個(gè)流類(lèi)的成員函數(shù)個(gè)流類(lèi)的成員函數(shù),其原型是在,其原型是在fstream.hfstream.h中定義的,原型為:中定義的,原型為:void open(const unsigned charvoid
53、open(const unsigned char* *,int mode, int ,int mode, int access=filebuf:openprot); access=filebuf:openprot);56void open(const unsigned charvoid open(const unsigned char* *,int mode, int ,int mode, int access=filebuf:openprot); access=filebuf:openprot);v其中第一個(gè)參數(shù)是用來(lái)傳遞文件名的;其中第一個(gè)參數(shù)是用來(lái)傳遞文件名的;v第二個(gè)參數(shù)第二個(gè)參數(shù)mo
54、demode的值決定文件將如何被打開(kāi),它必須取的值決定文件將如何被打開(kāi),它必須取下面的值中的一個(gè):下面的值中的一個(gè):ios:app /ios:app /使輸出追加到文件尾部使輸出追加到文件尾部ios:ate /ios:ate /打開(kāi)文件時(shí)文件指針定位到文件尾部打開(kāi)文件時(shí)文件指針定位到文件尾部ios:in /ios:in /打開(kāi)一個(gè)文件進(jìn)行讀操作打開(kāi)一個(gè)文件進(jìn)行讀操作ios:out /ios:out /打開(kāi)一個(gè)文件進(jìn)行寫(xiě)操作打開(kāi)一個(gè)文件進(jìn)行寫(xiě)操作ios:nocreate /ios:nocreate /文件不存在時(shí),導(dǎo)致打開(kāi)失敗文件不存在時(shí),導(dǎo)致打開(kāi)失敗ios:noreplace /ios:nor
55、eplace /若文件存在,導(dǎo)致打開(kāi)失敗若文件存在,導(dǎo)致打開(kāi)失敗ios:trunk /ios:trunk /若文件存在,則清空原文件若文件存在,則清空原文件ios:binary /ios:binary /文件以二進(jìn)制方式打開(kāi),缺省時(shí)為文本文件文件以二進(jìn)制方式打開(kāi),缺省時(shí)為文本文件57下面對(duì)這些值作進(jìn)一步的說(shuō)明:下面對(duì)這些值作進(jìn)一步的說(shuō)明: 如果希望向文件尾部添加數(shù)據(jù),則應(yīng)當(dāng)用如果希望向文件尾部添加數(shù)據(jù),則應(yīng)當(dāng)用“ios:app”ios:app” 方式打開(kāi)文件,但此時(shí)方式打開(kāi)文件,但此時(shí)文件必須存在文件必須存在。打開(kāi)時(shí),文。打開(kāi)時(shí),文件位件位 置指針移到文件尾部置指針移到文件尾部。用這種方式打開(kāi)
56、的文件。用這種方式打開(kāi)的文件只能用于只能用于 輸出輸出。 用用“ios:ate”ios:ate”方式打開(kāi)一個(gè)已存在的文件時(shí),文件位方式打開(kāi)一個(gè)已存在的文件時(shí),文件位 置指針自動(dòng)移到文件的尾部。置指針自動(dòng)移到文件的尾部。 用用“ios:in”ios:in”方式打開(kāi)的文件方式打開(kāi)的文件只能用于輸入數(shù)據(jù),而且只能用于輸入數(shù)據(jù),而且 該文件必須已經(jīng)存在該文件必須已經(jīng)存在。v如果用類(lèi)如果用類(lèi)ifstreamifstream來(lái)產(chǎn)生一個(gè)流,則隱含為輸入流,不來(lái)產(chǎn)生一個(gè)流,則隱含為輸入流,不必再說(shuō)明使用方式。必再說(shuō)明使用方式。v用用“ios:out”ios:out”方式打開(kāi)文件,表示可以向該文件輸出方式打開(kāi)文
57、件,表示可以向該文件輸出數(shù)據(jù)。數(shù)據(jù)。v如果用類(lèi)如果用類(lèi)ofstreamofstream來(lái)產(chǎn)生一個(gè)流,則隱含為輸出流,不來(lái)產(chǎn)生一個(gè)流,則隱含為輸出流,不必再說(shuō)明使用方式。必再說(shuō)明使用方式。58 通常,當(dāng)用通常,當(dāng)用open()open()函數(shù)打開(kāi)文件時(shí),如果文件存在,則函數(shù)打開(kāi)文件時(shí),如果文件存在,則打開(kāi)該文件,否則建立該文件。打開(kāi)該文件,否則建立該文件。v但當(dāng)用但當(dāng)用“ios:nocreate”ios:nocreate”方式打開(kāi)文件時(shí),表示不方式打開(kāi)文件時(shí),表示不建建立新文件立新文件,在這種情況下,如果要打開(kāi)的文件不存在,在這種情況下,如果要打開(kāi)的文件不存在,則函數(shù)則函數(shù)open()open(
58、)調(diào)用失敗。調(diào)用失敗。v相反,如果使用相反,如果使用“ios:noreplace”ios:noreplace”方式打開(kāi)文件,則方式打開(kāi)文件,則表示不修改原來(lái)文件,而是要表示不修改原來(lái)文件,而是要建立新文件建立新文件。因此,如果。因此,如果文件已經(jīng)存在,則文件已經(jīng)存在,則open()open()函數(shù)調(diào)用失敗。函數(shù)調(diào)用失敗。59 當(dāng)使用當(dāng)使用“ios:trunc”ios:trunc”方式打開(kāi)文件時(shí),如果文件已存方式打開(kāi)文件時(shí),如果文件已存在,則清除該文件的內(nèi)容,文件長(zhǎng)度被壓縮為在,則清除該文件的內(nèi)容,文件長(zhǎng)度被壓縮為0 0。v實(shí)際上,如果指定實(shí)際上,如果指定“ios:out”ios:out”方式,
59、且未指定方式,且未指定“ios:ate”ios:ate”方式或方式或“iosios:app”app”方式,則隱含為方式,則隱含為“iosios:trunc”trunc”方式。方式。如果使用如果使用“ios:binary”ios:binary”方式,則以二進(jìn)制方式打開(kāi)文方式,則以二進(jìn)制方式打開(kāi)文件,缺省時(shí),所有的文件以文本方式打開(kāi)。件,缺省時(shí),所有的文件以文本方式打開(kāi)。v在用文本文件向計(jì)算機(jī)輸入時(shí),把回車(chē)和換行兩個(gè)字符在用文本文件向計(jì)算機(jī)輸入時(shí),把回車(chē)和換行兩個(gè)字符轉(zhuǎn)換為一個(gè)換行符,而在輸出時(shí)把換行符轉(zhuǎn)換為回車(chē)和轉(zhuǎn)換為一個(gè)換行符,而在輸出時(shí)把換行符轉(zhuǎn)換為回車(chē)和換行兩個(gè)字符。換行兩個(gè)字符。v對(duì)于二
60、進(jìn)制文件則不進(jìn)行這種轉(zhuǎn)換,在內(nèi)存中的數(shù)據(jù)形對(duì)于二進(jìn)制文件則不進(jìn)行這種轉(zhuǎn)換,在內(nèi)存中的數(shù)據(jù)形式與輸出到外部文件中的數(shù)據(jù)形式完全一致,一一對(duì)應(yīng)。式與輸出到外部文件中的數(shù)據(jù)形式完全一致,一一對(duì)應(yīng)。60vaccessaccess的值決定文件的訪(fǎng)問(wèn)方式。文件的訪(fǎng)問(wèn)方式指的的值決定文件的訪(fǎng)問(wèn)方式。文件的訪(fǎng)問(wèn)方式指的是文件類(lèi)別(文件屬性)。它們是:是文件類(lèi)別(文件屬性)。它們是:普通文件普通文件-0-0只讀文件只讀文件-1-1隱含文件隱含文件-2-2系統(tǒng)文件系統(tǒng)文件-4-4備份文件備份文件-8-8vaccessaccess的缺省值是的缺省值是filebuf:openprotfilebuf:openprot(其中其中filebuffilebuf是是流類(lèi)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 印刷行業(yè)智能化升級(jí)-洞察分析
- 新型數(shù)據(jù)庫(kù)存儲(chǔ)技術(shù)-洞察分析
- 醫(yī)療健康信息標(biāo)準(zhǔn)化研究-洞察分析
- 稀有金屬并購(gòu)融資渠道-洞察分析
- 煙草產(chǎn)業(yè)綠色發(fā)展路徑-洞察分析
- 物聯(lián)網(wǎng)技術(shù)助力金融科技創(chuàng)新-洞察分析
- 相思子食品安全檢測(cè)技術(shù)-洞察分析
- 游戲界面響應(yīng)速度優(yōu)化-洞察分析
- 睡眠模式與心理健康風(fēng)險(xiǎn)評(píng)估-洞察分析
- 2024年杭州鐵路醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫(kù)頻考點(diǎn)附帶答案
- 采購(gòu)合同范例壁布
- 公司員工出差車(chē)輛免責(zé)協(xié)議書(shū)
- 2024年陜西榆林市神木市公共服務(wù)輔助人員招聘775人歷年管理單位遴選500模擬題附帶答案詳解
- 安全生產(chǎn)事故案例分析
- 期末檢測(cè)卷(一)(試卷)-2024-2025學(xué)年外研版(三起)英語(yǔ)六年級(jí)上冊(cè)(含答案含聽(tīng)力原文無(wú)音頻)
- 《防范于心反詐于行》中小學(xué)防范電信網(wǎng)絡(luò)詐騙知識(shí)宣傳課件
- 涼席竹片銑槽機(jī)(課程設(shè)計(jì))
- 高壓線(xiàn)防護(hù)搭設(shè)方案
- 綜合機(jī)械化固體充填采煤技術(shù)要求-編制說(shuō)明
- 十人聯(lián)名推薦表
- 七、分蛋糕博弈
評(píng)論
0/150
提交評(píng)論