




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_本章主要內容本章主要內容11.1 C+輸入輸入/輸出輸出11.2 標準輸入輸出流標準輸入輸出流 11.3 文件流文件流高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_I/OI/O指的是程序的輸入(指的是程序的輸入(Input)和輸出)和輸出(Output)。)。輸入可取自鍵盤,輸出可發(fā)送至屏幕。輸入可取自鍵盤,輸出可發(fā)送至屏幕。其實,其實,輸入輸入也可取自也可取自文件文件,輸出輸出可發(fā)送可發(fā)送至至文件文件。高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_11.1.1 流與緩沖區(qū)流與緩沖區(qū)對系統(tǒng)指定的
2、標準設備的輸入輸出。即由鍵盤輸對系統(tǒng)指定的標準設備的輸入輸出。即由鍵盤輸入,輸出到顯示器屏幕上。這種輸入輸出稱為標入,輸出到顯示器屏幕上。這種輸入輸出稱為標準的輸入輸出,簡稱標準準的輸入輸出,簡稱標準I/O。對外存磁盤文件的輸入輸出。這種對外存磁盤文件的輸入輸出。這種輸入輸出稱為輸入輸出稱為文件的輸入輸出文件的輸入輸出,簡稱,簡稱文件文件I/O。對內存中指定空間進行輸入輸出。通常對內存中指定空間進行輸入輸出。通常指定一個指定一個字符數(shù)組作為存儲空間字符數(shù)組作為存儲空間,但可以在其中存儲任何,但可以在其中存儲任何種類信息。這種種類信息。這種輸入輸出稱為字符串輸入輸出,輸入輸出稱為字符串輸入輸出,
3、簡稱串簡稱串I/O。 高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_流流流是流是對象對象,它擁有自己的一套特殊用途的函數(shù)。,它擁有自己的一套特殊用途的函數(shù)。輸入流輸入流:如果:如果流向程序流向程序,則稱之為,則稱之為輸入流輸入流。輸。輸入流可以來源于入流可以來源于鍵盤或文件。鍵盤或文件。ucin是連接到鍵盤的一個輸入流是連接到鍵盤的一個輸入流.輸出流輸出流:如果流向:如果流向屏幕或文件屏幕或文件,則稱之為,則稱之為輸出輸出流,流,輸出流可來源于輸出流可來源于程序。程序。ucout是連接到屏幕的一個輸出流是連接到屏幕的一個輸出流.如果如果in_stream是一個輸入是一個輸入流
4、,并且這個流,并且這個流來源于某流來源于某個文件個文件,那么下面語句什,那么下面語句什么意思?么意思?int number;in_streamnumber;如果如果out_stream是一個輸出流,并且這個是一個輸出流,并且這個流流發(fā)送到發(fā)送到某個文件某個文件,那么下面語句什么意思?,那么下面語句什么意思?int number=100;out_stream“數(shù)字為:數(shù)字為:”number;高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_11.1.2 輸入輸出流類輸入輸出流類C+語言系統(tǒng)為實現(xiàn)數(shù)據(jù)的輸入輸出定語言系統(tǒng)為實現(xiàn)數(shù)據(jù)的輸入輸出定義了一個龐大的類庫,如下圖所示:義了一個龐
5、大的類庫,如下圖所示:高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_iosistreamostreamfstreambasestrstreambaseifstreamofstreamistrstreamostrstreamistreamostreamiostreamfstreambasestrstreambasefstreamstrstream高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_I/OI/O流的概念流的概念C+系統(tǒng)中的系統(tǒng)中的I/O類庫,其所有類被包在:類庫,其所有類被包在: iostream、fstream、strstream這三個系這三個系統(tǒng)頭
6、文件中。統(tǒng)頭文件中。u iostream:包含包含C+流的最基本定義流的最基本定義,如如cin,cout的定義的定義,及及endl等操縱符的定義。等操縱符的定義。ufstream :包含包含C+輸入輸出文件流的定義。輸入輸出文件流的定義。fstream、ifstream、ofstream、fstreambase以以及及iostream中的所有類。中的所有類。ustrstream:包含包含C+字符串流的定義。字符串流的定義。高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_11.2 標準輸入輸出流標準輸入輸出流 C+有四個預先定義的流對象有四個預先定義的流對象: ucin 標準輸入
7、標準輸入ucout 標準輸出標準輸出ucerr 標準錯誤輸出,沒有緩沖,發(fā)送給它標準錯誤輸出,沒有緩沖,發(fā)送給它的內容立即被輸出。的內容立即被輸出。uclog 類似于類似于cerr,但是有緩沖,緩沖區(qū)滿,但是有緩沖,緩沖區(qū)滿時被輸出。時被輸出。高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_#include /cin和和cout功能功能using namespace std;/=void main()int a; if(!(cina) /如果輸入錯誤的數(shù)據(jù),則返回如果輸入錯誤的數(shù)據(jù),則返回0cerrcerr:輸入的類型不匹配輸入的類型不匹配endl; clogclog:輸入的類
8、型不匹配輸入的類型不匹配endl;elsecouta=a”從流中提取數(shù)據(jù)。從流中提取數(shù)據(jù)。u當遇到當遇到無效字符無效字符或或文件結束符文件結束符(非換行符)時,(非換行符)時,輸入流將輸入流將處于出錯狀態(tài)處于出錯狀態(tài),提取操作終止。提取操作終止。 高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_11.2.2 輸入的流成員函數(shù)輸入的流成員函數(shù) cin可以調用自類可以調用自類istream中繼承來的運算符中繼承來的運算符重載函數(shù)及其他流成員函數(shù)。重載函數(shù)及其他流成員函數(shù)。u用用get函數(shù)讀入一個字符函數(shù)讀入一個字符 cin.get();函數(shù)的返回值就是讀入的字符,當遇到輸入流中的文
9、函數(shù)的返回值就是讀入的字符,當遇到輸入流中的文件結束符時,函數(shù)值返回文件結束標志件結束符時,函數(shù)值返回文件結束標志EOF,即,即-1。 u有一個參數(shù)的有一個參數(shù)的get函數(shù)函數(shù) cin.get(ch);是從輸入流中讀取一個字符,并賦值給字符變量是從輸入流中讀取一個字符,并賦值給字符變量ch。若成功讀取字符則函數(shù)返回非若成功讀取字符則函數(shù)返回非0值,否則返回值,否則返回0值。值。 u #includeusing namespace std;int main()char ch;coutEOF=EOFendl;cout請輸入一串字符:請輸入一串字符:;while(ch=cin.get()!=EOF)
10、coutch;return 0; EOF=-1請輸入一串字符:請輸入一串字符:Welcome to C+!Welcome to C+! 高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_u有三個參數(shù)的有三個參數(shù)的get函數(shù)函數(shù) cin.get(字符數(shù)組(或字符指針),字符個數(shù)字符數(shù)組(或字符指針),字符個數(shù)n,終止,終止字符字符);是從輸入流中讀取是從輸入流中讀取n-1個字符賦給指定的字符數(shù)組(或個字符賦給指定的字符數(shù)組(或字符指針指向的數(shù)組),若讀取到達字符指針指向的數(shù)組),若讀取到達n-1個字符之前遇個字符之前遇到指定的終止字符,則提前結束讀取。到指定的終止字符,則提前結束讀
11、取。若讀取成功則函數(shù)若讀取成功則函數(shù)返回非返回非0值值,否則返回否則返回0#includeusing namespace std;int main()char arr28;cout請輸入一串字符:請輸入一串字符:;cin.get(arr,18,n);coutarrendl;return 0;請輸入一串字符:請輸入一串字符:Please give it to me!Please give it to 高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_istream類的其他成員函數(shù)類的其他成員函數(shù)ueof函數(shù)函數(shù) cin.eof();該函數(shù)用來表示文件結束,作用是從輸入流中讀取數(shù)該函
12、數(shù)用來表示文件結束,作用是從輸入流中讀取數(shù)據(jù),若達到文件末尾,即遇到文件結束符,函數(shù)返回據(jù),若達到文件末尾,即遇到文件結束符,函數(shù)返回值為非值為非0值,否則為值,否則為0值。值。#includeusing namespace std;int main()char ch;while(!cin.eof() cin.get(ch);coutch;return 0;How are you!How are you!Fine,Thank you!Fine,Thank you!高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_uignore函數(shù)函數(shù)cin.ignore(n,終止字符),終止字符
13、);u其作用是其作用是跳過輸入流中的跳過輸入流中的n個字符個字符(此時包括指(此時包括指定的終止字符在內)之后,遇到定的終止字符在內)之后,遇到指定終止字符時指定終止字符時提前結束提前結束。其中。其中兩個參數(shù)均可以省略,也可以省兩個參數(shù)均可以省略,也可以省略其中一個略其中一個。 cin.ignore(); 或或 cin.ignore(4);等價于等價于cin.ignore(1,EOF);和和cin.ignore(4,EOF);ugetline函數(shù)函數(shù) cin.getline(字符數(shù)組(或字符指針),字符個數(shù)字符數(shù)組(或字符指針),字符個數(shù)n,終止標志字符終止標志字符)其功能同有三個參數(shù)其功能同
14、有三個參數(shù)get函數(shù)函數(shù) 高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_#includeusing namespace std;int main()char ch030,ch130,ch240;coutch0; /cin.ignore(20,n); cout請輸入第二個字符串:請輸入第二個字符串:;cin.getline(ch1,30); cout請輸入第三個字符串:請輸入第三個字符串:;cin.getline(ch2,40,*); cout在屏幕上分別顯示輸入的三個字符串:在屏幕上分別顯示輸入的三個字符串:endl; cout第一個:第一個:ch0endl;cout第二個:
15、第二個:ch1endl;cout第三個:第三個:ch2endl;cout程序結束程序結束endl;return 0;請輸入第一個字符串:請輸入第一個字符串:Please welcome to C+!請輸入第二個字符串:請輸入第三個字符串:請輸入第二個字符串:請輸入第三個字符串:Thank you very much!*在屏幕上分別顯示輸入的三個字符串:在屏幕上分別顯示輸入的三個字符串:第一個:第一個:Please第二個:第二個: welcome to C+!第三個:第三個:Thank you very much!程序結束程序結束高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_請
16、輸入第一個字符串:請輸入第一個字符串:Please Jack請輸入第二個字符串:請輸入第二個字符串:welcome to C+!請輸入第三個字符串:請輸入第三個字符串:Thank you very much!*在屏幕上分別顯示輸入的三個字符串:在屏幕上分別顯示輸入的三個字符串:第一個:第一個:Please第二個:第二個:welcome to C+!第三個:第三個:Thank you very much!程序結束程序結束添加添加cin.ignore(20,n);語句后語句后,運行結果運行結果:高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_11.2.3 標準輸出流標準輸出流標準輸
17、出流是流向標準輸出設備(顯示器)的數(shù)據(jù)。標準輸出流是流向標準輸出設備(顯示器)的數(shù)據(jù)。輸出流輸出流cout、cerr和和clog cout流流 ucout向標準輸出設備(終端顯示器)輸出數(shù)據(jù),變量通向標準輸出設備(終端顯示器)輸出數(shù)據(jù),變量通過流插入運算符過流插入運算符“”向向cout流中順序插入數(shù)據(jù)。流中順序插入數(shù)據(jù)。cerr和和clog流流 ucerr向標準出錯設備(顯示器)輸出有關出錯信息。向標準出錯設備(顯示器)輸出有關出錯信息。ucerr直接向顯示器輸出,直接向顯示器輸出,clog先將信息放入緩沖區(qū)中,當先將信息放入緩沖區(qū)中,當緩沖區(qū)滿或遇到緩沖區(qū)滿或遇到endl時再向顯示器輸出信息
18、。時再向顯示器輸出信息。 高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_輸出流成員函數(shù)輸出流成員函數(shù)輸出單個字符也可以使用流成員函數(shù)輸出單個字符也可以使用流成員函數(shù)put()。其調用形式為:其調用形式為:ucout.put(參數(shù))(參數(shù)); 如如: cout.put(D); /在屏幕上輸出字母在屏幕上輸出字母D cout.put(68); /輸出輸出ASCII碼為碼為68的字符的字符也可以在一個語句中連續(xù)調用也可以在一個語句中連續(xù)調用put函數(shù),實函數(shù),實現(xiàn)字符串的輸出現(xiàn)字符串的輸出:ucout.put(D).put(a).put(n).put(c).put(e); /輸出結
19、果為輸出結果為Dance 高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_11.2.4 輸入輸入/輸出的格式輸出的格式輸出格式輸出格式:程序的輸出布局。程序的輸出布局。u如如:輸出輸出2.00u輸出輸出*30采用采用流的各種格式流的各種格式操作。操作。高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_流的格式操作流的格式操作常用的流狀態(tài)常用的流狀態(tài)ushowpos,showbase,uppercase,showpoint,boolalpha,left,right,dec,hex,oct,fixed,scientific有參數(shù)的三個常用的流狀態(tài)有參數(shù)的三個常用的流狀
20、態(tài)uwidth(int),fill(char),precision(int)與與連用的設置方式,要包含頭文件連用的設置方式,要包含頭文件iomanipusetw(int),setfill(char),setprecision(int)高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_1)常用的流狀態(tài))常用的流狀態(tài) showpos 在正數(shù)(包括在正數(shù)(包括0)之前)之前顯示顯示+號號 showbase在十六進制整數(shù)前加在十六進制整數(shù)前加0 x,八進制整數(shù)前加八進制整數(shù)前加0 uppercase 十六進制格式字母用大寫字母表示(默認十六進制格式字母用大寫字母表示(默認為小寫字母)為小
21、寫字母) showpoint浮點輸出浮點輸出,即使即使小數(shù)點后都為小數(shù)點后都為0也加小數(shù)點也加小數(shù)點 boolalpha邏輯值邏輯值1和和0用用true和和false表示表示 left左對齊(填充字符填在右邊)左對齊(填充字符填在右邊) right右對齊(填充字符填在左邊)右對齊(填充字符填在左邊) dec十進制顯示整數(shù)十進制顯示整數(shù) hex十六進制顯示整數(shù)十六進制顯示整數(shù) oct八進制顯示整數(shù)八進制顯示整數(shù) fixed定點數(shù)格式輸出定點數(shù)格式輸出 scientific科學記數(shù)法格式輸出科學記數(shù)法格式輸出高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_#includeusing
22、 namespace std;void main() bool b=23; cout12tshowpos12endl; cout18thex18tshowbase18endl; cout255tuppercase255endl; cout123.0tshowpoint123.0endl; cout3)tboolalpha3)endl; coutbendl; coutfixed12345.678endl; coutscientific123456.678endl;12 +12+18 12 0 x120 xff 0XFF+123 +123.0000 0false+12345.678000+1.23
23、4567E+005高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_常用的流狀態(tài)常用的流狀態(tài)取消流狀態(tài)的操作取消流狀態(tài)的操作:unoshowpos,noshowbase,nouppercase,noshowpoint,noboolalphauLeft與與right是相對立的,設置了此就取消了彼,是相對立的,設置了此就取消了彼,dec,oct,hex也是相互獨立的。也是相互獨立的。ufixed與與scientific和一般顯示方式三者相互獨立,和一般顯示方式三者相互獨立,不過他們的取消方式為不過他們的取消方式為cout捆綁函數(shù)調用的方式捆綁函數(shù)調用的方式cout.unsetf(io
24、s:scientific);cout.unsetf(ios:fixed);高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_#includeusing namespace std;void main() bool b=23; cout12tshowpos12endl; cout noshowpos; /取消顯示正號取消顯示正號 cout18thex18 tshowbase18endl; cout255tuppercase255endl; cout dec 18 endl;/設置十進制數(shù)輸出設置十進制數(shù)輸出 cout123.0tshowpoint123.0endl; cout no
25、showpoint123.0endl;/取消浮點輸出取消浮點輸出 cout3)tboolalpha3)endl; coutbendl; cout noboolalphabendl;/取消布爾型數(shù)的字母輸出取消布爾型數(shù)的字母輸出 coutfixed12345.678endl; cout.unsetf(ios:fixed);/取消定點小數(shù)取消定點小數(shù) cout12345.678endl; coutscientific123456.678endl;12 +1218 12 0 x120 xff 0XFF18123 123.0001230 0false012345.67800012345.71.2345
26、67E+005高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_有參數(shù)的三個流狀態(tài)有參數(shù)的三個流狀態(tài)width(int) 設置顯示設置顯示寬度寬度fill(char)設置設置填充字符填充字符precision(int)設置)設置有效位數(shù)有效位數(shù)(普通顯示方式)(普通顯示方式)或精度(或精度(定點或科學記數(shù)法方式定點或科學記數(shù)法方式)注意注意:這些流狀態(tài)是以:這些流狀態(tài)是以cout捆綁調用它們的形捆綁調用它們的形式設置的,式設置的,不能與流出符不能與流出符連用連用。width(n)為為一次性操作,即第二次顯示時將不再有效,一次性操作,即第二次顯示時將不再有效,默默認為認為width
27、(0),表示僅顯示數(shù)值。表示僅顯示數(shù)值。高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_#includeusing namespace std;void main() cout.width(8);/只對下面一個數(shù)據(jù)有效只對下面一個數(shù)據(jù)有效 cout.fill(*); cout 12 endl; /默認右對齊默認右對齊 cout12endl; /默認寬度為默認寬度為0 cout.width(8); cout.fill(*); coutleft12endl; cout.precision(8);/當小數(shù)為當小數(shù)為0時,不顯示時,不顯示 cout 2345.00 endl; cout
28、 1234567.789124567endl;/普通顯示普通顯示 coutfixed 1234567.78912endl;/定點顯示定點顯示 coutscientific1234567.78912endl;/科學記數(shù)顯示科學記數(shù)顯示*121212*23451234567.81234567.789120001.23456779e+006高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_3)與)與連用的設置方式連用的設置方式setw(int)(必須在每次使用時都設定)(必須在每次使用時都設定)setfill(char)setprecision(int)注意:注意:必須要包含必須要包含
29、頭文件頭文件iomanip只使用只使用setprecision不能輸出小數(shù)末尾的不能輸出小數(shù)末尾的0,例如,例如0.2只能輸出為只能輸出為0.2,而不是而不是0.20。可以使用下面語句將可以使用下面語句將setw,setprecision和和fixed三個三個結合起來。結合起來。u coutsetiosflags(ios:fixed);ucoutfixedsetprecision(2)setw(8)0.2;高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_#include#includeusing namespace std;void main() cout setw(8) se
30、tfill(*)12endl; cout setw(8) setfill(*)left12endl; cout setprecision(8)1234.00endl; cout1234567.789124567endl; coutsetw(10)fixed setprecision(3)12345.200endl;*1212*12341234567.812345.200*高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_11.3 文件流文件流根據(jù)文件中數(shù)據(jù)的組織形式,可將其分為根據(jù)文件中數(shù)據(jù)的組織形式,可將其分為ASCII文文件和二進制文件。件和二進制文件。uASCII文件又稱為
31、文件又稱為文本文件或字符文件文本文件或字符文件,它的每一個字,它的每一個字節(jié)放一個節(jié)放一個ASCII代碼代碼,表示,表示一個字符一個字符。u二進制文件又稱為二進制文件又稱為內部格式文件或字節(jié)文件內部格式文件或字節(jié)文件,它是將數(shù),它是將數(shù)據(jù)按照其在據(jù)按照其在內存中的存儲形式原樣內存中的存儲形式原樣輸出到文件中存放。輸出到文件中存放。 高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_11.3.2 文件流與文件流對象文件流與文件流對象文件流文件流是以是以外部文件外部文件為輸入輸出對象的數(shù)據(jù)為輸入輸出對象的數(shù)據(jù)流。流。輸入文件流輸入文件流是從是從外部文件流向內存的數(shù)外部文件流向內存的數(shù)
32、據(jù)據(jù),輸出文件流輸出文件流是由是由內存流向外部文件的數(shù)內存流向外部文件的數(shù)據(jù)據(jù)。 高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_文件流對象主要有三種類型:文件流對象主要有三種類型:u輸入文件流對象輸入文件流對象u輸出文件流對象輸出文件流對象u輸入輸入/輸出文件流對象輸出文件流對象對應的類分別是:對應的類分別是:uifstream uofstreamufstream(必須指定輸入或輸出,或者同時指定必須指定輸入或輸出,或者同時指定兩個)兩個)高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_11.3.4 文件的讀寫操作文件的讀寫操作 讀取文件讀取文件:如果程序:如
33、果程序從從一個一個文件文件獲取獲取輸入輸入,稱讀取文,稱讀取文件。件。 寫入文件寫入文件:程序將:程序將輸出輸出發(fā)送發(fā)送給文件給文件,稱寫入文件。,稱寫入文件。 流流可以用來從一個文件中獲取輸入,或將輸出發(fā)送給可以用來從一個文件中獲取輸入,或將輸出發(fā)送給文件。文件。 但是在但是在使用流之前使用流之前必須必須先聲明流先聲明流,而且,而且必須將流連接必須將流連接到文件到文件。u輸入文件流類型名稱:輸入文件流類型名稱:ifstreamu輸出文件流類型名稱:輸出文件流類型名稱:ofstreamifstream in_stream;ofstream out_stream;高級程序設計高級程序設計C+ 田
34、秀霞田秀霞 E-Mail: c_寫文件第一步寫文件第一步如果要使用如果要使用ofstream類型,則類型,則必須引入必須引入頭文件頭文件fstream,即程序中必須包括預,即程序中必須包括預編譯指令和語句:編譯指令和語句:u#includeuusing namespace std;高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_寫文件第二步寫文件第二步聲明流變量格式:聲明流變量格式:u流類型名稱流類型名稱 流變量流變量1,流變量,流變量2;u如:如:ofstream out_stream; 高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_寫文件第三步寫文件第三步
35、輸出流變量輸出流變量必須連接必須連接到一個文件,稱之為到一個文件,稱之為打開打開文件文件。需要一個名為需要一個名為open的函數(shù)執(zhí)行這個打開操作。的函數(shù)執(zhí)行這個打開操作。u假設需要假設需要輸出流輸出流out_stream連接到一個名為連接到一個名為outfile.txt的文件,那么程序必須首先執(zhí)行如下語的文件,那么程序必須首先執(zhí)行如下語句,然后才能向該文件寫入。句,然后才能向該文件寫入。uout_stream.open(“outfile.txt”);或者直接通過構造函數(shù)打開文件或者直接通過構造函數(shù)打開文件uofstream out_stream (“outfile.txt”);執(zhí)行執(zhí)行open
36、語句或構造函數(shù)后語句或構造函數(shù)后out_stream表示文件表示文件outfile.txt,除非,除非重新設置重新設置out_stream連接的文件。連接的文件。高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_寫文件第四步寫文件第四步使用使用插入運算符插入運算符向文件寫入數(shù)據(jù)。向文件寫入數(shù)據(jù)。u如:如: int num1=45,num2=8;u out_streamnum1num2;向文件向文件outfile.txt中寫中寫入兩個數(shù)字。入兩個數(shù)字。高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_寫文件第五步寫文件第五步程序程序結束結束向一個文件寫入數(shù)據(jù),每個文向
37、一個文件寫入數(shù)據(jù),每個文件都應該關閉,即件都應該關閉,即斷開文件斷開文件和和輸出流的輸出流的連接連接,此時要用到另一個此時要用到另一個名為名為close的函的函數(shù)。數(shù)。u如如 out_stream.close();如果如果程序正常終止程序正常終止,但沒有正常關閉文,但沒有正常關閉文件,件,系統(tǒng)會自動關閉文件系統(tǒng)會自動關閉文件。高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_#include /引入文件流頭文件引入文件流頭文件using namespace std;/=測試主函數(shù)測試主函數(shù)=int main()ofstream outFile(ofile.txt); /聲明一個文
38、件輸出流對象聲明一個文件輸出流對象outFilehello,Jackendl; /向文件輸出一個字符串向文件輸出一個字符串outFileWould you mind do me a favor!endl; /向文件輸向文件輸出一個字符串出一個字符串outFile.close(); /關閉文件輸出流關閉文件輸出流return 0;高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_iosmodeiosmodein 讀方式打開讀方式打開; out 寫方式打開寫方式打開; app 追加方式追加方式 ; ate 文件打開時,文件指針位于文件尾文件打開時,文件指針位于文件尾; trunc 如
39、果文件存在,清除原有內容。若文如果文件存在,清除原有內容。若文件不存在,則件不存在,則創(chuàng)建創(chuàng)建 binary 以二進制方式以二進制方式打開打開文件文件 ;nocreate 打開已有的文件,如果文件不存在,打開已有的文件,如果文件不存在,則打開失敗。則打開失敗。 noreplace 如果文件存在,如果文件存在,除非設置除非設置ios:ate或或ios:app,否則打開失敗。,否則打開失敗。高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_iosmodeiosmodeios:in|ios:out 以讀和寫的方式打開文以讀和寫的方式打開文件件 ;ios:out|ios:binary 以
40、二進制寫方式以二進制寫方式打開文打開文 ;ios:in|ios:binary 以二進制讀方式打開以二進制讀方式打開文件文件高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_#include /字符串操作字符串操作#include /文件流頭文件文件流頭文件using namespace std;int main() ofstream outdata; /定義輸出流變量定義輸出流變量 /將輸出流變量和磁盤文件聯(lián)系起來,如果文件不存在則創(chuàng)建文件將輸出流變量和磁盤文件聯(lián)系起來,如果文件不存在則創(chuàng)建文件 outdata.open(ofile.txt,ios:app); string st
41、r=this is the contents appended;outdatastrendl;outdata請查看輸出格式是否正確請查看輸出格式是否正確endl;outdata.close(); /關閉文件關閉文件return 0;高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_讀文件第一步讀文件第一步如果要使用如果要使用ifstream類型,則類型,則必須引入必須引入頭文件頭文件fstream,即程序中必須包括預,即程序中必須包括預編譯指令和語句:編譯指令和語句:u#includeuusing namespace std;高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mai
42、l: c_讀文件第二步讀文件第二步聲明流變量格式:聲明流變量格式:u流類型名稱流類型名稱 流變量流變量1,流變量,流變量2;u如:如:ifstream in_stream; 高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_讀文件第三步讀文件第三步輸入流變量必須連接到一個文件,稱之輸入流變量必須連接到一個文件,稱之為為打開文件打開文件。需要一個名為需要一個名為open的函數(shù)執(zhí)行這個打開的函數(shù)執(zhí)行這個打開操作。操作。u假設需要假設需要輸入流輸入流in_stream連接到一個名為連接到一個名為infile.txt的文件,那么程序必須首先執(zhí)行的文件,那么程序必須首先執(zhí)行如下語句,然后才
43、能從該文件讀取輸入。如下語句,然后才能從該文件讀取輸入。uin_stream.open(“infile.txt”);執(zhí)行該語句后,執(zhí)行該語句后,in_stream表示文件表示文件infile.txt,除非,除非重新設置重新設置in_stream連接的文件。連接的文件。高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_讀取文件第四步讀取文件第四步使用使用提取運算符提取運算符從文件中獲取輸入。從文件中獲取輸入。u如:如: int num1,num2;u in_streamnum1num2;從文件從文件infile.txt中讀中讀取兩個數(shù)字,并分別取兩個數(shù)字,并分別放入放入變量變量nu
44、m1和和num2中。中。高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_讀取文件第五步讀取文件第五步程序程序結束結束從一個文件獲取輸入,每個文從一個文件獲取輸入,每個文件都應該關閉,即件都應該關閉,即斷開文件斷開文件和和輸入流的輸入流的連接連接,此時要用到另一個此時要用到另一個名為名為close的函的函數(shù)。數(shù)。u如如 in_stream.close();如果如果程序正常終止程序正常終止,但沒有正常關閉文,但沒有正常關閉文件,件,系統(tǒng)會自動關閉文件系統(tǒng)會自動關閉文件。高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_#include#include /文件流頭文件文
45、件流頭文件using namespace std;void main() ifstream indata; /定義一個輸入流變量定義一個輸入流變量indata.open(input_data.txt); /將文件流變量和磁盤文件聯(lián)將文件流變量和磁盤文件聯(lián)系起來,打開文件系起來,打開文件int a;double b;indata a b; /從磁盤文件分別讀數(shù)據(jù)到兩個變量中從磁盤文件分別讀數(shù)據(jù)到兩個變量中cout a= a , b= b endl; /查看結果查看結果 indata.close(); /關閉文件關閉文件a=23,b=25.8高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail
46、: c_錯誤處理函數(shù)錯誤處理函數(shù)在在ios類中定義了檢測錯誤的成員函數(shù):類中定義了檢測錯誤的成員函數(shù):u int rdstateint rdstate() (): 返回當前錯誤狀態(tài)返回當前錯誤狀態(tài); ; uintint eofeof() (): 已到文件尾返回非已到文件尾返回非0 0值值; ; uintint fail()fail(): 如果出現(xiàn)不可恢復的錯誤或預期的條件如果出現(xiàn)不可恢復的錯誤或預期的條件, ,如文件沒找到,返回非如文件沒找到,返回非0 0值值 ; ;uintint bad() bad(): 如果出現(xiàn)不可恢復的錯誤,返回非如果出現(xiàn)不可恢復的錯誤,返回非0 0值值; ; uint
47、int good() good(): 如果沒有錯誤條件如果沒有錯誤條件, ,和沒有設置文件結和沒有設置文件結尾標志,返回非尾標志,返回非0 0值值 ; ;高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_檢查文件是否成功打開檢查文件是否成功打開如果如果open函數(shù)要打開的函數(shù)要打開的文件不存在文件不存在,或其他,或其他原因打開失敗,則原因打開失敗,則程序可能不會報告任何錯誤程序可能不會報告任何錯誤,正常執(zhí)行,但是得到的是一個正常執(zhí)行,但是得到的是一個非預期的結果非預期的結果。最好在最好在執(zhí)行執(zhí)行open函數(shù)之后,判斷函數(shù)之后,判斷open調用是調用是否成功否成功,如果不成功則終止
48、程序。,如果不成功則終止程序。u可以用可以用成員函數(shù)成員函數(shù)fail()來測試一個操作是否失敗。來測試一個操作是否失敗。ufail函數(shù)的返回類型是函數(shù)的返回類型是bool,即布爾類型。,即布爾類型。u如:如:in_stream.fail(); /1或或0u out_stream.fail();/1或或0高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_#include#include#includeusing namespace std;/=主函數(shù)主函數(shù)=int main()fstream inout;inout.open(inoutfile.txt);/文件輸入輸出流文件輸入輸
49、出流if(inout.fail() cout文件打開錯誤!文件打開錯誤!endl; exit(1); inout1234endl; /向文件輸入向文件輸入1234inoutthis is a output operationa; /取文件數(shù)據(jù)到整型變量取文件數(shù)據(jù)到整型變量inout.get(ch); /獲得換行符獲得換行符getline(inout,str); /取文件數(shù)據(jù)到字符串變量取文件數(shù)據(jù)到字符串變量inout.close(); /關閉輸入輸出文件流關閉輸入輸出文件流couta=aendl;coutch; /輸出得到的換行符輸出得到的換行符coutstr=strendl;return 0
50、;a=1234str=this is a output operation高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_二進制文件二進制文件文本文件文本文件:可以像對待控制臺一樣讀寫這類文:可以像對待控制臺一樣讀寫這類文件,通常寫入一個文本文件的每一個字節(jié)都是件,通常寫入一個文本文件的每一個字節(jié)都是一個可打印字符的一個可打印字符的ASCII代碼。代碼。二進制文件:使用數(shù)據(jù)的實際數(shù)值來寫,這種二進制文件:使用數(shù)據(jù)的實際數(shù)值來寫,這種方法不會涉及方法不會涉及ASCII代碼。代碼。n代表一個換行符。代表一個換行符。u當該字符在控制臺上打印或寫入文本文件時,實際當該字符在控制臺上打印
51、或寫入文本文件時,實際執(zhí)行兩個操作,打印一個回車符,再打印一個換行執(zhí)行兩個操作,打印一個回車符,再打印一個換行符。符。u對于二進制文件,則不需要執(zhí)行任何轉換。對于二進制文件,則不需要執(zhí)行任何轉換。高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_二進制文件二進制文件如果文件以文本模式打開,應該使用與控制臺如果文件以文本模式打開,應該使用與控制臺通信相同的操作。這涉及到流操作符(通信相同的操作。這涉及到流操作符()以及)以及getline函數(shù)。函數(shù)。如果文件以二進制文件模式打開,使用如果文件以二進制文件模式打開,使用read和和write成員函數(shù)成員函數(shù)來讀寫數(shù)據(jù)塊,它們屬于直來讀
52、寫數(shù)據(jù)塊,它們屬于直接讀寫操作。接讀寫操作。get()和和put()成員函數(shù)成員函數(shù)一次只能讀寫一個字符。一次只能讀寫一個字符。高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_#include#includeusing namespace std;/=主函數(shù)主函數(shù)=int main()fstream charFile(char_file.txt,ios:out | ios:in | ios:binary);if(!charFile)cout文件打開失敗,請查看文件是否存在!文件打開失敗,請查看文件是否存在!endl;char ch;ch=o;charFile.put(ch);
53、/ 將將ch的內容寫入文件的內容寫入文件charFile.put(n); /將換行符寫入文件將換行符寫入文件charFile.put(6); /將字符將字符6寫入文件寫入文件charFile.seekg(2,ios:beg); /定位離文件首部偏移定位離文件首部偏移2字節(jié)的位置字節(jié)的位置charFile.get(ch); / 讀出一個字符讀出一個字符coutchendl; / 將其顯示在屏幕上將其顯示在屏幕上 coutcharFile.get()endl; /返回返回EOFcharFile.close();return 0;6-1高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_
54、#include#include#includeusing namespace std;int main()fstream blockFile(block_file.txt,ios:out | ios:in | ios:binary);char arr30;strcpy(arr,Welcome to C+ World!); /將將Welcome to C+ World!存入數(shù)組存入數(shù)組blockFile.write(arr,7); / 將前將前7個字符個字符-Welcome寫入文件寫入文件blockFile.seekg(ios:beg); / 定位至文件首部定位至文件首部 static cha
55、r read_arr10; / 在此存放讀出的數(shù)據(jù)在此存放讀出的數(shù)據(jù)blockFile.read(read_arr,3); / 讀出前三個字符讀出前三個字符-Welcoutread_arr endl; / 將它們輸出將它們輸出blockFile.close();return 0;Wel高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_讀寫數(shù)據(jù)塊讀寫數(shù)據(jù)塊 要讀寫二進制數(shù)據(jù)塊,使用成員函數(shù)要讀寫二進制數(shù)據(jù)塊,使用成員函數(shù)read()和和write()成員函數(shù)成員函數(shù),它們原型如,它們原型如下:下:uread(unsigned char *buf,int num);uwrite(co
56、nst unsigned char *buf,int num); 高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_讀數(shù)據(jù)塊函數(shù)讀數(shù)據(jù)塊函數(shù)read(unsigned char *buf,int num);read()從文件中讀取從文件中讀取 num 個字符到個字符到 buf 指向的指向的緩存中緩存中,如果在還未讀入如果在還未讀入 num 個字符時就到了個字符時就到了文件尾文件尾,可以用成可以用成員函數(shù)員函數(shù) int gcount();來取得實際讀取的來取得實際讀取的字符數(shù)。字符數(shù)。 高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_寫數(shù)據(jù)塊函數(shù)寫數(shù)據(jù)塊函數(shù)writ
57、e(const unsigned char *buf,int num);而而 write() 從從buf 指向指向的的緩存寫緩存寫 num 個字符個字符到文件中。到文件中。值得注意的是緩存的類型是值得注意的是緩存的類型是 unsigned char *,有時可能需要類型轉換。有時可能需要類型轉換。 高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_#include#include#includeusing namespace std;/=主函數(shù)主函數(shù)=int main() char str=You are kind!;int n=5,i;int arr5=3,5,6,78,90,
58、arr15=0; fstream inout(out.txt,ios:binary|ios:in|ios:out);inout.write(str,strlen(str);/把字符串把字符串str1全部寫到全部寫到out.txt中中 inout.write(char*)&n,sizeof(n); /把整型數(shù)據(jù)寫到把整型數(shù)據(jù)寫到out.txt中中 inout.write(char*)arr,sizeof(arr); /把數(shù)組數(shù)據(jù)寫到把數(shù)組數(shù)據(jù)寫到out.txt中中inout.seekg(17,ios:beg); /找到數(shù)組元素的其始位置指針找到數(shù)組元素的其始位置指針inout.read(char*)arr1,sizeof(arr);/從從out.txt中讀取指定個整數(shù),注中讀取指定個整數(shù),注意類型轉換意類型轉換inout.close(); for(i=0;i5;i+) coutarr1i=arr1iendl;return 0;arr10=3arr11=5arr12=6arr13=78arr14=90高級程序設計高級程序設計C+ 田秀霞田秀霞 E-Mail: c_11.3.5 文件指針的使用文件指針的使用 C+ I/O系統(tǒng)管理兩個與一個文件相聯(lián)系的指針。系統(tǒng)管理兩個與一個文件相聯(lián)系的指針。u一個是一個是讀指針讀指針,它說明輸入操作在文件中的位置,它說明輸入
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農家賓館租憑合同范例
- 臨時短期合同范例
- 基于Unity 3D的初中化學虛擬實驗的開發(fā)與應用研究
- 面向復合材料結構設計的可靠性解析分析方法研究
- 基于貪婪等價搜索算法的森林群落因果關系探究
- 教育教學論文-迸發(fā)思維火花
- 二手電梯房買賣合同范例
- 出租鋼架傘棚合同范例
- 基于光熱信息的參與性介質物性參數(shù)和時變邊界熱流辨識
- 出資出力合伙協(xié)議合同范例
- 關于境內機構境外放款登記業(yè)務的申請書【模板】
- 九三學社申請入社人員簡歷表
- 2024年湖南株洲市天元區(qū)社區(qū)專職工作者招聘筆試沖刺題(帶答案解析)
- 腎臟疾病的早期發(fā)現(xiàn)和治療
- 村級財務監(jiān)督培訓課件
- 2024年赤峰職業(yè)技術學院高職單招(英語/數(shù)學/語文)筆試歷年真題摘選含答案解析
- 品質組長晉升述職報告
- 大數(shù)據(jù)在國家安全與防控中的作用
- 水電廠設備分析報告
- 電腦一體機技術方案
- GB/T 9364.8-2023小型熔斷器第8部分:帶有特殊過電流保護的熔斷電阻器
評論
0/150
提交評論