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

下載本文檔

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

文檔簡介

回顧 結(jié)構(gòu)體的使用共用體的使用枚舉變量結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體指針鏈表的使用 問題 1 前面題目的結(jié)果是后面的輸入時 2 程序運行的結(jié)果需要長期保存 或有其他用途時 3 調(diào)試程序時 輸入數(shù)據(jù)量多 引入文件 第13章文件 掌握文件的打開和關(guān)閉掌握并能熟練使用以下函數(shù)fputc fgtc fgets fputs fread fwrite fprintf fscanf Focus 一 文件的基本概念1 文件的一般概念文件 file 存儲在外部介質(zhì)上數(shù)據(jù)的集合 OS將外部設(shè)備也看作文件 終端的鍵盤 顯示器均看作I O文件 第一節(jié)c文件概述 2 C的文件系統(tǒng)緩沖文件系統(tǒng) 系統(tǒng)自動為每個正在使用的文件系統(tǒng)在內(nèi)存中開辟一個緩沖區(qū) 程序與文件之間的I O經(jīng)由緩沖區(qū) ANSIC標(biāo)準(zhǔn)采用緩沖文件系統(tǒng) 非緩沖文件系統(tǒng) 系統(tǒng)不自動開辟緩沖區(qū) 由程序為每個文件設(shè)定緩沖區(qū) 由于C與UNIX關(guān)系密切 UNIXI O系統(tǒng)使用非緩沖文件系統(tǒng) 因而多數(shù)C也兼容之 C的I O系統(tǒng)在程序員和設(shè)備間提供了一級抽象 這個抽象被稱為流 stream 而實際設(shè)備則稱為文件 files 文件由緩沖文件系統(tǒng)變換成抽象的邏輯設(shè)備流 C文件是字符 文本 流或二進(jìn)制流 無其它高級語言所具有的記錄界限 存取以字節(jié)為單位 I O的開始和結(jié)束僅受程序控制而不受流中符號的控制 共有兩類流 文本流 text 和二進(jìn)制流 binary 二 文件流與文件 文本流文本流 textstream 是一種字符序列 以ASCII碼存放 每字符占一個字節(jié) 數(shù)值需要逐位轉(zhuǎn)換 32767存為51 50 55 54 55計五個字節(jié) n 變?yōu)橐粋€回車 換行符號對 CR LFcarraigereturn linefeed ASCII碼13 10 文件末有一字符 z ASCII碼為26 二進(jìn)制流二進(jìn)制流 binarystream 是一種字節(jié)序列 數(shù)值以二進(jìn)制數(shù)表示 32767存為7FFFH int型時占兩個字節(jié) 不需轉(zhuǎn)換 節(jié)省存儲空間 從而方便存取 提高速度 標(biāo)準(zhǔn)流ANSIC有三個預(yù)定義的標(biāo)準(zhǔn)流 stdin stdout stderr 也稱為標(biāo)準(zhǔn) 文件 它們都對應(yīng)終端 程序運行時系統(tǒng)自動將它們打開 運行結(jié)束自動關(guān)閉 例如 使用scanf gets 等函數(shù)時使用stdin流 對應(yīng)標(biāo)準(zhǔn)輸入 鍵盤 使用printf puts 時 使用stdout流 對應(yīng)標(biāo)準(zhǔn)輸出 顯示器 stderr流也對應(yīng)標(biāo)準(zhǔn)輸出 顯示器 三 文件的基本操作步驟 打開文件 讀寫 創(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 文件號 int cleft 緩沖區(qū)剩下的字符 int mode 文件操作模式 char nextc 下一個字符指針 char buff 文件緩沖區(qū)指針 file 四 指向文件的指針變量 1 打開文件file fp fp fopen mode 為文件名 路徑名 mode對文件的訪問方式一般方法如下 file fp if fp fopen c doc exam txt w NULL puts cannotopenthefile n exit 1 第二節(jié)文件的打開與關(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 讀打開 二進(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 實際上是用fputc ch fp 定義的一個宏 defineputchar ch fputc ch stdout 默認(rèn)輸出到顯示器即標(biāo)準(zhǔn)輸出文件stdout 2 判斷文件尾fgetc 在讀到文件末尾時 返回文件結(jié)束標(biāo)志EOF 在stdio h中定義為 1 此標(biāo)志只適合于文本文件 因為二進(jìn)制文件中的數(shù)值 1會與其相混 造成提前結(jié)束 常用feof 函數(shù)測試文件尾 若是文件結(jié)束返回值1 它既可以用于二進(jìn)制文件也可以用于文本文件 feof 文件指針 返回值為1表示文件結(jié)束 例 假設(shè)軟盤a的根目錄下有一個ASCII碼文件 abc dat 其內(nèi)容為 Iamastudent 編程完成 1 顯示文件 abc dat 的內(nèi)容 2 把字符串 Youareaworker 寫入文件 abc dat 3 再次顯示文件 abc dat 的內(nèi)容 分析 顯示指定的文本文件內(nèi)容 再寫入新內(nèi)容 必須打開文件并指定文件的使用方式為 r 表示對同一個文本文件先讀后寫 寫入的新內(nèi)容覆蓋原有的舊內(nèi)容 程序清單如下 includemain FILE fp char str Youareaworker intk if fp fopen a abc dat r NULL fp為NULL 表示文件打開失敗 printf 文件不存在 n exit O while feof fp 當(dāng)文件沒有結(jié)束時 feof fp 為假 feof fp 為真 putchar fgetc fp 顯示文件 abc dat 的原有內(nèi)容 printf n rewind fp 把文件的位置指針移到文件的開始處 for k 0 str k 0 k fputc str k fp 寫入新內(nèi)容 rewind fp 把文件的位置指針移到文件的開始處 while feof fp 當(dāng)文件沒有結(jié)束時 feof fp 為假 feof fp 為真 putchar fgetc fp 顯示文件 abc dar 的新內(nèi)容 fclose fp printf n 運行結(jié)果 Iamastudent Youareaworker Y You Youareaworker z Yo 2 輸入輸出數(shù)據(jù)塊一次可I O一個數(shù)組或結(jié)構(gòu)體類型的數(shù)據(jù)ANSIC設(shè)置了兩個函數(shù) fread buffer size count fp fwrite buffer size count fp buffer 是一個指針 對fread來說 它是讀入數(shù)據(jù)的存放地址 對fwrite來說 是要輸出數(shù)據(jù)的地址 以上指的是起始地址 size 要讀寫的字節(jié)數(shù) count 要進(jìn)行讀寫多少個size字節(jié)的數(shù)據(jù)項 fp 文件型指針 例 文件sru list中有4個學(xué)生的有關(guān)數(shù)據(jù) 將它們讀出在屏幕上顯示出來 然后把它們重新存到磁盤文件上去 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個字符到str1 并在最后添加一個 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 表示文件打開失敗 printf 磁盤空間不夠 n exit 0 for i 0 i 2 i scanf ld s d 1 返回文件開頭rewind fp 2 隨機定位fseek fp 偏移量 基點 基點名字?jǐn)?shù)字表示文件開始SEEK SET0文件當(dāng)前位置SEEK CUR1文件末尾SEEK END2偏移量可以 課堂例題 課后練習(xí) 上機作業(yè) fscanf函數(shù)的正確調(diào)用形式是 A fscanf 文件指針 格式字符串 輸出表列 B fscanf 格式字符串 文件指針 輸出表列 C fscanf 格式字符串 輸出表列 文件指針 D fscanf 文件指針 格式字符串 輸入表列 D C語言標(biāo)準(zhǔn)庫函數(shù) fgets string n fp 的功能是 A 從文件fp中讀取長度為n的字符串存入指針string指向的內(nèi)存B 從文件fp中讀取長度為n 1的字符串存入指針string指向的內(nèi)存C 從文件fp中讀取n個字符串存入指針string指向的內(nèi)存D 從文件fp中讀取長度不超過長度為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 上機作業(yè) 1 閱讀下面的程序 指出它的功能 并上機調(diào)試驗證 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個數(shù) 把10個數(shù)按由小到大的順序排列 然后把這組數(shù)輸出到文件out txt中 再把這組數(shù)中相同的數(shù)據(jù)刪得只剩一個 然后以每行4個數(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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論