




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、C+面向?qū)ο蟪绦蛟O(shè)計(第二版)主編 曹靜 中國水利水電出版社C+面向?qū)ο蟪绦蛟O(shè)計(第二版)第八章 數(shù)據(jù)流與文件的輸入/輸出2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計第八章 數(shù)據(jù)流與文件的輸入/輸出t8.1 I/O流的概念t8.2 數(shù)據(jù)流的控制t8.3 文件的輸入/輸出t項(xiàng)目設(shè)計7 校園信息管理系統(tǒng)中的數(shù)據(jù)存儲2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計8.1 I/O流的概念t流是一種抽象,它負(fù)責(zé)在數(shù)據(jù)的生產(chǎn)者和數(shù)據(jù)的消費(fèi)者之間建立聯(lián)系,并管理數(shù)據(jù)的流動。t當(dāng)程序與外界環(huán)境進(jìn)行信息交換時,存在著兩個對象,一個是程序中的對象,另一個是文件對象。t程序建立一個流對象,并指定這個流對象與某個文件對象
2、建立連接,程序操作流對象,流對象通過文件系統(tǒng)對所連接的文件對象產(chǎn)生作用。t讀操作在流數(shù)據(jù)抽象中被稱為(從流中)提取,寫操作被稱為(向流中)插入。2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計8.2 數(shù)據(jù)流的控制t8.2.1 數(shù)據(jù)流的格式控制t8.2.2 常用的輸入/輸出函數(shù)t8.2.3 數(shù)據(jù)流的錯誤偵測2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計8.2.1 數(shù)據(jù)流的格式控制t插入()運(yùn)算符是為所有標(biāo)準(zhǔn)C+數(shù)據(jù)類型定義的,其作用是向流中傳送和讀取數(shù)據(jù)。插入和提取運(yùn)算符與預(yù)先定義的操作符一起工作,用來控制輸入和輸出格式。1輸出寬度l為了調(diào)整輸出時的顯示寬度,可以通過調(diào)用width成員函數(shù)為每個項(xiàng)(i
3、tem)指定輸出寬度或在流中放入setw操縱符。 2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計8.2.1 數(shù)據(jù)流的格式控制2對齊方式l輸出流的默認(rèn)對齊方式為文本右對齊,程序中可以用setiosflags和resetiosflags操作符重設(shè)對齊方式。 3精度l使用setprecision操作符改變精度,該操作符有兩個標(biāo)志,ios:fixed和ios:scientific。 4進(jìn)制l可以用dec、oct和hex操縱符設(shè)置輸入和輸出的默認(rèn)進(jìn)制。 2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計8.2.2 常用的輸入/輸出函數(shù)常用istream成員函數(shù)包含:tint istream:get()l如果輸入
4、流包括附加的數(shù)據(jù),函數(shù)取得并返回下一個字符;否則它返回EOF。tistream& istream:get(char &c)l如果輸入流包括附加的數(shù)據(jù),函數(shù)取得并將下一個字符分配給c;否則就是沒有定義對c的作用。返回一個對*this(調(diào)用對象)的引用。2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計8.2.2 常用的輸入/輸出函數(shù)tistream& istream:get(char s,int n,char delim=n)l從輸入流獲取字符并將它們分配給s直到下面的一個條件發(fā)生:取得n-1個字符,沒有輸入字符了,或者下一個接收的字符的值為delim。tistream&
5、; istream:getline(char s,int n,char delim=n)l從輸入流獲取字符并將它們分配給s直到下面的一個條件發(fā)生:取得n-1個字符,沒有輸入字符了,或者下一個接收的字符的值為delim。 2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計8.2.2 常用的輸入/輸出函數(shù)tint istream:peak()l如果輸入流包括附加的數(shù)據(jù),函數(shù)返回下一個接收的字符;否則它返回EOF。tistream& istream:unget(char c)l字符c被送到輸入流。它將是下一個要接收的字符。函數(shù)返回一個對*this的引用。庫iostream還提供對ios成員函數(shù)的訪
6、問,一些程序在輸入流中檢測文件尾。tbool ios:eof()l如果流中達(dá)到文件尾則返回真;否則函數(shù)返回假。2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計8.2.2 常用的輸入/輸出函數(shù)庫iostream還提供兩個類似get()和getline()的ostream成員函數(shù)。tostream& ostream:put(char c)l將字符c插入輸入流中。函數(shù)返回一個對*this的引用。tostream& ostream:write(const char s,int n)l將s中的n個字符插入到輸入流中。空字符也是有效的。函數(shù)返回一個對*this的引用。庫iostream還提供常
7、用的ostream成員函數(shù)。tostream& ostream:flush()l強(qiáng)制任何沒有完成的操作符插入完成。函數(shù)返回一個對*this的引用。2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計8.2.3 數(shù)據(jù)流的錯誤偵測 流cerr和clog把顯示輸出到默認(rèn)錯誤日志上,該日志通常是控制臺顯示器。t對流cerr的每個插入請求應(yīng)該立即送出顯示。下面給出幾個錯誤消息的例子:lcerr系統(tǒng)將在10秒后重起!n;lcerr輸入值無效,請重新輸入!n; 2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計8.2.3 數(shù)據(jù)流的錯誤偵測t如果出于效率的緣故,則有必要緩沖錯誤和系統(tǒng)狀態(tài)消息,這樣就應(yīng)該使用帶緩沖的
8、錯誤流clog。像cerr一樣,clog通常是定向到顯示器。下面給出幾個樣例:lclogUserName成功登陸!n;lclog有新郵件!n;2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計8.3 文件的輸入/輸出t8.3.1 fstream類t8.3.2 格式化文字模式的文件I/Ot8.3.3 二進(jìn)制模式的文件I/Ot8.3.4 文件指針的使用2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計8.3.1 fstream類tC+里負(fù)責(zé)文件輸入/輸出的類主要有ifstream(文件輸入)、ofstream(文件輸出)以及fstream(文件輸入/輸出)。t所謂文件的I/O(輸入/輸出)是指以程序?yàn)橹鞯慕嵌?/p>
9、而言,文件打開為輸入狀態(tài)時(in),表示程序?qū)⒂晌募x入數(shù)據(jù);文件打開為輸出狀態(tài)時(out),表示程序?qū)⑤敵鰯?shù)據(jù)至文件。t我們通常將數(shù)據(jù)由文件輸入到程序稱之為讀取,程序?qū)?shù)據(jù)輸出到文件稱之為寫入。 2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計8.3.1 fstream類tfstream類可以用于將數(shù)據(jù)寫入文件,或讀取文件的數(shù)據(jù)。要使用fstream類執(zhí)行文件的I/O時,首先必須先定義一個fstream類的對象。例如:lfstream file; / 定義一個fstream對象t利用fstream所提供的open成員函數(shù) ,打開一個文件。傳入open函數(shù)的參數(shù)有兩個,一個傳入欲打開的磁盤文件的名
10、稱,另一個傳入打開該文件的模式參數(shù)。lfile.open(MyFile.txt,ios:in); / 在讀取模式下打開MyFile.txt文件 2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計8.3.1 fstream類t表8-1 文件流的文件打開模式模式參數(shù) 功 能ios:in文件打開為讀取(輸入)狀態(tài),此為istream類的默認(rèn)模式參數(shù)ios:out文件打開為寫入(輸出)狀態(tài),此為ostream類的默認(rèn)模式參數(shù)ios:ate打開一個現(xiàn)存文件,從文件結(jié)尾處讀取(輸入)或?qū)懭耄ㄝ敵觯﹊os:app打開一個輸出文件從文件結(jié)尾寫入(輸出)數(shù)據(jù)ios:trunc打開一個文件,如果它已經(jīng)存在,就刪除其中原
11、有的內(nèi)容ios:nocreate如果一個文件存在則打開它,否則該操作失敗ios:noreplace如果一個文件不存在則作為新文件打開它;如果文件已存在,則該操作失敗ios:binary以二進(jìn)制模式打開一個文件,默認(rèn)是文本模式2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計8.3.1 fstream類t表8-2 文件處理函數(shù)函 數(shù) 功 能 說 明open(filename,mode)以mode模式打開名為filename的文件close()關(guān)閉文件is_open()檢查文件是否為打開狀態(tài),是則返回真,否則返回假write(str,size)將str數(shù)組中size個字符寫入到文件中read(str,s
12、ize)從文件中讀取數(shù)據(jù)至文件結(jié)尾,并設(shè)定給str數(shù)組,但至多不超過size個字符2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計8.3.1 fstream類tC+的文件I/O模式分為兩種,一種為格式化文字模式,另一種為二進(jìn)制模式,默認(rèn)的文件I/O模式為文字模式。t當(dāng)使用格式化文字模式時,輸出至文件的內(nèi)容將被儲存為字符,因此,格式化文字模式適合儲存字符或字符串。t如果以二進(jìn)制的方式處理數(shù)字,不論是儲存的方式,還是占有文件空間的方式都與其儲存在內(nèi)存中的方式相同,因此,在儲存數(shù)字時使用二進(jìn)制模式是比較合適的。 2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計8.3.2 格式化文字模式的文件I/Ot文件的最
13、小單位為字符,由字符組成一個字段,好幾個字段組成一個記錄,而一個文件則由好幾筆記錄組成。t將數(shù)據(jù)輸入輸出到文件中,除了可以使用write和read函數(shù)外,還可以使用“”運(yùn)算符,而所有在8.2.1節(jié)中提及的格式控制方法,均可以在文件I/O中使用。2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計8.3.3 二進(jìn)制模式的文件I/Ot在二進(jìn)制模式下,文件的I/O將利用write和read函數(shù)將所有數(shù)據(jù)以字節(jié)形式儲存至文件里。t對于原本就是字符的數(shù)據(jù),并不需要轉(zhuǎn)型,即可讀取/寫入到文件里;但對于數(shù)字型的數(shù)據(jù),則必須轉(zhuǎn)為字符指針,然后傳入write和read函數(shù)。2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計8
14、.3.4 文件指針的使用t文件指針是文件讀取/寫入數(shù)據(jù)時插入或輸出的位置。文件指針有兩種,一個是寫入指針,另一個是讀取指針。當(dāng)文件被打開時,這兩個指針都將被設(shè)定指向文件的起始處。t在ios類里,定義了三個特定的文件指針。通過指針函數(shù)與特定的指針的配合使用,可供在處理文件I/O時移動文件指針之用。這三個位移指針分別是ios:beg(文件開頭)、ios:end(文件結(jié)尾)、ios:cur(當(dāng)前的指針位置)。 2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計8.3.4 文件指針的使用t表8-3 文件指針函數(shù)文件指針函數(shù) 功 能 說 明seekg(pos,seek_dir)設(shè)定文件讀?。ㄝ斎耄┲羔樀骄嚯x文
15、件某一特定指針pos個字節(jié)的位置。特定指針由seek_dir指定,有以下三種ios:beg(文件起始)、ios:cur(當(dāng)前文件指針的位置)或ios:end(文件結(jié)尾)pos=tellg()返回當(dāng)前文件讀取指針的位置seekp(pos,seek_dir)設(shè)定文件寫入(輸出)指針到距離文件某一特定指針pos個字節(jié)的位置。特定指針由seek_dir指定,有以下三種ios:beg(文件起始)、ios:cur(當(dāng)前文件指針的位置)或ios:end(文件結(jié)尾)pos=tellp()返回當(dāng)前文件寫入指針的位置2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計項(xiàng)目設(shè)計7 校園信息管理系統(tǒng)中的數(shù)據(jù)存儲t1 設(shè)計題目校園信息管理系統(tǒng)中的數(shù)據(jù)存儲t2 設(shè)計概要 要求掌握面向?qū)ο蟪绦蛟O(shè)計方法,I/O流的概念,以及如何利用文件存儲對象。t3 系統(tǒng)分析t4 功能模塊設(shè)計2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計3 系統(tǒng)分析t現(xiàn)在校園信息管理系統(tǒng)已經(jīng)能夠完成人員信息的輸入、顯示和分析等一系列工作,但是現(xiàn)在的程序并不能將信息長期保存,所以,將數(shù)據(jù)永久的保存是校園信息管理系統(tǒng)必
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 過繼協(xié)議書范本
- 輻射貼模具合同協(xié)議
- 還款貸款協(xié)議書范本
- 普查保密協(xié)議書
- 退林還耕協(xié)議合同書范本
- 車車輛銷售合同協(xié)議
- 星星獎勵協(xié)議書
- 死者債權(quán)協(xié)議書
- 遺贈扶養(yǎng)協(xié)議書合同
- 遠(yuǎn)程雇用協(xié)議性合同
- 形勢與政策(吉林大學(xué))知到智慧樹章節(jié)測試課后答案2024年秋吉林大學(xué)
- 質(zhì)量監(jiān)督員聘用合同
- 《電力建設(shè)工程施工安全管理導(dǎo)則》(NB∕T 10096-2018)
- 9.2解析三大訴訟 課件高中政治統(tǒng)編版選擇性必修二法律與生活
- 國家自然科學(xué)基金學(xué)科分類目錄及代碼表
- 藥企醫(yī)學(xué)事務(wù)部職責(zé)
- “雙碳”背景下船舶CCUS系統(tǒng)關(guān)鍵技術(shù)分析與應(yīng)用研究
- 國開(四川)2024年秋《地域文化》形考任務(wù)1-2答案終結(jié)性考核答案
- 競聘班組長課件
- 高中數(shù)學(xué)大題各題型答題模板+必背公式
- 勞務(wù)合同范例美團(tuán)外賣
評論
0/150
提交評論