




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、,第八章 C+ I/O流標準庫,本章內(nèi)容,I/O流概述 流的輸入和輸出操作 格式化輸入輸出,教學重點:,掌握對文本文件的打開和關閉操作; 掌握流插入運算符()和輸入流類成員函數(shù)get(),getline()的使用;,一、 C+ I/O流概述,I/O流:數(shù)據(jù)在外部設備和內(nèi)存之間的數(shù)據(jù)流 輸入流:由外部設備流向內(nèi)存的數(shù)據(jù)流。從輸入流中獲取數(shù)據(jù)的操作稱為輸入、讀或提取操作。 輸出流:由內(nèi)存流向外部設備的數(shù)據(jù)流。將數(shù)據(jù)放入輸出流的操作稱為輸出、寫或插入操作。 I/O操作的要素:指定I/O設備、I/O操作類型和方式、操作對象,內(nèi)存,x,y,2,3,cinxy;,3 2,3 2,輸出設備,輸入設備,屏幕,
2、磁盤文件,鍵盤,磁盤文件,1. 程序中的輸入/輸出操作,coutxy;,CPU,一、 C+ I/O流概述,2.C+ I/O流類庫 C+系統(tǒng)提供的完成I/O操作的一組類。主要包括: 標準流類:處理與標準輸入設備(鍵盤)和輸出設備(顯示器)關聯(lián)的數(shù)據(jù)流 文件流類:處理與磁盤文件關聯(lián)的數(shù)據(jù)流 字符串流類:利用內(nèi)存中的字符數(shù)組處理數(shù)據(jù)的輸入輸出 異常類等:處理異常錯誤,常用I/O流類列表,fstream.h,輸入/輸出文件流類,fstream,iostream.h,通用輸入/輸出流類和其他輸入/輸出流的基類,iostream,fstream.h,輸出文件流類,ofstream,fstream.h,輸入
3、文件流類,ifstream,iostream.h,通用輸出流類和其他輸出流類的基類,istream,iostream.h,流的抽象基類,ios,包含文件,說 明,類 名,ostream,通用輸入流類和其他輸入流的基類,iostream.h,3.使用I/O流的基本步驟 (1)聲明I/O流類的對象,以指明程序中所使用的I/O流類型。 (2)將I/O流類的對象與具體的設備關聯(lián)以指定完成操作的具體設備。 (3)選取適當?shù)腎/O操作方法來實現(xiàn)數(shù)據(jù)的讀寫。,注意: 對于標準流,只需第三步。 對于其他流,三步都需要。,1. 使用的類 istream、 ostream、iostream 2. 需要的頭文件 i
4、ostream.h 3.C+中已預定義的標準I/O流類對象 cin:istream 類的對象,處理標準輸入設備的輸入。 cout:ostream 類的對象,處理標準輸出設備的輸出。 cerr:ostream 類的對象,處理在標準輸出設備上輸出 錯誤信息(非緩沖)。 clog:ostream 類的對象,處理在標準輸出設備上輸出 錯誤信息(緩沖)。,二、標準 I/O流的使用,4.輸入輸出方法 1)使用C+已重載的通用流運算符 (提取運算符):輸入,從流中獲取數(shù)據(jù)到內(nèi)存。 (插入運算符):輸出,將內(nèi)存數(shù)據(jù)添加到流中輸出。 注意: C+已重載的通用流運算符只能處理基本的數(shù)據(jù)類型的數(shù)據(jù),如果要處理自定義
5、的類型數(shù)據(jù)需要用戶來重載 2)使用I/O流類的成員函數(shù),二、標準 I/O流的使用,5.常用的輸出流成員函數(shù) (1)put函數(shù) 該函數(shù)的用法是: 輸出流對象名.put(ch) 該函數(shù)僅輸出存儲在ch中的一個字符,且返回當前輸出流對象。 例如:cout.put(A).put(t);/屏幕輸出:At,二、標準 I/O流的使用,5.常用的輸出流成員函數(shù) (2)write函數(shù) 該函數(shù)的用法是: 輸出流對象名.write(s,n) 該函數(shù)輸出字符指針s與所指向的字符串中的n個字符。當s所指字符串不足n時補空格,返回當前輸出流對象。 例1: cout.write(12345,3).write(ABCDE,7
6、).put(t); 輸出結果為: 123ABCDE t 例2: int a5=1,2,3,4,5; cout.write(char *)a,sizeof(a); cout.write(char *) 輸出結果為:,二、標準 I/O流的使用,5.常用的輸入流成員函數(shù),二、標準 I/O流的使用,格式1:輸入流對象名.get(), 功能:從輸入流中讀取一個字符(包括空白符),并將該字符作為函數(shù)返回值,若遇流結束符,返回EOF。 其中:空白符指的是空格符制表符換行符以及轉義字符流結束符是指:ctrl+z 例:將鍵盤輸入若干字符中的第一個#存入字符變量 char c; doc=cin.get();whi
7、le(c!=#);,1)使用get()函數(shù)讀入字符數(shù)據(jù),1)使用函數(shù)get() 讀入字符數(shù)據(jù),格式2:輸入流對象名.get(c) 功能:從輸入流中讀取一個字符(包括空白符)賦給字符變量c,若遇文件結束符,返回0,否則返回非0。 例:將鍵盤輸入若干字符中的第一個#存入字符變量 char c; docin.get(c);while(c!=#);,1)使用函數(shù)get() 讀入字符數(shù)據(jù),格式3:輸入流對象名.get(s,n,終止字符); 功能:從輸入流讀取n-1個字符,并在其后加入0,存放在由s指向的內(nèi)存空間。若遇終止字符或流結束符則提前結束讀操作。終止字符的缺省值為n 。 返回值: 調(diào)用該函數(shù)的輸入
8、流對象。,例8-3:get函數(shù)使用示例,2)使用getline()讀入字符串。,功能: 從輸入流讀取n-1個字符,在其后加入0,存放在由字符指針s指向的內(nèi)存空間。若遇終止字符或流結束符則提前結束讀操作。終止字符的缺省值為n 。 返回值:調(diào)用該函數(shù)的輸入流對象,調(diào)用形式為: 輸入流對象.getline(字符指針s,字符個數(shù)n,終止字符);,例8-4:與getline輸入字符數(shù)據(jù)的區(qū)別,例:帶三個參數(shù)get與getline輸入的區(qū)別,使用get,使用getline,執(zhí)行,執(zhí)行,差別是:在遇到終止字符時,get()使讀指針停在終止字符處,而getline()將讀指針移到終止字符的下一個位置。,例:文
9、件示例,執(zhí)行,Data.txt,三、文件I/O流的使用,0 0 1 2 文件結束符,字節(jié)編號:1 2 3 4 5 n-1 Ctrl+Z,(2)文件結構:C+把每個文件都看成是一個有序的字節(jié)序列,每個文件都以文件結束符標志文件的結束。例如:,(1)文件: 存儲在外部設備上的數(shù)據(jù)。用于長期保存數(shù)據(jù)。,三、文件I/O流的使用,1.磁盤文件簡介,存儲內(nèi)容,(3)文件格式 文本文件:數(shù)值和字符均按ASCII碼格式存儲 例如,數(shù)字3.141存儲時占5個字節(jié)。 00110011 00101110 00110001 00110100 00110001 二進制文件:字符按ASCII碼存儲,數(shù)值按內(nèi)部形式存儲 例
10、如,數(shù)字3.141存儲時占4個字節(jié)。 01000000 01001001 00001111 11010000 文本文件可以用文本編輯器打開查看便于閱讀,讀寫時需要進行格式轉換;二進制文件用文本編輯器打開時看到的是亂碼,不便于閱讀;讀寫時不需要格式轉換,效率高。,三、文件I/O流的使用,示例,示例,(4)文件的讀寫方式,隨機方式:在文件的任何位置進行讀或?qū)憽?讀/寫指針,順序方式:按數(shù)據(jù)在文件中的物理排列順序依次讀或?qū)憽?注意:在C+中,文本文件只能以順序方式讀寫;二進制文件既可以順序方式讀寫也可以二進制方式讀寫。,2. 文件的使用 定義文件流對象 打開文件用于讀和寫 檢查打開是否成功 讀或?qū)憯?shù)
11、據(jù) 使用完文件后要關閉文件 3.文件流使用的類和頭文件 類:ifstream、ofstream、fstream 頭文件:fstream.h,四、 文件輸出流,定義文件輸出流對象 當在程序中要將數(shù)據(jù)寫入一個磁盤文件時,需要先定義一個ofstream類的對象(輸出流對象)并與該文件關聯(lián)。 方法主要有兩種:,方法1: 先定義輸出流類對象, 再調(diào)用open成員函數(shù)打開文件,例:ofstream outfile; /建立文件輸出流類對象 outfile.open(“datal.txt”,ios:out); /打開文件,方法2: 在定義輸出流類對象時打開相關聯(lián)的文件,例:ofstream outfile
12、(“datal.txt”,ios:out);,四、輸出流,2. 文件打開成功與否的判斷方法 打開文件失敗,對象取值為0;成功則為非0。 3.使用完文件后應該關閉文件,方法是: 文件流對象.close();,四、輸出流,4.向輸出流插入數(shù)據(jù)的方法 1)使用重載的流插入運算符()輸出各種數(shù)據(jù) 2)使用輸出流類成員函數(shù)put()輸出一個字符。 3)使用輸出流類成員函數(shù)write()以二進制形式輸出數(shù)據(jù)。,例1 使用向文本文件寫入數(shù)據(jù),執(zhí)行,test1.txt,例2:put函數(shù)使用示例,執(zhí)行,file1.txt,file2.txt,例3 使用write()向二進制文件寫入數(shù)值數(shù)據(jù)。, 使用write(
13、)寫入數(shù)值數(shù)據(jù),一定是二進制文件,用文本編輯器打開時看到的是亂碼。,執(zhí)行,test3,五、文件輸入流,定義文件輸入流對象 從一個磁盤文件輸入數(shù)據(jù)前,需要定義一個ifstream類的對象(輸入流對象)與該文件關聯(lián)。方法主要有兩種:,方法1: 先定義文件對象,然后調(diào)用open成員函數(shù)打開文件,例:ifstream infile; /聲明文件輸入流對象 infile.open(“data1.txt”,ios:in); /打開文件,使流對象與文件建立聯(lián)系,方法1: 在定義文件對象時打開相關聯(lián)的文件,例:ifstream infile (“data1.txt”,ios:in);,五、文件輸入流,2.從輸
14、入流提取數(shù)據(jù)的方法 1)使用重載的流提取運算符()輸入各種數(shù)據(jù) 2)使用輸入流類成員函數(shù)get()輸入字符數(shù)據(jù)。 3)使用輸入流類成員函數(shù)getline()輸入字符數(shù)據(jù) 4)使用輸入流類成員函數(shù)read()從二進制文件讀入數(shù)據(jù),3. 判斷到達文件尾的方法 利用輸入流成員函數(shù)eof( ) 如果到達文件尾,沒有可讀的內(nèi)容,返回非0,否則返回0 利用get函數(shù)的返回值是否是EOF來判斷 利用提取運算符 提取數(shù)據(jù),如果沒有內(nèi)容可讀返回 0,否則返回非0,五、文件輸入流,例1 使用提取運算符()從文本文件讀數(shù)據(jù)。,執(zhí)行,例2 使用成員函數(shù)getline()從文本文件讀數(shù)據(jù)。,例3 利用讀取文件中的數(shù)值數(shù)
15、據(jù)示例。,執(zhí)行,test.txt,例4: get函數(shù)使用示例。,執(zhí)行,file1.txt,file2.txt,4)使用輸入流類成員函數(shù)read() 讀取數(shù)據(jù)。, 該函數(shù)主要用于對二進制文件的讀取。,格式: 輸入流對象名. read(buf, n) 功能:從輸入流中讀取n個字節(jié)(含換行符在內(nèi))或遇到輸入流結束符(ctrl+z)時結束操作讀入的數(shù)據(jù)存入字符指針buf所指存儲區(qū),且不在字符串尾添加空字符(0) 返回值:當前輸入流對象,例5 讀寫二進制文件示例。,執(zhí)行,data3.dat,六、以隨機方式讀/寫文件, 對文件的讀寫受到一個定位指針的控制。 讀指針:從讀指針當前所指位置讀出數(shù)據(jù),向后移動讀
16、指針使其指向下一個數(shù)據(jù)。 寫指針:把數(shù)據(jù)寫到寫指針當前所指位置,向后移動寫指針,使其指向下一個寫數(shù)據(jù)的位置。, 利用C+流類中提供的成員函數(shù),可改變讀/寫指針,從而實現(xiàn)對文件的隨機讀/寫。, 隨機訪問多用于二進制文件。,六、以隨機方式讀/寫文件, 操作寫指針的成員函數(shù) 1)移動寫指針。 調(diào)用格式1: 輸出流對象名.seekp(流中位置); 調(diào)用格式2: 輸出流對象名.seekp(偏移量,參照位置); 取ios類中的枚舉量:beg(0)相對文件頭; curr(1)相對文件當前位置;end(2)相對文件尾。 2)返回寫指針當前位置(相對于文件頭的字節(jié)數(shù))。 調(diào)用格式: 輸出流對象名.tellp()
17、,六、以隨機方式讀/寫文件, 操作讀指針的成員函數(shù) 1)移動讀指針。 調(diào)用格式1: 輸入流對象名.seekg(流中位置); 調(diào)用格式2: 輸入流對象名.seekg(偏移量,參照位置); 取ios類中的枚舉量:beg(0)相對文件頭; curr(1)相對文件當前位置;end(2)相對文件尾。 2)返回讀指針當前位置(相對于文件頭的字節(jié)數(shù))。 調(diào)用格式: 輸入流對象名.tellg(),例 文件的隨機訪問示例。把100個素數(shù)存入文件data.bin。從文件data.bin中取出第n個素數(shù)并輸出。,8.4 格式化輸入輸出, 格式化輸入輸出是指控制文本模式I/O流的格式。例如,設置字段寬度、對齊方式、輸出數(shù)字的精度等。C+提供兩種進行格式化輸入輸出的方法: 用ios類的成員函數(shù)設置格式 使用格式操縱算子 格式成員函數(shù)和格式操縱算子詳細情況見書。,例:格式化輸出成員函數(shù)使用示例。,0123456
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 榕江縣社會實踐報告范文
- 鉗工認知報告范文
- 汽車座椅對標報告范文
- 二零二五年度年委托付款協(xié)議書(跨境金融結算與風險管理服務協(xié)議)
- 二零二五年度股東持股比例調(diào)整與公司分紅政策協(xié)議
- 2025年度智能化勞務安全協(xié)議書
- 2025年度高科技產(chǎn)業(yè)合伙投資合同協(xié)議書
- 二零二五年度現(xiàn)代化辦公區(qū)域保潔與安保綜合服務合同
- 二零二五年度玉米收購資金托管服務合同
- 二零二五年度個人借公司資金用于購房的貸款合同
- 體育測量與評價04心肺功能的測量與評價
- 提高意識風險防范化解能力體會發(fā)言
- RB/T 089-2022綠色供應鏈管理體系要求及使用指南
- 2023年度危險作業(yè)安全監(jiān)護手冊
- 馬克思主義哲學十講
- 永磁同步電機地設計與電磁分析報告
- 催化材料智慧樹知到答案章節(jié)測試2023年南開大學
- GB/T 9846.1-2004膠合板第1部分:分類
- GB/T 32685-2016工業(yè)用精對苯二甲酸(PTA)
- 部編優(yōu)質(zhì)課國家一等獎初中語文八年級下冊《大道之行也》
- 小學六年級下冊心理健康教育-1多種角度看自己-課件
評論
0/150
提交評論