




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 面向?qū)ο竺嫦驅(qū)ο?第7章 輸入輸出流2主要內(nèi)容主要內(nèi)容n流流 n無(wú)格式輸入無(wú)格式輸入/ /輸出輸出n輸入輸入/ /輸出的格式控制輸出的格式控制n文件的輸入文件的輸入/ /輸出輸出3分析問(wèn)題分析問(wèn)題nC+C+沒(méi)有定義任何用于執(zhí)行輸入或輸出的沒(méi)有定義任何用于執(zhí)行輸入或輸出的語(yǔ)句,但可以使用語(yǔ)句,但可以使用C C語(yǔ)言中的標(biāo)準(zhǔn)語(yǔ)言中的標(biāo)準(zhǔn)I/OI/O函函數(shù)數(shù)printf()和和scanf()來(lái)解決此問(wèn)題。來(lái)解決此問(wèn)題。nprintf()與與scanf()存在兩個(gè)缺點(diǎn):存在兩個(gè)缺點(diǎn):n非類型安全非類型安全n不可擴(kuò)充性不可擴(kuò)充性 4nC+C+使用類型安全的使用類型安全的I/OI/O流操作。不同類流操作。
2、不同類型的型的I/OI/O流操作都是重載的,沒(méi)有定義過(guò)流操作都是重載的,沒(méi)有定義過(guò)I/OI/O功能的類型不具備功能的類型不具備I/OI/O操作的能力。操作的能力。nC+C+標(biāo)準(zhǔn)庫(kù)既可作為標(biāo)準(zhǔn)數(shù)據(jù)類型數(shù)據(jù)的標(biāo)準(zhǔn)庫(kù)既可作為標(biāo)準(zhǔn)數(shù)據(jù)類型數(shù)據(jù)的I/OI/O,也能用于自定義類型的對(duì)象的,也能用于自定義類型的對(duì)象的I/OI/O,這種擴(kuò)展性是這種擴(kuò)展性是C+C+最有價(jià)值的特點(diǎn)之一。最有價(jià)值的特點(diǎn)之一。 nC+C+用輸入輸出流來(lái)解決這個(gè)問(wèn)題。用輸入輸出流來(lái)解決這個(gè)問(wèn)題。5流流 n所謂流所謂流(stream)是指數(shù)據(jù)從一個(gè)位置是指數(shù)據(jù)從一個(gè)位置流向另一個(gè)位置。流是字節(jié)的序列。流向另一個(gè)位置。流是字節(jié)的序列。n輸
3、入輸出是一種數(shù)據(jù)傳遞操作,可以輸入輸出是一種數(shù)據(jù)傳遞操作,可以看作字符序列在計(jì)算機(jī)內(nèi)存與外設(shè)之間看作字符序列在計(jì)算機(jī)內(nèi)存與外設(shè)之間的流動(dòng),的流動(dòng),C+C+將數(shù)據(jù)從一個(gè)對(duì)象到另一個(gè)將數(shù)據(jù)從一個(gè)對(duì)象到另一個(gè)對(duì)象的流動(dòng)抽象為對(duì)象的流動(dòng)抽象為“流流”。流動(dòng)的方向。流動(dòng)的方向不同,構(gòu)成輸入不同,構(gòu)成輸入/ /輸出流,即輸出流,即I/OI/O流。流。6I/OI/O流流 n在在C+C+程序中,數(shù)據(jù)可以從鍵盤流入到程程序中,數(shù)據(jù)可以從鍵盤流入到程序,也可以從程序流向屏幕或磁盤文件。序,也可以從程序流向屏幕或磁盤文件。從流中獲取數(shù)據(jù)的操作稱為從流中獲取數(shù)據(jù)的操作稱為提取操作提取操作,向流中添加數(shù)據(jù)的操作稱為向流
4、中添加數(shù)據(jù)的操作稱為插入操作插入操作。n數(shù)據(jù)的輸入數(shù)據(jù)的輸入/ /輸出就是通過(guò)輸出就是通過(guò)I/OI/O流來(lái)實(shí)現(xiàn)流來(lái)實(shí)現(xiàn)的。的。7編譯系統(tǒng)已經(jīng)以編譯系統(tǒng)已經(jīng)以運(yùn)算符或函數(shù)運(yùn)算符或函數(shù)的形式做好了對(duì)標(biāo)的形式做好了對(duì)標(biāo)準(zhǔn)外設(shè)準(zhǔn)外設(shè)(鍵盤、屏幕、打印機(jī)、(鍵盤、屏幕、打印機(jī)、文件文件)的接口,的接口,使用時(shí)只需按照要求的格式調(diào)用即可。使用時(shí)只需按照要求的格式調(diào)用即可。cinx; coutx;內(nèi)內(nèi)存存鍵盤鍵盤文件文件光筆光筆.輸入流輸入流顯示器顯示器文件文件打印機(jī)打印機(jī).輸出流輸出流8I/OI/O流類庫(kù)的層次結(jié)構(gòu)流類庫(kù)的層次結(jié)構(gòu) nC+C+編譯系統(tǒng)提供的編譯系統(tǒng)提供的I/OI/O流類庫(kù)含有兩個(gè)流類庫(kù)含有
5、兩個(gè)平行基類:平行基類:nstreambufstreambufniosiosniosios類有類有4 4個(gè)直接派生類個(gè)直接派生類: :n輸入流類輸入流類istreamistreamn輸出流類輸出流類ostreamostreamn文件流類文件流類fstreambasefstreambasen串流類串流類strstreambasestrstreambase9I/OI/O流類庫(kù)的頭文件流類庫(kù)的頭文件 niostream:iostream:I/OI/O流類庫(kù)的最主要的頭文件,它包流類庫(kù)的最主要的頭文件,它包括操作所有括操作所有I/OI/O所需的基本信息,還包括所需的基本信息,還包括cincin、cou
6、tcout、cerrcerr和和clogclog共共4 4個(gè)對(duì)象。個(gè)對(duì)象。niomanip:iomanip:包含帶參數(shù)的流操縱算子的有關(guān)信息。包含帶參數(shù)的流操縱算子的有關(guān)信息。nfstream:fstream:包含對(duì)文件包含對(duì)文件I/OI/O操作的有關(guān)信息。操作的有關(guān)信息。nstrstream:strstream:包含對(duì)內(nèi)存格式化包含對(duì)內(nèi)存格式化I/OI/O操作的有關(guān)操作的有關(guān)信息。信息。nstdiostream:stdiostream:包含混合使用包含混合使用C C和和C+C+風(fēng)格的風(fēng)格的I/OI/O操作的有關(guān)信息。操作的有關(guān)信息。10int main() float a,b,c,disc;
7、 coutabc; if(a=0) cerr“a is equal to zero,error!”endl; else if(disc=b*b-4*a*c)0) cerr “disc=b*b-4*a*c0”endl; else cout“x1=”(-b+sqrt(disc)/(2*a)endl; cout“x2=”(-b-sqrt(disc)/(2*a)endl;return 0;1: please input a,b,c: 0 2 3 a is equal to zero,error!2:please input a,b,c: 5 2 3 disc=b*b-4*a*c03:please in
8、put a,b,c: 1 2.5 1.5 x1=-1 x2=-1.511無(wú)格式輸入無(wú)格式輸入/ /輸出輸出 n無(wú)格式輸入無(wú)格式輸入/ /輸出就是按系統(tǒng)預(yù)定義的格式進(jìn)輸出就是按系統(tǒng)預(yù)定義的格式進(jìn)行的輸入行的輸入/ /輸出。輸出。n按默認(rèn)約定,每個(gè)按默認(rèn)約定,每個(gè)C+C+程序都能使用標(biāo)準(zhǔn)程序都能使用標(biāo)準(zhǔn)I/OI/O流,如標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出。流,如標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出。ncincin用來(lái)處理標(biāo)準(zhǔn)輸入,即鍵盤輸入;用來(lái)處理標(biāo)準(zhǔn)輸入,即鍵盤輸入;coutcout用來(lái)處用來(lái)處理標(biāo)準(zhǔn)輸出,即屏幕輸出。它們被定義在理標(biāo)準(zhǔn)輸出,即屏幕輸出。它們被定義在iostreamiostream頭文件中。頭文件中。n在使用在
9、使用coutcout和和cincin前,要用編譯預(yù)處理命令將所使前,要用編譯預(yù)處理命令將所使用的頭文件包含到源程序中,其格式如下:用的頭文件包含到源程序中,其格式如下:#include #include 12無(wú)格式輸出無(wú)格式輸出 n“”“”是預(yù)定義的插入運(yùn)算符,作用在流類對(duì)是預(yù)定義的插入運(yùn)算符,作用在流類對(duì)象象coutcout上,實(shí)現(xiàn)默認(rèn)格式的屏幕輸出。使用上,實(shí)現(xiàn)默認(rèn)格式的屏幕輸出。使用coutcout輸出表達(dá)式值到屏幕上的格式如下:輸出表達(dá)式值到屏幕上的格式如下:coutEcoutE1 1EE2 2EEm m; ; 其中,其中,E E1 1、E E2 2、E Em m為均為表達(dá)式。為均為表
10、達(dá)式。n用用“coutcout”是預(yù)定義的提取運(yùn)算符,作用在流類對(duì)象是預(yù)定義的提取運(yùn)算符,作用在流類對(duì)象cincin上,實(shí)現(xiàn)默認(rèn)格式的鍵盤輸入。使用上,實(shí)現(xiàn)默認(rèn)格式的鍵盤輸入。使用cincin將數(shù)將數(shù)據(jù)輸入到變量的格式如下:據(jù)輸入到變量的格式如下:cinV1V2Vn; 其中,其中,V V1 1、V V2 2、V Vn n都是變量。功能是暫停執(zhí)行都是變量。功能是暫停執(zhí)行程序,等待用戶從鍵盤輸入數(shù)據(jù),各數(shù)據(jù)間用空程序,等待用戶從鍵盤輸入數(shù)據(jù),各數(shù)據(jù)間用空格或格或TabTab鍵分隔,輸入數(shù)據(jù)類型要與接受變量類型鍵分隔,輸入數(shù)據(jù)類型要與接受變量類型一致,輸完后,按回車鍵結(jié)束。一致,輸完后,按回車鍵結(jié)束
11、。15無(wú)格式輸入無(wú)格式輸入 ncin是是istream流類的對(duì)象,它在流類的對(duì)象,它在iostream頭文件中作為全局對(duì)象定義,頭文件中作為全局對(duì)象定義,其格式如下:其格式如下: istream cin(stdin); 標(biāo)準(zhǔn)輸入設(shè)備標(biāo)準(zhǔn)輸入設(shè)備名(鍵盤)名(鍵盤)16輸入輸出的格式控制輸入輸出的格式控制 nC+C+提供了兩種格式化輸入提供了兩種格式化輸入/ /輸出方式輸出方式: :n一種是用流對(duì)象的有關(guān)成員函數(shù)進(jìn)行格一種是用流對(duì)象的有關(guān)成員函數(shù)進(jìn)行格式化輸入輸出式化輸入輸出n另一種是用專門的控制符進(jìn)行格式化輸另一種是用專門的控制符進(jìn)行格式化輸入輸出入輸出17 用流對(duì)象的成員函數(shù)格式化用流對(duì)象的
12、成員函數(shù)格式化 n流成員函數(shù)主要是通過(guò)對(duì)狀態(tài)標(biāo)志、輸出寬度、流成員函數(shù)主要是通過(guò)對(duì)狀態(tài)標(biāo)志、輸出寬度、填充字符以及輸出精度的操作來(lái)完成輸入填充字符以及輸出精度的操作來(lái)完成輸入/ /輸輸出格式化。出格式化。n輸入輸入/ /輸出的格式由各種狀態(tài)標(biāo)志來(lái)確定,在輸出的格式由各種狀態(tài)標(biāo)志來(lái)確定,在iosios類中定義為枚舉量。類中定義為枚舉量。n枚舉量定義在枚舉量定義在iosios類中,因此引用時(shí)必須包含類中,因此引用時(shí)必須包含ios:ios:前綴。使用時(shí)應(yīng)該全部用符號(hào)名,絕不前綴。使用時(shí)應(yīng)該全部用符號(hào)名,絕不要用數(shù)值。要用數(shù)值。18用流對(duì)象的成員函數(shù)對(duì)狀態(tài)標(biāo)志進(jìn)行操作用流對(duì)象的成員函數(shù)對(duì)狀態(tài)標(biāo)志進(jìn)行操
13、作 niosios類有類有3 3個(gè)成員函數(shù)可以對(duì)狀態(tài)標(biāo)志進(jìn)個(gè)成員函數(shù)可以對(duì)狀態(tài)標(biāo)志進(jìn)行操作,并且定義了一個(gè)行操作,并且定義了一個(gè)longlong型數(shù)據(jù)成型數(shù)據(jù)成員記錄當(dāng)前狀態(tài)標(biāo)志。這些狀態(tài)標(biāo)志可員記錄當(dāng)前狀態(tài)標(biāo)志。這些狀態(tài)標(biāo)志可用位或運(yùn)算符用位或運(yùn)算符“| |”進(jìn)行組合。進(jìn)行組合。 n用用setfsetf函數(shù)設(shè)置狀態(tài)標(biāo)志,函數(shù)設(shè)置狀態(tài)標(biāo)志, 其一般格式其一般格式如下:如下:long ios:long ios:setfsetf(long flags)(long flags)19用流對(duì)象的成員函數(shù)對(duì)狀態(tài)標(biāo)志進(jìn)行操作用流對(duì)象的成員函數(shù)對(duì)狀態(tài)標(biāo)志進(jìn)行操作n清除狀態(tài)標(biāo)志清除狀態(tài)標(biāo)志用用unsetfuns
14、etf函數(shù)清除狀態(tài)標(biāo)志,其一般格式函數(shù)清除狀態(tài)標(biāo)志,其一般格式如下:如下:long ios:long ios:unsetfunsetf(long flags)(long flags)20用流對(duì)象的成員函數(shù)對(duì)狀態(tài)標(biāo)志進(jìn)行操作用流對(duì)象的成員函數(shù)對(duì)狀態(tài)標(biāo)志進(jìn)行操作n用函數(shù)用函數(shù)flagsflags取狀態(tài)標(biāo)志有兩種形式,其取狀態(tài)標(biāo)志有兩種形式,其格式分別如下:格式分別如下:long ios:flags() /返回與流相關(guān)的當(dāng)前狀態(tài)標(biāo)志值返回與流相關(guān)的當(dāng)前狀態(tài)標(biāo)志值long ios:flags(long flag)/將流的狀態(tài)標(biāo)志值設(shè)置為將流的狀態(tài)標(biāo)志值設(shè)置為flagflag,并返回,并返回設(shè)置前的狀態(tài)
15、標(biāo)志值。設(shè)置前的狀態(tài)標(biāo)志值。21用流對(duì)象的成員函數(shù)對(duì)狀態(tài)標(biāo)志進(jìn)行操作用流對(duì)象的成員函數(shù)對(duì)狀態(tài)標(biāo)志進(jìn)行操作n以上三組函數(shù)必須用流類對(duì)象(以上三組函數(shù)必須用流類對(duì)象(cincin或或coutcout)來(lái)調(diào)用,其格式如下:)來(lái)調(diào)用,其格式如下: .(ios:(ios:) cout.setf(ios:showpos); cout.setf(ios:scientific); cout.setf(ios:showpos| ios:scientific);22000000100000000100110010001000010010001000100001001000100010000100001000000
16、00000void showflags(long f);int main() long f; f=cout.flags(); /取當(dāng)前狀態(tài)標(biāo)志取當(dāng)前狀態(tài)標(biāo)志 showflags(f); /顯示狀態(tài)值顯示狀態(tài)值 cout.setf(ios:showpos|ios:scientific|ios:fixed); /追加狀態(tài)標(biāo)志追加狀態(tài)標(biāo)志 f=cout.flags(); /取當(dāng)前狀態(tài)標(biāo)志取當(dāng)前狀態(tài)標(biāo)志 showflags(f); /顯示狀態(tài)值顯示狀態(tài)值 cout.unsetf(ios:scientific); /從狀態(tài)標(biāo)志中去掉從狀態(tài)標(biāo)志中去掉 scientific f=cout.flags();
17、/取當(dāng)前狀態(tài)標(biāo)志取當(dāng)前狀態(tài)標(biāo)志 showflags(f); /顯示狀態(tài)值顯示狀態(tài)值 f=cout.flags(ios:hex); /重新設(shè)置狀態(tài)標(biāo)志重新設(shè)置狀態(tài)標(biāo)志 showflags(f); f=cout.flags(); /取當(dāng)前狀態(tài)標(biāo)志取當(dāng)前狀態(tài)標(biāo)志 showflags(f); return 0;void showflags(long f) long i; for(i=0 x8000;i;i=i1) /用右移方式使用右移方式使i中的值為中的值為1的位不斷右移的位不斷右移 if(i&f)cout1; /判斷判斷f中的某一位是否為中的某一位是否為1 else cout0; coutendl;
18、【例例】示例對(duì)狀態(tài)標(biāo)志的操作。示例對(duì)狀態(tài)標(biāo)志的操作。23用流對(duì)象的成員函數(shù)設(shè)置輸出寬度用流對(duì)象的成員函數(shù)設(shè)置輸出寬度n設(shè)置輸出寬度函數(shù)有兩種形式,其格式分別設(shè)置輸出寬度函數(shù)有兩種形式,其格式分別如下:如下: int ios:width(int len) int ios:width()n第一種形式是設(shè)置輸出寬度,并返回原來(lái)的第一種形式是設(shè)置輸出寬度,并返回原來(lái)的輸出寬度;第二種形式是返回當(dāng)前輸出寬度,輸出寬度;第二種形式是返回當(dāng)前輸出寬度,默認(rèn)輸出寬度為默認(rèn)輸出寬度為0 0。n只對(duì)其后的第一個(gè)輸出項(xiàng)有效。只對(duì)其后的第一個(gè)輸出項(xiàng)有效。24設(shè)置填充字符設(shè)置填充字符n填充字符的作用是當(dāng)輸出值不滿輸出寬
19、度時(shí)填充字符的作用是當(dāng)輸出值不滿輸出寬度時(shí)用填充字符來(lái)填充,默認(rèn)填充字符為空格。用填充字符來(lái)填充,默認(rèn)填充字符為空格。它與它與width()width()函數(shù)配合使用,否則沒(méi)有意義。函數(shù)配合使用,否則沒(méi)有意義。n設(shè)置填充字符函數(shù)有兩種形式,其格式分別設(shè)置填充字符函數(shù)有兩種形式,其格式分別如下:如下: char ios:fill(char ch) char ios:fill()n第一種形式是重新設(shè)置填充字符,并返回設(shè)第一種形式是重新設(shè)置填充字符,并返回設(shè)置前的填充字符;第二種形式是返回當(dāng)前的置前的填充字符;第二種形式是返回當(dāng)前的填充字符填充字符。25設(shè)置輸出精度設(shè)置輸出精度 n設(shè)置浮點(diǎn)數(shù)輸出精度
20、有兩種形式,其設(shè)置浮點(diǎn)數(shù)輸出精度有兩種形式,其格式分別如下:格式分別如下: int ios:precision(int p) int ios:precision()n第一種形式是重新設(shè)置輸出精度,并第一種形式是重新設(shè)置輸出精度,并返回設(shè)置前的輸出精度;第二種形式返回設(shè)置前的輸出精度;第二種形式是返回當(dāng)前的輸出精度。默認(rèn)輸出精是返回當(dāng)前的輸出精度。默認(rèn)輸出精度為度為6 。26n以上三組函數(shù)必須用流類對(duì)象(以上三組函數(shù)必須用流類對(duì)象(cincin或或coutcout)來(lái)調(diào)用。)來(lái)調(diào)用。27width:0 8(new width)filling word is: (ASCII code32)*(42
21、)(new filling word)precision:6123.45679(example)8(new precision)int main()int i;i=cout.width();coutwidth:iendl;cout.width(8);coutcout.width()(new width)endl;char c;c=cout.fill();coutfilling word is:c(ASCII code(int)c)endl;cout.fill(*);coutcout.fill()(int)cout.fill()(new filling word)endl;int j;j=cou
22、t.precision();coutprecision:jendl;cout.precision(8);cout123.456789(example)endl;coutcout.precision()(new precision)”或插入運(yùn)算符或插入運(yùn)算符“”后面來(lái)后面來(lái)設(shè)定輸入設(shè)定輸入/ /輸出格式輸出格式,即在讀寫對(duì)象之間,即在讀寫對(duì)象之間插入一個(gè)修改狀態(tài)的操作。插入一個(gè)修改狀態(tài)的操作。 29n設(shè)置輸入設(shè)置輸入/ /輸出寬度輸出寬度setw(int)setw(int)n用整型參數(shù)來(lái)制定輸入用整型參數(shù)來(lái)制定輸入/ /輸出域的寬度。使用輸出域的寬度。使用時(shí)只對(duì)其后一項(xiàng)輸入時(shí)只對(duì)其后一項(xiàng)輸入/
23、/輸出有效。輸出有效。n當(dāng)用于輸出時(shí),若實(shí)際寬度小于設(shè)置寬度時(shí),當(dāng)用于輸出時(shí),若實(shí)際寬度小于設(shè)置寬度時(shí),數(shù)據(jù)向右對(duì)齊,反之則按數(shù)據(jù)的實(shí)際寬度輸出。數(shù)據(jù)向右對(duì)齊,反之則按數(shù)據(jù)的實(shí)際寬度輸出。n當(dāng)用于輸入時(shí),若輸入的數(shù)據(jù)寬度超過(guò)設(shè)置寬當(dāng)用于輸入時(shí),若輸入的數(shù)據(jù)寬度超過(guò)設(shè)置寬度時(shí),超出的數(shù)據(jù)部分被截?cái)喽蛔鳛橄乱豁?xiàng)度時(shí),超出的數(shù)據(jù)部分被截?cái)喽蛔鳛橄乱豁?xiàng)輸入內(nèi)容。輸入內(nèi)容。 3012345 678123456781234512345i:10#include #include using namespace std;int main() char *p=12345,*q=678; char f4,g4
24、; /最后一位為最后一位為0 int i=10; coutpsetw(6)qsetw(4)pqsetw(4)fg; /設(shè)置輸入寬度設(shè)置輸入寬度 coutfendlgendli:iendl; return 0;【例例】用控制符示例設(shè)置輸入用控制符示例設(shè)置輸入/輸出寬度輸出寬度31n設(shè)置輸出填充字符設(shè)置輸出填充字符setfill(char)setfill(char)n與與ios:fillios:fill相同,常與相同,常與setw(int)setw(int)聯(lián)合使用,從而向聯(lián)合使用,從而向不滿設(shè)置輸出寬度的空間填入指定的字符,不設(shè)置則不滿設(shè)置輸出寬度的空間填入指定的字符,不設(shè)置則填空格。填空格。n
25、設(shè)置后直至下一次設(shè)置前一直有效。設(shè)置后直至下一次設(shè)置前一直有效。n參數(shù)可以是字符常量或字符變量。參數(shù)可以是字符常量或字符變量。 n設(shè)置輸出精度設(shè)置輸出精度setprecision(int)setprecision(int)n指明輸出實(shí)數(shù)的有效位數(shù)。指明輸出實(shí)數(shù)的有效位數(shù)。n參數(shù)為參數(shù)為0 0時(shí),按默認(rèn)有效位數(shù)時(shí),按默認(rèn)有效位數(shù)6 6輸出。輸出。n在以在以fixedfixed形式和形式和scientificscientific形式輸出時(shí)參數(shù)為小數(shù)位形式輸出時(shí)參數(shù)為小數(shù)位數(shù)。數(shù)。 32nsetiosflags(ios:fixed)用定點(diǎn)方式表示實(shí)數(shù)。用定點(diǎn)方式表示實(shí)數(shù)。nsetiosflags(i
26、os:scientific)用科學(xué)記數(shù)法方式表用科學(xué)記數(shù)法方式表示實(shí)數(shù)。示實(shí)數(shù)。n如果如果setprecision(n)setprecision(n)與與setiosflags(ios:fixed)合用,合用,可以控制小數(shù)點(diǎn)右邊的數(shù)字個(gè)數(shù)。可以控制小數(shù)點(diǎn)右邊的數(shù)字個(gè)數(shù)。n如果如果setprecision(n)setprecision(n)與與setiosflags(ios:scientific)合合用,可以控制科學(xué)記數(shù)法中尾數(shù)的小數(shù)位數(shù)。用,可以控制科學(xué)記數(shù)法中尾數(shù)的小數(shù)位數(shù)。 nsetiosflags(ios:left)輸出數(shù)據(jù)左對(duì)齊輸出數(shù)據(jù)左對(duì)齊nsetiosflags(ios:right
27、)輸出數(shù)據(jù)右對(duì)齊輸出數(shù)據(jù)右對(duì)齊33nsetiosflags(ios:uppercase)大寫表示大寫表示nsetiosflags(ios:showpos)輸出正數(shù)時(shí)給出輸出正數(shù)時(shí)給出“+”號(hào)號(hào)nsetiosflags(ios:skipws)忽略前導(dǎo)空格忽略前導(dǎo)空格nresetiosflags()終止已設(shè)置的輸出格式狀終止已設(shè)置的輸出格式狀態(tài),在括號(hào)中應(yīng)指定內(nèi)容態(tài),在括號(hào)中應(yīng)指定內(nèi)容34Zoot 1.23Jimmy 35.36Al 653.7Stan 4358.24#include #include using namespace std; int main() double values=1.
28、23,35.36,653.7,4358.24;char *names=Zoot,Jimmy,Al,Stan;for(int i=0;i4;i+) coutsetiosflags(ios:left) /設(shè)置左對(duì)齊設(shè)置左對(duì)齊 setw(6)namesi resetiosflags(ios:left) /取消左對(duì)齊取消左對(duì)齊 setw(10)valuesi endl; return 0;【例例】設(shè)置對(duì)齊方式和輸出寬度示例設(shè)置對(duì)齊方式和輸出寬度示例353.142863.143.14285714 #include #include using namespace std;int main() doubl
29、e f=22.0/7; /在用浮點(diǎn)形式表示的輸出中,在用浮點(diǎn)形式表示的輸出中,setprecision(n)表示實(shí)數(shù)的有效位數(shù)表示實(shí)數(shù)的有效位數(shù) coutfendl; /默認(rèn)有效位數(shù)為默認(rèn)有效位數(shù)為6 coutsetprecision(3)fendl; /設(shè)置有效位數(shù)為設(shè)置有效位數(shù)為3/在用定點(diǎn)形式表示的輸出中,在用定點(diǎn)形式表示的輸出中,setprecision(n)表示實(shí)數(shù)的小數(shù)位數(shù)表示實(shí)數(shù)的小數(shù)位數(shù) coutsetiosflags(ios:fixed); coutsetprecision(8)fendl; /小數(shù)位數(shù)為小數(shù)位數(shù)為8 return 0;【例例】分別用浮點(diǎn)、定點(diǎn)的方式表示一個(gè)實(shí)
30、數(shù)分別用浮點(diǎn)、定點(diǎn)的方式表示一個(gè)實(shí)數(shù)coutsetprecision(8);coutsetiosflags(ios:scientific)fendl; /尾數(shù)小數(shù)位數(shù)為83.14285714e+000 36n設(shè)置輸入設(shè)置輸入/ /輸出整型數(shù)數(shù)制輸出整型數(shù)數(shù)制decdec、hexhex和和octoct。n控制換行的控制符控制換行的控制符endlendl n代表輸出單字符代表輸出單字符“00”的控制符的控制符endsends37用戶自定義控制符函數(shù)用戶自定義控制符函數(shù)n建立輸出控制符函數(shù)的格式如下:建立輸出控制符函數(shù)的格式如下: ostream& manip_name(ostream& strea
31、m) return stream;控制符函數(shù)名控制符函數(shù)名38#include #include using namespace std;ostream& setup(ostream& stream) stream.setf(ios:left); streamsetw(10)setfill($); return stream;int main() cout10 setup10endl; return 0;【例例】 示例用戶自定義輸出控制符函數(shù)示例用戶自定義輸出控制符函數(shù)10 10$ 39用戶自定義控制符函數(shù)用戶自定義控制符函數(shù)n建立輸入控制符函數(shù)的格式如下:建立輸入控制符函數(shù)的格式如下: is
32、tream& manip_name(istream& stream) return stream;操作符函數(shù)名操作符函數(shù)名40#include #include using namespace std;istream& prompt(istream& stream) cinhex; coutprompti; coutixcoutxoutfilex程序?qū)ξ谋疚募牟僮髋c對(duì)鍵盤、顯示器的操作程序?qū)ξ谋疚募牟僮髋c對(duì)鍵盤、顯示器的操作比較:比較:在涉及在涉及文本文件文本文件的操作時(shí),將輸入文件看成鍵盤,的操作時(shí),將輸入文件看成鍵盤,將輸出文件看成顯示器,格式不變。將輸出文件看成顯示器,格式不變。只需
33、在程序中只需在程序中增加打開(kāi)與關(guān)閉文件的語(yǔ)句。增加打開(kāi)與關(guān)閉文件的語(yǔ)句。45C+C+中進(jìn)行文件操作的一般步驟中進(jìn)行文件操作的一般步驟 n為文件為文件定義定義一個(gè)流類對(duì)象;一個(gè)流類對(duì)象;n使用使用open()open()函數(shù)建立(或打開(kāi))文件。如果文函數(shù)建立(或打開(kāi))文件。如果文件不存在,則建立該文件;如果磁盤上已存在件不存在,則建立該文件;如果磁盤上已存在該文件,則打開(kāi)該文件;該文件,則打開(kāi)該文件;n進(jìn)行進(jìn)行讀寫讀寫操作。在建立(或打開(kāi))的文件上執(zhí)操作。在建立(或打開(kāi))的文件上執(zhí)行所要求的輸入行所要求的輸入/ /輸出操作。一般來(lái)說(shuō),在內(nèi)輸出操作。一般來(lái)說(shuō),在內(nèi)存與外設(shè)的數(shù)據(jù)傳輸中,由內(nèi)存到外設(shè)
34、稱為輸存與外設(shè)的數(shù)據(jù)傳輸中,由內(nèi)存到外設(shè)稱為輸出或?qū)?,反之則稱為輸入或讀;出或?qū)?,反之則稱為輸入或讀;n使用使用close()close()函數(shù)關(guān)閉文件。當(dāng)完成操作后,函數(shù)關(guān)閉文件。當(dāng)完成操作后,應(yīng)把打開(kāi)的文件關(guān)閉,避免誤操作。應(yīng)把打開(kāi)的文件關(guān)閉,避免誤操作。46n在在C+C+中,打開(kāi)一個(gè)文件就是將這個(gè)文件與一個(gè)中,打開(kāi)一個(gè)文件就是將這個(gè)文件與一個(gè)流建立關(guān)聯(lián);關(guān)閉一個(gè)文件就是取消這種關(guān)聯(lián)。流建立關(guān)聯(lián);關(guān)閉一個(gè)文件就是取消這種關(guān)聯(lián)。nopen()函數(shù)的原型在函數(shù)的原型在fstream中定義。其原型中定義。其原型為:為:void open(char *filename,int mod,int ac
35、cess);n其中第一個(gè)參數(shù)是用來(lái)傳遞文件名;第二個(gè)參數(shù)其中第一個(gè)參數(shù)是用來(lái)傳遞文件名;第二個(gè)參數(shù)的值決定文件的使用方式;第三個(gè)參數(shù)的值決定的值決定文件的使用方式;第三個(gè)參數(shù)的值決定文件的訪問(wèn)方式。文件的訪問(wèn)方式。n對(duì)于對(duì)于ifstream流類,流類,mod的值為的值為ios:in;對(duì)于對(duì)于ofstream流類,流類,mod的值為的值為ios:out47n打開(kāi)文件打開(kāi)文件n先建立流對(duì)象,然后調(diào)用函數(shù)先建立流對(duì)象,然后調(diào)用函數(shù)open連接外部文件連接外部文件 流類流類 對(duì)象名對(duì)象名; 對(duì)象名對(duì)象名.open(文件名文件名,方式方式);n調(diào)用流類帶參數(shù)的構(gòu)造函數(shù),建立流對(duì)象的同時(shí)連調(diào)用流類帶參數(shù)的
36、構(gòu)造函數(shù),建立流對(duì)象的同時(shí)連接外部文件接外部文件 流類流類 對(duì)象名對(duì)象名(文件名文件名,方式方式); 其中,其中,“流類流類” 為為ifstream、ofstream或或fstream。文件的打開(kāi)與關(guān)閉48n關(guān)閉文件關(guān)閉文件n使用使用close()成員函數(shù)進(jìn)行關(guān)閉:成員函數(shù)進(jìn)行關(guān)閉: 流對(duì)象名流對(duì)象名. close() 其中,流對(duì)象名是待關(guān)閉的文件流的對(duì)象其中,流對(duì)象名是待關(guān)閉的文件流的對(duì)象名。名。文件的打開(kāi)與關(guān)閉49120,310.85#include #include using namespace std;int main()ofstream ostrm; /定義流類對(duì)象定義流類對(duì)象os
37、trm.open(f1.dat); /打開(kāi)文件打開(kāi)文件ostrm120endl; /寫操作寫操作ostrm310.85nd; /讀操作讀操作coutn,dendl;istrm.close(); /關(guān)閉文件關(guān)閉文件 return 0;【例例】 示例文件的輸入示例文件的輸入/輸出操作。輸出操作。50n文本文件的讀寫:文本文件用默認(rèn)方式打開(kāi)。文本文件的讀寫:文本文件用默認(rèn)方式打開(kāi)。文件的讀寫#include #include using namespace std;int main() char s180,s28; fstream outfile; cins1; outfile.open(exam.
38、txt,ios:out);if(!outfile) coutexam.txt cant openendl; abort();outfiles2;couts2endl;outfile.close();return 0;51n二進(jìn)制文件的讀寫二進(jìn)制文件的讀寫n若在文件的打開(kāi)方式中沒(méi)有特別說(shuō)明,打開(kāi)的文件均為若在文件的打開(kāi)方式中沒(méi)有特別說(shuō)明,打開(kāi)的文件均為ASCIIASCII碼文件,碼文件,若要打開(kāi)二進(jìn)制文件,則要特別說(shuō)明并用特定的讀寫若要打開(kāi)二進(jìn)制文件,則要特別說(shuō)明并用特定的讀寫函數(shù)函數(shù)。n二進(jìn)制文件用二進(jìn)制文件用binarybinary方式打開(kāi),讀寫方式完全由程序控制。方式打開(kāi),讀寫方式完全由程
39、序控制。fstream infile,outfile;infile.open(“inf1.dat”, ios:in| ios:binary);outfile.open(“outf1.dat”, ios:out| ios:binary); 文件名文件名 輸入方式打開(kāi)輸入方式打開(kāi) 二進(jìn)制文件二進(jìn)制文件 文件名文件名 輸出方式打開(kāi)輸出方式打開(kāi) 二進(jìn)制文件二進(jìn)制文件文件的讀寫52輸入函數(shù):輸入函數(shù):infile.read( char *, int )輸入文件輸入文件對(duì)象名對(duì)象名 數(shù)據(jù)進(jìn)入的內(nèi)存地址數(shù)據(jù)進(jìn)入的內(nèi)存地址 一次讀入的字節(jié)數(shù)一次讀入的字節(jié)數(shù)int a10;infile.read(char *)
40、a, 10*sizeof(int);/從文件中輸入十個(gè)整型數(shù)到從文件中輸入十個(gè)整型數(shù)到aint i;infile.read(char *)&i, sizeof(int);/從文件中輸入一個(gè)整型數(shù)到從文件中輸入一個(gè)整型數(shù)到i由于二進(jìn)制文件中的數(shù)據(jù)不是由于二進(jìn)制文件中的數(shù)據(jù)不是ASCIIASCII碼,故不能直接對(duì)碼,故不能直接對(duì)其讀寫,其讀寫,必須要通過(guò)特定的函數(shù)予以轉(zhuǎn)換。必須要通過(guò)特定的函數(shù)予以轉(zhuǎn)換。文件文件內(nèi)存內(nèi)存讀入讀入地址要強(qiáng)制轉(zhuǎn)換成字符型地址要強(qiáng)制轉(zhuǎn)換成字符型53輸出文件輸出文件對(duì)象名對(duì)象名 要輸出的數(shù)據(jù)在內(nèi)存中的地址要輸出的數(shù)據(jù)在內(nèi)存中的地址 一次輸出的字節(jié)數(shù)一次輸出的字節(jié)數(shù)int a
41、10=0,1,2,3,4,5,6,7,8,9;outfile.write(char *)a, 10*sizeof(int);/向文件輸出一個(gè)整型數(shù)組向文件輸出一個(gè)整型數(shù)組aint i=4;outfile.write(char *)&i, sizeof(int);/向文件輸出一個(gè)整型數(shù)向文件輸出一個(gè)整型數(shù)i輸出函數(shù):輸出函數(shù):outfile.write( char *, int )文件文件內(nèi)存內(nèi)存寫出寫出地址要強(qiáng)制轉(zhuǎn)換成字符型地址要強(qiáng)制轉(zhuǎn)換成字符型54【例例】 二進(jìn)制文件的讀寫二進(jìn)制文件的讀寫struct personchar name20; double height; unsigned sh
42、ort age;people3= wang,1.65,25, zhang,1.78,24, li,1.85,21;int main() fstream infile,outfile; outfile.open(exam.dat,ios:out|ios:binary); if(!outfile) coutexam.dat cant openendl; abort(); for(int i=0;i3;i+) outfile.write(char*)&peoplei,sizeof(peoplei); outfile.close(); infile.open(exam.dat,ios:in|ios:b
43、inary); if(!infile) coutexam.dat cant openendl; abort(); for(int j=0;j3;j+) infile.read(char*)&peoplej,sizeof(peoplej); tpeoplej.heighttpeoplej.ageendl; infile.close(); return 0;55n文件的隨機(jī)讀寫:文件的隨機(jī)讀寫:文件打開(kāi)以后,系統(tǒng)自動(dòng)生成兩文件打開(kāi)以后,系統(tǒng)自動(dòng)生成兩個(gè)隱含的流指針個(gè)隱含的流指針:讀指針和寫指針。在輸入文件流類讀指針和寫指針。在輸入文件流類中,有關(guān)讀指針的函數(shù)如下:中
44、,有關(guān)讀指針的函數(shù)如下:n移動(dòng)讀指針移動(dòng)讀指針函數(shù)函數(shù)nistream& istream:seekg(streampos pos); 該函數(shù)的功能是將輸入文件的指針移動(dòng)到該函數(shù)的功能是將輸入文件的指針移動(dòng)到pospos指指定的位置中。定的位置中。文件的讀寫56nistream& istream:seekg(streamoff offset,seek_dir origin);其中,其中,origin的類型的類型seek_dir是一個(gè)枚舉類型,有以是一個(gè)枚舉類型,有以下三種取值:下三種取值:ios:beg 表示指針的起始位置為文件頭表示指針的起始位置為文件頭ios:cur 表示指針的起始位置為當(dāng)前
45、位置表示指針的起始位置為當(dāng)前位置ios:end 表示指針的起始位置為文件尾表示指針的起始位置為文件尾該函數(shù)的功能是從該函數(shù)的功能是從origin指定的開(kāi)始位置起,將文件指定的開(kāi)始位置起,將文件指針移動(dòng)指針移動(dòng)offset個(gè)字節(jié)數(shù)。個(gè)字節(jié)數(shù)。文件的讀寫57n返回讀指針當(dāng)前指向的位置值返回讀指針當(dāng)前指向的位置值streampos istream:tellg( );該函數(shù)的功能是確定文件指針的當(dāng)前位置。該函數(shù)的功能是確定文件指針的當(dāng)前位置。文件的讀寫58n相應(yīng)地,相應(yīng)地,ostream類提供有關(guān)寫指針的函數(shù)如下:類提供有關(guān)寫指針的函數(shù)如下:n移動(dòng)寫指針函數(shù)移動(dòng)寫指針函數(shù)nostream& ostream:seekp(streampos pos);nostream& ostream:seekp(streamoff offset,seek_dir origin);n返回寫指針當(dāng)前指向的位置值返回寫指針當(dāng)前指向的位置值nstreampos ostream:tellp( ); 函數(shù)參數(shù)的意義與讀指針函數(shù)一樣。函數(shù)參數(shù)的意義與讀指針函數(shù)一樣。文件的讀寫5
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 芙蓉公司產(chǎn)品培訓(xùn)
- 藥廠生產(chǎn)部經(jīng)理年終總結(jié)
- 宿舍安全使用功率過(guò)大問(wèn)題探討
- 三年級(jí)英語(yǔ)下冊(cè)-教案-教學(xué)設(shè)計(jì) Unit 5 Seasons and Life (季節(jié)和生活)
- 2025年護(hù)士執(zhí)業(yè)資格考試題庫(kù)-婦產(chǎn)科護(hù)理學(xué)專項(xiàng)案例解析試題
- 2023-2024學(xué)年上海市徐匯區(qū)八年級(jí)語(yǔ)文下學(xué)期期末試卷附答案解析
- 2025年小學(xué)英語(yǔ)畢業(yè)考試模擬卷(英語(yǔ)跨文化交際教學(xué)效果評(píng)估)
- 2025年消防應(yīng)急救援指揮培訓(xùn)考試題庫(kù):消防安全知識(shí)專項(xiàng)試題
- 2025年養(yǎng)老護(hù)理員專業(yè)知識(shí)測(cè)試卷:養(yǎng)老護(hù)理員老年心理學(xué)案例分析試題
- 管子彎90度角水平彎制作方法
- 建設(shè)項(xiàng)目安全生產(chǎn)三同時(shí)情況表
- 五年級(jí)上冊(cè)心理健康教育教案- 會(huì)學(xué)也會(huì)玩 全國(guó)通用
- 中國(guó)兒童肥胖診斷評(píng)估與管理專家共識(shí)
- 霧化吸入常見(jiàn)并發(fā)癥的預(yù)防與處理
- 顯微鏡的使用方法專題培訓(xùn)課件
- 民俗學(xué)概論 教學(xué)大綱
- 控制工程基礎(chǔ)教案第四章
- 盾構(gòu)機(jī)同步注漿及二次注漿施工技術(shù)總結(jié)
- 粱昆淼第四版數(shù)學(xué)物理方法第10章
- 采礦學(xué)之采礦方法
- 急診腦卒中病人分診流程圖4.8
評(píng)論
0/150
提交評(píng)論