




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第7章章 I/O流流面向對象程序設計-第7章2本章主要內容本章主要內容n流的概念流的概念 n非格式化輸入非格式化輸入/輸出輸出 n格式化輸入格式化輸入/輸出輸出n文件的輸入文件的輸入/輸出輸出面向對象程序設計-第7章3 在在C+中,將數據從一個對象到另一個對象中,將數據從一個對象到另一個對象的流動抽象為的流動抽象為“流流”。流動的方向不同,。流動的方向不同,構成輸入構成輸入/輸出流,即輸出流,即I/O流。流。 在在C+程序中,數據可以從鍵盤流入到程序,程序中,數據可以從鍵盤流入到程序,也可以從程序流向屏幕或磁盤文件。也可以從程序流向屏幕或磁盤文件。 從流中獲取數據的操作稱為從流中獲取數據的操
2、作稱為提取操作。提取操作。 向流中添加數據的操作稱為向流中添加數據的操作稱為插入操作插入操作。 數據的輸入數據的輸入/輸出就是通過輸出就是通過I/O流來實現的。流來實現的。面向對象程序設計-第7章4C+編譯系統提供的編譯系統提供的I/O流庫含有兩個平行流庫含有兩個平行基類:基類:streambuf和和ios,所有的流類都是由,所有的流類都是由它們派生出來的。它們派生出來的。ios類有類有4個直接派生類,即輸入流類個直接派生類,即輸入流類istream、輸出流類輸出流類ostream、文件流類、文件流類fstreambase、串流類串流類strstreambase,這,這4種流作為流庫中種流作為
3、流庫中的基本流類。的基本流類。 面向對象程序設計-第7章5標準標準I/O流預定義了流預定義了4個流類對象:個流類對象:cin,cout,cerr,clog。cin:istream流類的一個對象,處理標準輸入流類的一個對象,處理標準輸入cout,cerr,clog:ostream流類的對象。流類的對象。cout處理標準輸處理標準輸出,出,cerr和和clog處理標準出錯信息。處理標準出錯信息。不同在于不同在于:cerr的輸出不帶緩沖,因而發送給它的任何內容都的輸出不帶緩沖,因而發送給它的任何內容都立即輸出;立即輸出; clog的輸出帶緩沖的輸出帶緩沖,只有當緩沖區滿時才輸出,也可只有當緩沖區滿時
4、才輸出,也可以通過刷新流的方式強迫刷新緩沖區。以通過刷新流的方式強迫刷新緩沖區。面向對象程序設計-第7章6面向對象程序設計-第7章77.2非格式化輸入非格式化輸入/輸出輸出 非格式化輸入非格式化輸入/輸出就是按系統預定義的格式進行的輸出就是按系統預定義的格式進行的輸入輸入/輸出。輸出。按默認約定,每個按默認約定,每個C+程序都能使用標準程序都能使用標準I/O流,如流,如標準輸入、標準輸出。標準輸入、標準輸出。qcin用來處理標準輸入,即鍵盤輸入;用來處理標準輸入,即鍵盤輸入;qcout用來處理標準輸出,即屏幕輸出。它們被定用來處理標準輸出,即屏幕輸出。它們被定義在義在iostream.h頭文件
5、中。頭文件中。q在使用在使用cout和和cin前,要用編譯預處理命令將所前,要用編譯預處理命令將所使用的頭文件包含到源程序中,其格式如下:使用的頭文件包含到源程序中,其格式如下: #include iostream.h#include 面向對象程序設計-第7章8非格式化輸出非格式化輸出 “”是預定義的插入運算符,作用在流類對象是預定義的插入運算符,作用在流類對象cout上,上,實現默認格式的屏幕輸出。使用實現默認格式的屏幕輸出。使用cout輸出表達式值到輸出表達式值到屏幕上的格式如下:屏幕上的格式如下:coutE1E2”是預定義的提取運算符,作用在流類對象是預定義的提取運算符,作用在流類對象c
6、in上,實現默上,實現默認格式的鍵盤輸入。使用認格式的鍵盤輸入。使用cin將數據輸入到變量的格式如下:將數據輸入到變量的格式如下:cinV1V2Vn; 其中,其中,V1、V2、Vn都是變量都是變量。功能是暫停執行程序,等。功能是暫停執行程序,等待用戶從鍵盤輸入數據,各數據間用待用戶從鍵盤輸入數據,各數據間用空格或空格或Tab鍵分隔鍵分隔,輸入,輸入數據類型要與接受變量類型數據類型要與接受變量類型一致一致,輸完后,按回車鍵結束。,輸完后,按回車鍵結束。 cin是是istream流類的對象,它在流類的對象,它在iostream.h頭文件中作為全局頭文件中作為全局對象定義:對象定義:istream
7、cin(stdin); 其中,其中,stdin表示標準輸入設備名(鍵盤)。表示標準輸入設備名(鍵盤)。面向對象程序設計-第7章107.3 格式化輸入格式化輸入/輸出輸出 nC+提供了兩種進行輸入提供了兩種進行輸入/輸出格式化的方輸出格式化的方法:法:q一種是用一種是用ios類類成員函數成員函數進行格式化。進行格式化。q另一種是用專門的另一種是用專門的操作符函數操作符函數進行格式化。進行格式化。面向對象程序設計-第7章11 7.3.1用用ios類成員函數格式化類成員函數格式化 ios類成員函數主要是通過對類成員函數主要是通過對狀態標志、輸狀態標志、輸出寬度、填充字符以及輸出精度出寬度、填充字符以
8、及輸出精度的操作來的操作來完成輸入完成輸入/輸出格式化。輸出格式化。枚舉量定義在枚舉量定義在ios類中,因此引用時必須包類中,因此引用時必須包含含ios:前綴前綴。使用時應該全部用符號名,。使用時應該全部用符號名,絕不要用數值。絕不要用數值。面向對象程序設計-第7章121.用用ios成員函數對狀態標志進行操作成員函數對狀態標志進行操作 ios類有類有3個成員函數可以對狀態標志進行操作,并且定義了一個個成員函數可以對狀態標志進行操作,并且定義了一個long型數據成員記錄當前狀態標志。這些狀態標志可用位或運算型數據成員記錄當前狀態標志。這些狀態標志可用位或運算符符“|”進行組合。進行組合。 設置狀
9、態標志設置狀態標志 用用 setf函數設置狀態標志,函數設置狀態標志, 其一般格式如下:其一般格式如下: long ios:setf(long flags) 清除狀態標志清除狀態標志 用用unsetf函數清除狀態標志,其一般格式如下:函數清除狀態標志,其一般格式如下: long ios:unsetf(long flags) 取狀態標志取狀態標志 用函數用函數flags取狀態標志有兩種形式,其格式分別如下:取狀態標志有兩種形式,其格式分別如下: long ios: flags() long ios:flags(long flag)面向對象程序設計-第7章13調用的一般格式:調用的一般格式:.(i
10、os:)例例7-1 示例設置狀態標志。示例設置狀態標志。/example71.cpp#include void main() cout.setf(ios:showpos); /設置在正數前加上正號設置在正數前加上正號“+” cout.setf(ios:scientific); /設置按科學記數法輸出設置按科學記數法輸出 cout123 123.23endl;運行結果:運行結果:+123 +1.232300e+002面向對象程序設計-第7章14例例7-2示例對狀態標志的操作。示例對狀態標志的操作。/example72.cpp#include void showflags(long f);void
11、 main() long f; f=cout.flags(); /取當前狀態標志取當前狀態標志 showflags(f); /顯示狀態值顯示狀態值 cout.setf(ios:showpos|ios:scientific|ios:fixed); /追加狀態標志追加狀態標志 f=cout.flags(); /取當前狀態標志取當前狀態標志 showflags(f); /顯示狀態值顯示狀態值 面向對象程序設計-第7章15 cout.unsetf(ios:scientific); /從狀態標志中去掉從狀態標志中去掉 scientific f=cout.flags(); /取當前狀態標志取當前狀態標志
12、showflags(f); /顯示狀態值顯示狀態值 f=cout.flags(ios:hex); /重新設置狀態標志重新設置狀態標志 showflags(f); f=cout.flags(); /取當前狀態標志取當前狀態標志 showflags(f); void showflags(long f) long i; for(i=0 x8000;i;i=i1) /用用右移方式右移方式使使i中的值為中的值為“1”的位不斷右移的位不斷右移 if(i&f)cout1; /判斷判斷f中的某一位是否為中的某一位是否為“1” else cout0; coutendl;運行結果:運行結果:0000000
13、0000000000001110000000000000101000000000000010100000000000000000001000000面向對象程序設計-第7章162.用用ios成員函數設置輸出寬度成員函數設置輸出寬度 設置輸出寬度函數有兩種形式,其格式分別設置輸出寬度函數有兩種形式,其格式分別如下:如下: int ios:width(int len) int ios:width() 第一種形式是設置輸出寬度,并返回原來的第一種形式是設置輸出寬度,并返回原來的輸出寬度;第二種形式是返回當前輸出寬度,輸出寬度;第二種形式是返回當前輸出寬度,輸出寬度為輸出寬度為0。面向對象程序設計-第7
14、章17#include void main() double values = 1.23,35.36,653.7,4358.24; for(int i=0;i4;i+) cout.width(10); cout valuesi n; 運行結果:運行結果: 1.23 35.36 653.7 4358.24面向對象程序設計-第7章183.設置填充字符設置填充字符 填充字符的作用是當輸出值不滿輸出寬度時用填充字填充字符的作用是當輸出值不滿輸出寬度時用填充字符來填充,默認填充字符為符來填充,默認填充字符為空格空格。它與。它與width()函數函數配合使用,否則沒有意義。配合使用,否則沒有意義。 設置填
15、充字符函數有兩種形式,其格式分別如下:設置填充字符函數有兩種形式,其格式分別如下: char ios:fill(char ch) char ios:fill() 第一種形式是重新設置填充字符,并返回設置前的填第一種形式是重新設置填充字符,并返回設置前的填充字符;第二種形式是返回當前的填充字符充字符;第二種形式是返回當前的填充字符。面向對象程序設計-第7章19#include void main() double values = 1.23,35.36,653.7,4358.24; for(int i=0;i4;i+) cout.width(10); cout.fill(*); cout val
16、uesi n; 運行結果:運行結果:*1.23*35.36*653.7*4358.24面向對象程序設計-第7章204.設置輸出精度設置輸出精度 設置浮點數輸出精度有兩種形式,其格式分別設置浮點數輸出精度有兩種形式,其格式分別如下:如下: int ios:precision(int p) int ios:precision() 第一種形式是重新設置輸出精度,并返回設置第一種形式是重新設置輸出精度,并返回設置前的輸出精度;第二種形式是返回當前的輸出前的輸出精度;第二種形式是返回當前的輸出精度。精度。面向對象程序設計-第7章21例例7-3 示例設置輸出寬度、填充字符、輸出精度。示例設置輸出寬度、填充
17、字符、輸出精度。/example73.cpp#include void main() int i;i=cout.width();coutwidth:iendl;cout.width(8);coutcout.width()(new width)endl;面向對象程序設計-第7章22 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=cout.precisi
18、on(); coutpresicion:jendl; cout.precision(8); cout123.456789(example)endl; coutcout.precision()(new presicion)”或插入運算符或插入運算符“”后后面來設定輸入面來設定輸入/輸出格式輸出格式,即在讀寫對象之間插入一,即在讀寫對象之間插入一個修改狀態的操作。個修改狀態的操作。 其中有些函數沒有參數,所以又叫其中有些函數沒有參數,所以又叫操作符操作符。 面向對象程序設計-第7章26 設置輸入設置輸入/輸出寬度函數輸出寬度函數setw(int) 設置輸出填充字符函數設置輸出填充字符函數setfi
19、ll(int) 設置輸出精度函數設置輸出精度函數setprecision(int) 設置輸入設置輸入/輸出整型數數制函數輸出整型數數制函數dec、hex和和oct 取消輸入結束符函數取消輸入結束符函數ws 控制換行操作符控制換行操作符endl 代表輸出單字符代表輸出單字符“0”的操作符的操作符ends面向對象程序設計-第7章271.設置輸入設置輸入/輸出寬度函數輸出寬度函數setw(int) 相當于相當于C語言的標準語言的標準I/O函數(函數(scanf和和printf)中的)中的“%”和格式符的作用。在使用時,只對其后一項輸入和格式符的作用。在使用時,只對其后一項輸入/輸出有效。輸出有效。
20、對于對于輸出輸出時,若實際寬度小于設置寬度時,數據時,若實際寬度小于設置寬度時,數據向向右對齊右對齊,反之則按數據的實際寬度輸出。,反之則按數據的實際寬度輸出。 對于對于輸入輸入時,若輸入的數據寬度超過設置寬度時,時,若輸入的數據寬度超過設置寬度時,超出的數據部分超出的數據部分被截斷而被作為下一項輸入內容被截斷而被作為下一項輸入內容。面向對象程序設計-第7章28例例7-4-1 示例設置輸入示例設置輸入/輸出寬度。輸出寬度。/example74.cpp#include #include void main() char *p=12345,*q=678; char f4,g4; /最后一位為最后一
21、位為0 int i=10; coutpsetw(6)qsetw(4)pqsetw(4)fg; /設置輸入寬度設置輸入寬度 coutfendlgendli:iendl; 運行結果:運行結果:12345 678123456781234512345i:10面向對象程序設計-第7章292 設置輸出填充字符函數設置輸出填充字符函數setfill(int) 此函數與此函數與ios:fill相同,常與相同,常與setw(int)聯合使用,從聯合使用,從而向不滿設置輸出寬度的空間填入指定的字符,不而向不滿設置輸出寬度的空間填入指定的字符,不設置則填空格。設置后直至下一次設置前一直有效。設置則填空格。設置后直至
22、下一次設置前一直有效。面向對象程序設計-第7章30例例7-4-2 示例設置輸入示例設置輸入/輸出寬度。輸出寬度。/example74.cpp#include #include void main() char *p=12345,*q=678; char f4,g4; /最后一位為最后一位為0 int i=10;/設置輸出寬度和填充字符設置輸出寬度和填充字符coutpsetfill(*)setw(6)qsetw(4)pqsetw(4)fg; /設置輸入寬度設置輸入寬度 coutfendlgendli:iendl; 運行結果:運行結果:12345*678123456781234512345i:10
23、面向對象程序設計-第7章313設置輸出精度函數設置輸出精度函數setprecision(int)setiosflag(ios:fixed)使用定點方式表示實數。使用定點方式表示實數。setiosflag(ios:scientific)是用科學計數法表示實數。是用科學計數法表示實數。setiosflag(ios:fixed)與與setprecision(n)合用,可以控制小合用,可以控制小數點右邊的數字個數。數點右邊的數字個數。setiosflag(ios: scientific)與與setprecision(n)合用,可以控制合用,可以控制科學計數法的小數位數。科學計數法的小數位數。面向對象程
24、序設計-第7章32例例7-5 示例分別用浮點、定點和科學記數法的方式表示一個實數。示例分別用浮點、定點和科學記數法的方式表示一個實數。/example75.cpp#include #include void main() double f=22.0/7; /在用浮點表示的輸出中,在用浮點表示的輸出中,setprecision(n)表示有效位數表示有效位數 coutfendl; /默認有效位數為默認有效位數為6 coutsetprecision(0)fendl; /最小的有效位數為最小的有效位數為1/在用定點表示的輸出中,在用定點表示的輸出中,setprecision(n)表示小數位數表示小數位
25、數 coutsetiosflags(ios:fixed); coutsetprecision(8)fendl; /小數位數為小數位數為8運行結果:運行結果:3.1428633.14285714面向對象程序設計-第7章334 設置輸入設置輸入/輸出整型數數制函數輸出整型數數制函數dec、hex和和oct相當于相當于printf函數中用的函數中用的“%d”, “%x”, “%o”,相同。,相同。默默認數值為認數值為dec。在輸入時,若輸入違例,則強制輸入一個在輸入時,若輸入違例,則強制輸入一個0給變量給變量例例7-6 示例違例輸入。示例違例輸入。/example76.cpp /說明:說明:若輸入十
26、六進制數,則顯示若輸入十六進制數,則顯示0 0。 #include void main()int i;cini;coutiendl;面向對象程序設計-第7章34例例7-7 示例設置輸出整型數數制。示例設置輸出整型數數制。/example77.cpp#include void main() int number=1001; coutDecimal:decnumberendl Hexadecimal:hexnumberendl Octal:octnumberendl;運行結果:運行結果:Decimal:1001Hexadecimal:3e9Octal:1751面向對象程序設計-第7章35例例7-8
27、在上例中增加一個頭文件,對十六進制數進行大寫控制。在上例中增加一個頭文件,對十六進制數進行大寫控制。/example78.cpp#include#includevoid main() int number=1001; coutHexadecimal:hex setiosflags(ios:uppercase) numberendl; 運行結果:運行結果:Hexadecimal:3E9面向對象程序設計-第7章36例例7-9 示例設置輸入示例設置輸入/輸出整型數數制。輸出整型數數制。/example79.cpp#include void main() int i,j; long k; char c
28、,str40,*s=str; cinihexkcjs; coutiendlhexkendlcendljendlsendl;面向對象程序設計-第7章375 取消輸入結束符函數取消輸入結束符函數ws 此函數表示可以省去輸入時用作代表一個非數值輸入項結束此函數表示可以省去輸入時用作代表一個非數值輸入項結束的空格或的空格或Tab鍵。鍵。例例7-10 示例示例ws的使用。的使用。/example710.cpp#include void main()char c,d;int i,j;cinwscdij;coutcdi,jendl;面向對象程序設計-第7章386.用戶自定義操作符函數用戶自定義操作符函數輸出
29、:輸出:ostream& manip_name(ostream& stream) return stream;面向對象程序設計-第7章39例例7-11 示例用戶自定義輸出操作符函數。示例用戶自定義輸出操作符函數。/example711.cpp#include #include ostream& setup(ostream& stream) stream.setf(ios:left); streamsetw(10)setfill($); return stream;void main() cout10 setup10endl;運行結果:運行結果:10 10$面向對
30、象程序設計-第7章40輸入:輸入:istream& manip_name(istream& stream) return stream;面向對象程序設計-第7章41例例7-12 示例用戶自定義輸入操作符函數。示例用戶自定義輸入操作符函數。/example712.cpp#include #include istream& prompt(istream& stream) cinhex; coutprompti; coutiendl;運行結果:運行結果:Enter number using hex format:ab171面向對象程序設計-第7章42 C+有三種文件流
31、類:有三種文件流類: 輸入輸入/輸出文件流類輸出文件流類fstream 輸入文件流類輸入文件流類ifstream 輸出文件流類輸出文件流類ofstream 它們分別從它們分別從I/O流中的流中的iostream、istream、ostream流類中派生而來。流類中派生而來。 這些文件流類都定義在這些文件流類都定義在fstream.h頭文件中,因此,頭文件中,因此,要使用文件流類,必須在程序開始包含該頭文件。要使用文件流類,必須在程序開始包含該頭文件。7.4文件的輸入文件的輸入/輸出輸出面向對象程序設計-第7章43C+中進行文件操作的一般步驟中進行文件操作的一般步驟 為文件定義一個流類對象;為文件定義一個流類對象; 使用使用open()函數建立(或打開)文件。如果文函數建立(或打開)文件。如果文件不存在,則建立該文件;如果磁盤上已存在件不存在,則建立該文件;如果磁盤
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 81《牛頓第一定律 慣性》(教學設計)-2024-2025學年教科版(2024)初中物理八年級下冊
- 6《景陽岡》教學設計-2023-2024學年統編版語文五年級下冊
- 13 美麗的冬天(教學設計)2024-2025學年統編版道德與法治一年級上冊
- 2024-2025學年高中生物 第一章 孟德爾定律 第二節 自由組合定律教學設計4 浙科版必修2
- 2024-2025學年高中物理 第9章 固體、液體和物態變化 2 液體教學設計2 新人教版選修3-3
- Unit 6 How do you feel Part B Let's talk(教學設計)-2024-2025學年人教PEP版英語六年級上冊
- 葡萄胎的護理診斷
- 17 跳水教學設計-2023-2024學年五年級下冊語文統編版
- 2024-2025學年高中數學 第一章 統計案例 1.2 獨立性檢驗的基本思想及其初步應用(1)教學設計 文 新人教A版選修1-2
- 《迎接蠶寶寶的到來》(教學設計)2023-2024學年教科版三年級科學下冊
- 湖南省炎德英才名校聯考聯合體2024-2025學年高二下學期3月月考-數學+答案
- (3月省質檢)福建省2025屆高三畢業班適應性練習卷英語試卷(含答案)
- 專業網格員測試題及答案
- 2025年上半年貴州黔東南州各縣(市)事業單位招聘工作人員1691人筆試易考易錯模擬試題(共500題)試卷后附參考答案
- 湖南省長沙市雅禮教育集團2024-2025學年高一上學期期末考試英語試卷含答案
- 2025年廣東深圳高三一模英語試題及詞匯解析
- 電力應急物資儲備與管理
- 釹鐵硼項目可行性分析報告(模板參考范文)
- 【語文】第三單元整本書閱讀《駱駝祥子》圈點、批注、做筆記課件-2024-2025學年統編版語文七年級下冊
- 新目錄監理規劃2025
- 儲能項目竣工報告
評論
0/150
提交評論