江南大學(xué)C語(yǔ)言程序設(shè)計(jì)本科第十三章ppt課件.ppt_第1頁(yè)
江南大學(xué)C語(yǔ)言程序設(shè)計(jì)本科第十三章ppt課件.ppt_第2頁(yè)
江南大學(xué)C語(yǔ)言程序設(shè)計(jì)本科第十三章ppt課件.ppt_第3頁(yè)
江南大學(xué)C語(yǔ)言程序設(shè)計(jì)本科第十三章ppt課件.ppt_第4頁(yè)
江南大學(xué)C語(yǔ)言程序設(shè)計(jì)本科第十三章ppt課件.ppt_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

回顧 結(jié)構(gòu)體的使用共用體的使用枚舉變量結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體指針鏈表的使用 問(wèn)題 1 前面題目的結(jié)果是后面的輸入時(shí) 2 程序運(yùn)行的結(jié)果需要長(zhǎng)期保存 或有其他用途時(shí) 3 調(diào)試程序時(shí) 輸入數(shù)據(jù)量多 引入文件 第13章文件 掌握文件的打開(kāi)和關(guān)閉掌握并能熟練使用以下函數(shù)fputc fgtc fgets fputs fread fwrite fprintf fscanf Focus 一 文件的基本概念1 文件的一般概念文件 file 存儲(chǔ)在外部介質(zhì)上數(shù)據(jù)的集合 OS將外部設(shè)備也看作文件 終端的鍵盤 顯示器均看作I O文件 第一節(jié)c文件概述 2 C的文件系統(tǒng)緩沖文件系統(tǒng) 系統(tǒng)自動(dòng)為每個(gè)正在使用的文件系統(tǒng)在內(nèi)存中開(kāi)辟一個(gè)緩沖區(qū) 程序與文件之間的I O經(jīng)由緩沖區(qū) ANSIC標(biāo)準(zhǔn)采用緩沖文件系統(tǒng) 非緩沖文件系統(tǒng) 系統(tǒng)不自動(dòng)開(kāi)辟緩沖區(qū) 由程序?yàn)槊總€(gè)文件設(shè)定緩沖區(qū) 由于C與UNIX關(guān)系密切 UNIXI O系統(tǒng)使用非緩沖文件系統(tǒng) 因而多數(shù)C也兼容之 C的I O系統(tǒng)在程序員和設(shè)備間提供了一級(jí)抽象 這個(gè)抽象被稱為流 stream 而實(shí)際設(shè)備則稱為文件 files 文件由緩沖文件系統(tǒng)變換成抽象的邏輯設(shè)備流 C文件是字符 文本 流或二進(jìn)制流 無(wú)其它高級(jí)語(yǔ)言所具有的記錄界限 存取以字節(jié)為單位 I O的開(kāi)始和結(jié)束僅受程序控制而不受流中符號(hào)的控制 共有兩類流 文本流 text 和二進(jìn)制流 binary 二 文件流與文件 文本流文本流 textstream 是一種字符序列 以ASCII碼存放 每字符占一個(gè)字節(jié) 數(shù)值需要逐位轉(zhuǎn)換 32767存為51 50 55 54 55計(jì)五個(gè)字節(jié) n 變?yōu)橐粋€(gè)回車 換行符號(hào)對(duì) CR LFcarraigereturn linefeed ASCII碼13 10 文件末有一字符 z ASCII碼為26 二進(jìn)制流二進(jìn)制流 binarystream 是一種字節(jié)序列 數(shù)值以二進(jìn)制數(shù)表示 32767存為7FFFH int型時(shí)占兩個(gè)字節(jié) 不需轉(zhuǎn)換 節(jié)省存儲(chǔ)空間 從而方便存取 提高速度 標(biāo)準(zhǔn)流ANSIC有三個(gè)預(yù)定義的標(biāo)準(zhǔn)流 stdin stdout stderr 也稱為標(biāo)準(zhǔn) 文件 它們都對(duì)應(yīng)終端 程序運(yùn)行時(shí)系統(tǒng)自動(dòng)將它們打開(kāi) 運(yùn)行結(jié)束自動(dòng)關(guān)閉 例如 使用scanf gets 等函數(shù)時(shí)使用stdin流 對(duì)應(yīng)標(biāo)準(zhǔn)輸入 鍵盤 使用printf puts 時(shí) 使用stdout流 對(duì)應(yīng)標(biāo)準(zhǔn)輸出 顯示器 stderr流也對(duì)應(yīng)標(biāo)準(zhǔn)輸出 顯示器 三 文件的基本操作步驟 打開(kāi)文件 讀寫 創(chuàng)建 文件 關(guān)閉文件 在 stdio h 中 QC struct iobuf char FAR ptr int cnt char FAR base char flag char file typedefstruct iobuffile 例如 file fp1 fp2 typedefstruct int fd 文件號(hào) int cleft 緩沖區(qū)剩下的字符 int mode 文件操作模式 char nextc 下一個(gè)字符指針 char buff 文件緩沖區(qū)指針 file 四 指向文件的指針變量 1 打開(kāi)文件file fp fp fopen mode 為文件名 路徑名 mode對(duì)文件的訪問(wèn)方式一般方法如下 file fp if fp fopen c doc exam txt w NULL puts cannotopenthefile n exit 1 第二節(jié)文件的打開(kāi)與關(guān)閉 mode意義 r 讀文本文件 w 寫或創(chuàng)建文本文件 a 向文本文件追加 rb 讀二進(jìn)制文件 wb 寫或創(chuàng)建二進(jìn)制文件 ab 向二進(jìn)制文件追加 mode意義 r 讀寫文本文件 w 讀寫 創(chuàng)建 文本文件 a 向文本文件追加 rb 讀打開(kāi) 二進(jìn)制文件 wb 讀寫 創(chuàng)建 二進(jìn)制文件 ab 向二進(jìn)制文件讀寫 追加 2 關(guān)閉文件fclose 或 if fclose printf closeerror exit 2 使用FILE類型和fopen fclose 函數(shù)應(yīng)包含stdio h 1 輸入輸出字符1 I O字符ch fgetc fp fputc ch fp 第三節(jié)讀寫文件 putchar ch 實(shí)際上是用fputc ch fp 定義的一個(gè)宏 defineputchar ch fputc ch stdout 默認(rèn)輸出到顯示器即標(biāo)準(zhǔn)輸出文件stdout 2 判斷文件尾fgetc 在讀到文件末尾時(shí) 返回文件結(jié)束標(biāo)志EOF 在stdio h中定義為 1 此標(biāo)志只適合于文本文件 因?yàn)槎M(jìn)制文件中的數(shù)值 1會(huì)與其相混 造成提前結(jié)束 常用feof 函數(shù)測(cè)試文件尾 若是文件結(jié)束返回值1 它既可以用于二進(jìn)制文件也可以用于文本文件 feof 文件指針 返回值為1表示文件結(jié)束 例 假設(shè)軟盤a的根目錄下有一個(gè)ASCII碼文件 abc dat 其內(nèi)容為 Iamastudent 編程完成 1 顯示文件 abc dat 的內(nèi)容 2 把字符串 Youareaworker 寫入文件 abc dat 3 再次顯示文件 abc dat 的內(nèi)容 分析 顯示指定的文本文件內(nèi)容 再寫入新內(nèi)容 必須打開(kāi)文件并指定文件的使用方式為 r 表示對(duì)同一個(gè)文本文件先讀后寫 寫入的新內(nèi)容覆蓋原有的舊內(nèi)容 程序清單如下 includemain FILE fp char str Youareaworker intk if fp fopen a abc dat r NULL fp為NULL 表示文件打開(kāi)失敗 printf 文件不存在 n exit O while feof fp 當(dāng)文件沒(méi)有結(jié)束時(shí) feof fp 為假 feof fp 為真 putchar fgetc fp 顯示文件 abc dat 的原有內(nèi)容 printf n rewind fp 把文件的位置指針移到文件的開(kāi)始處 for k 0 str k 0 k fputc str k fp 寫入新內(nèi)容 rewind fp 把文件的位置指針移到文件的開(kāi)始處 while feof fp 當(dāng)文件沒(méi)有結(jié)束時(shí) feof fp 為假 feof fp 為真 putchar fgetc fp 顯示文件 abc dar 的新內(nèi)容 fclose fp printf n 運(yùn)行結(jié)果 Iamastudent Youareaworker Y You Youareaworker z Yo 2 輸入輸出數(shù)據(jù)塊一次可I O一個(gè)數(shù)組或結(jié)構(gòu)體類型的數(shù)據(jù)ANSIC設(shè)置了兩個(gè)函數(shù) fread buffer size count fp fwrite buffer size count fp buffer 是一個(gè)指針 對(duì)fread來(lái)說(shuō) 它是讀入數(shù)據(jù)的存放地址 對(duì)fwrite來(lái)說(shuō) 是要輸出數(shù)據(jù)的地址 以上指的是起始地址 size 要讀寫的字節(jié)數(shù) count 要進(jìn)行讀寫多少個(gè)size字節(jié)的數(shù)據(jù)項(xiàng) fp 文件型指針 例 文件sru list中有4個(gè)學(xué)生的有關(guān)數(shù)據(jù) 將它們讀出在屏幕上顯示出來(lái) 然后把它們重新存到磁盤文件上去 include stdio h defineSIZE4structstudent type charname l0 intnum intage charaddr l5 stud SIZE main FILE fP inti if fp fopen stu list rb NULL printf cannotopenfile xn return for i 0 i SIZE i fread 3 格式化I Ofprintf fp 格式字符串 輸出表列 fscanf fp 格式字符串 輸入表列 除fp外 其余同printf scanf 4 串輸入輸出fgets str1 n fp 從fp指定的文件中讀出n 1個(gè)字符到str1 并在最后添加一個(gè) 0 或遇換行符 EOF符停止 fputs str2 fp 把str2的內(nèi)容輸出到fp指定的文件中 str2可以是字符串常量 字符數(shù)組 字符型指針 注 使用方法與gets puts類似 例 從鍵盤輸入數(shù)據(jù) 97101 李明 男 20 和 97102 王小麗 女 18 存放在文件 txtl dat 中 再將文件 txtl dat 的數(shù)據(jù)讀出并顯示 includestructstd longxh charname 7 charsex 3 intnl main FILE fp structstda inti if fp fopen txt1 dat w NULL fp為NULL 表示文件打開(kāi)失敗 printf 磁盤空間不夠 n exit 0 for i 0 i 2 i scanf ld s d 1 返回文件開(kāi)頭rewind fp 2 隨機(jī)定位fseek fp 偏移量 基點(diǎn) 基點(diǎn)名字?jǐn)?shù)字表示文件開(kāi)始SEEK SET0文件當(dāng)前位置SEEK CUR1文件末尾SEEK END2偏移量可以 課堂例題 課后練習(xí) 上機(jī)作業(yè) fscanf函數(shù)的正確調(diào)用形式是 A fscanf 文件指針 格式字符串 輸出表列 B fscanf 格式字符串 文件指針 輸出表列 C fscanf 格式字符串 輸出表列 文件指針 D fscanf 文件指針 格式字符串 輸入表列 D C語(yǔ)言標(biāo)準(zhǔn)庫(kù)函數(shù) fgets string n fp 的功能是 A 從文件fp中讀取長(zhǎng)度為n的字符串存入指針string指向的內(nèi)存B 從文件fp中讀取長(zhǎng)度為n 1的字符串存入指針string指向的內(nèi)存C 從文件fp中讀取n個(gè)字符串存入指針string指向的內(nèi)存D 從文件fp中讀取長(zhǎng)度不超過(guò)長(zhǎng)度為n的字符串存入指針string指向的內(nèi)存 B 輸出結(jié)果為 includeFILE fp main ints 0 i a 4 15 25 33 58 b if fp fopen data txt w NULL printf error n exit 0 for i 0 i 4 i fprintf fp d a i fclose fp if fp fopen data txt r NULL printf cannotopenthisfile n exit 0 for i 1 i 4 i fscanf fp d 結(jié)果為73 上機(jī)作業(yè) 1 閱讀下面的程序 指出它的功能 并上機(jī)調(diào)試驗(yàn)證 include stdio h voidmain FILE fp charch if fp fopen w NULL printf can topenthisfile exit 1 while ch getchar n fputc ch fp fclose fp 2 從鍵盤上輸入任意10個(gè)數(shù) 把10個(gè)數(shù)按由小到大的順序排列 然后把這組數(shù)輸出到文件out txt中 再把這組數(shù)中相同的數(shù)據(jù)刪得只剩一個(gè) 然后以每行4個(gè)數(shù)的格式追加到文件out txt中去 例如輸入9 8 6 10 4 8 9 7 5 4 則文件out txt中的內(nèi)容為 4 4 5 6 7 8 8 9 9 104 5 6

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論