C語言程序設(shè)計(jì)(最新版-烏云高娃)課件第10_第1頁
C語言程序設(shè)計(jì)(最新版-烏云高娃)課件第10_第2頁
C語言程序設(shè)計(jì)(最新版-烏云高娃)課件第10_第3頁
C語言程序設(shè)計(jì)(最新版-烏云高娃)課件第10_第4頁
C語言程序設(shè)計(jì)(最新版-烏云高娃)課件第10_第5頁
已閱讀5頁,還剩101頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第10章文件及其應(yīng)用第10章文件及其應(yīng)用主要內(nèi)容文本文件的讀寫二進(jìn)制文件的讀寫文件的定位與隨機(jī)讀寫主要內(nèi)容文本文件的讀寫文本文件的讀寫

應(yīng)知:-文件的分類-文本文件讀寫的步驟-文本文件讀寫函數(shù)的功能及函數(shù)參數(shù)的含義應(yīng)會(huì):

-文本文件的打開、讀寫、關(guān)閉-將單個(gè)字符、字符串進(jìn)行文件讀寫,進(jìn)行文件復(fù)制等程序的編寫難點(diǎn):-文件的讀寫文本文件的讀寫應(yīng)知:英文詞匯File文件Read讀Write寫B(tài)uffer緩沖區(qū)英文詞匯File文件提問指針變量的數(shù)據(jù)類型如何確定?指針變量作為函數(shù)參數(shù)時(shí),值或地址傳遞?創(chuàng)建鏈表的算法?提問知識(shí)回顧:線性鏈表簡單敘述輸出鏈表所有結(jié)點(diǎn)的數(shù)據(jù)域(遍歷)的算法思路定義一個(gè)結(jié)點(diǎn)類型的指針變量current作為循環(huán)變量,并賦初始值為pHead,指向鏈表頭結(jié)點(diǎn).輸出current所指向結(jié)點(diǎn)的數(shù)據(jù).將current指向下一個(gè)結(jié)點(diǎn).循環(huán)結(jié)束條件是current=NULL.知識(shí)回顧:線性鏈表簡單敘述輸出鏈表所有結(jié)點(diǎn)的數(shù)據(jù)域(遍歷)的學(xué)一學(xué):文件基礎(chǔ)知識(shí)對(duì)文件的操作只有讀和寫兩種,通常情況下,將內(nèi)存中的數(shù)據(jù)寫入到文件,稱為文件的輸出;將文件中的數(shù)據(jù)讀入到內(nèi)存稱為文件的輸入。C語言中,以緩沖文件系統(tǒng)方式讀寫文件的步驟為①定義文件指針;

②打開文件;③讀寫文件;④關(guān)閉文件。學(xué)一學(xué):文件基礎(chǔ)知識(shí)對(duì)文件的操作只有讀和寫兩種,通常情況下,學(xué)一學(xué)1.定義文件指針一般形式為:

FILE*fp;其中fp就是所定義文件指針。FILE類型以及所有的文件讀寫函數(shù)和相關(guān)常量都定義在文件stdio.h中,在源程序的開頭要包含頭文件stdio.h。學(xué)一學(xué)1.定義文件指針

學(xué)一學(xué)2.打開文件

C語言中,使用fopen函數(shù)來打開文件。fopen函數(shù)的調(diào)用形式:fopen(chFileName,mode);以mode方式打開文件chFileName。其中,參數(shù)chFileName是將要讀寫文件的文件名,mode為文件的操作方式。若文件打開成功,返回一個(gè)文件指針,若打開失敗,則返回空值NULL,NULL在stdio.h中被定義為0。文件操作方式mode是一個(gè)整數(shù),其取值及含義如表10-1所示。

學(xué)一學(xué)2.打開文件學(xué)一學(xué)

學(xué)一學(xué)學(xué)一學(xué)3.文件的讀寫通過函數(shù)進(jìn)行。文本文件的讀寫函數(shù)主要有fgetc和fputc,fgets和fputs,其調(diào)用形式如表10-2所示。表10-2中的EOF是文件結(jié)束標(biāo)志,定義在文件stdio.h中,其值為-1,可用來判斷文本文件是否結(jié)束。學(xué)一學(xué)3.文件的讀寫通過函數(shù)進(jìn)行。文本文件的讀寫函數(shù)主要有學(xué)一學(xué)4.關(guān)閉文件

C語言使用fclose函數(shù)關(guān)閉文件。關(guān)閉文件就是使原來指向該文件的文件指針與文件脫離,fclose的調(diào)用形式為:

fclose(fp);

關(guān)閉文件指針fp所指的文件。若文件關(guān)閉成功,返回值為NULL,否則,返回一個(gè)非0值,表示關(guān)閉文件時(shí)出錯(cuò)。學(xué)一學(xué)4.關(guān)閉文件試一試問題10.1編一程序從鍵盤輸入一串字符“mayfriendshipforever!”,然后保存在文件myInfo.txt中。調(diào)試問題10.1程序,觀察運(yùn)行結(jié)果試一試問題10.1編一程序從鍵盤輸入一串字符“mayfri想一想問題10.1用fputs函數(shù)實(shí)現(xiàn)應(yīng)如何修改程序?請(qǐng)根據(jù)提示寫出完整程序。提示:(1)刪除語句inti;(2)可將語句i=0;while(chInfo[i]!='\0'){fputc(chInfo[i],fp);i++;}改為:fputs(chInfo,fp);想一想問題10.1用fputs函數(shù)實(shí)現(xiàn)應(yīng)如何修改程序?請(qǐng)?jiān)囈辉噯栴}10.2:打開問題10.1生成的文件myInfo.txt,將其中的內(nèi)容顯示在屏幕上,要求文件名從命令行參數(shù)輸入。【解題步驟】1.定義文件指針fp;2.定義字符變量用來存放從文件中讀取的字符;3.以讀文本文件方式打開文件(文件名由命令行參數(shù)輸入);4.如果打開文件失敗,則輸出錯(cuò)誤信息并結(jié)束程序;5.讀取文件中的內(nèi)容并顯示在屏幕上;6.關(guān)閉文件。試一試問題10.2:打開問題10.1生成的文件myInfo想一想

問題10.2用fgets函數(shù)實(shí)現(xiàn)應(yīng)如何修改程序?請(qǐng)根據(jù)提示寫出完整程序。提示:(1)語句charch;改為char*chInfo;

(2)語句ch=fgetc(fp);while(ch!=EOF){putchar(ch);ch=fgetc(fp);}

改為:fgets(chInfo,100,fp);printf("%s",chInfo);注意,fgets函數(shù)中的第2個(gè)參數(shù)為要讀取的字符數(shù),要大于或等于文件的長度+1。想一想問題10.2用fgets函數(shù)實(shí)現(xiàn)應(yīng)如何修改程序練一練問題:編一程序?qū)崿F(xiàn)文件的拷貝,將文件myInfo.txt拷貝到文件myBak.txt。要求源文件名和目標(biāo)文件名都在程序運(yùn)行時(shí)通過鍵盤輸入,可將其存放在兩個(gè)字符數(shù)組中,然后再在打開文件時(shí)使用。練一練問題與討論什么是緩沖文件系統(tǒng),有什么優(yōu)點(diǎn)?二進(jìn)制文件和文本文件各有什么優(yōu)缺點(diǎn)?問題與討論什么是緩沖文件系統(tǒng),有什么優(yōu)點(diǎn)?學(xué)生容易錯(cuò)的地方文件操作完畢后不關(guān)閉文件;文件打開時(shí)沒有賦給一個(gè)文件指針。

學(xué)生容易錯(cuò)的地方文件操作完畢后不關(guān)閉文件;小結(jié):1.文件的存儲(chǔ)形式。數(shù)據(jù)在內(nèi)存中以二進(jìn)制形式存放,當(dāng)把內(nèi)存中的數(shù)據(jù)輸出到磁盤文件中時(shí)可以用兩種形式存儲(chǔ),即字符形式或二進(jìn)制形式。2.在C語言中,系統(tǒng)定義了一個(gè)文件類型FILE,用來實(shí)現(xiàn)緩沖文件系統(tǒng)方式下文件的讀寫操作,文件指針就是一個(gè)FILE類型的指針變量,由此實(shí)現(xiàn)文件的具體讀寫。3.其它讀寫函數(shù)。C語言提供了多種以緩沖文件系統(tǒng)方式讀寫文本文件的函數(shù),在ANSIC中,還有格式化讀寫函數(shù)fprintf和fscanf可用來讀寫文本文件。小結(jié):1.文件的存儲(chǔ)形式。數(shù)據(jù)在內(nèi)存中以二進(jìn)制形式存放,當(dāng)把二進(jìn)制文件的讀寫

應(yīng)知:-二進(jìn)制文件讀寫的步驟-二進(jìn)制文件讀寫函數(shù)的功能及函數(shù)參數(shù)的含義應(yīng)會(huì):

-二進(jìn)制文件的打開、讀寫、關(guān)閉-對(duì)數(shù)據(jù)塊進(jìn)行操作難點(diǎn):

-對(duì)數(shù)據(jù)塊進(jìn)行讀寫二進(jìn)制文件的讀寫應(yīng)知:英文詞匯File文件Binary二進(jìn)制英文詞匯File提問什么是緩沖文件系統(tǒng),有什么優(yōu)點(diǎn)?二進(jìn)制文件和文本文件各有什么優(yōu)缺點(diǎn)?提問知識(shí)回顧:文本文件簡單敘述文件操作四步驟定義文件指針

.打開文件

.讀寫文件

.關(guān)閉文件

.知識(shí)回顧:文本文件簡單敘述文件操作四步驟學(xué)一學(xué):二進(jìn)制文件的讀寫對(duì)于二進(jìn)制文件,以緩沖文件系統(tǒng)方式讀寫文件的步驟同樣為以下四個(gè)步驟:

①定義文件指針;②打開文件;③讀寫文件;④關(guān)閉文件。其中定義文件指針、打開文件和關(guān)閉文件的操作在上一節(jié)中已介紹過,這里主要學(xué)習(xí)用來讀寫二進(jìn)制文件的兩個(gè)函數(shù)fread和fwrite。學(xué)一學(xué):二進(jìn)制文件的讀寫對(duì)于二進(jìn)制文件,以緩沖文件系統(tǒng)方式讀學(xué)一學(xué)塊寫入函數(shù)fwrite的調(diào)用形式為:

fwrite(buffer,size,n,fp)將buffer開始處的n個(gè)大小為size字節(jié)的數(shù)據(jù)塊(記錄)寫入到文件指針fp所指向的文件中。成功返回?cái)?shù)據(jù)塊(記錄)個(gè)數(shù)n,不成功返回0。塊讀取函數(shù)fread的調(diào)用形式為:

fread(buffer,size,n,fp)從文件指針fp所指向的文件中讀取n個(gè)大小為size個(gè)字節(jié)的數(shù)據(jù)塊(記錄)到buffer所指向的地址空間。成功返回?cái)?shù)據(jù)塊(記錄)個(gè)數(shù)n,出錯(cuò)或遇文件結(jié)束返回0。學(xué)一學(xué)塊寫入函數(shù)fwrite的調(diào)用形式為:試一試問題10.3編一程序從鍵盤輸入5個(gè)整數(shù)并寫入到文件test.dat中。

調(diào)試問題10.3程序,觀察運(yùn)行結(jié)果試一試問題10.3編一程序從鍵盤輸入5個(gè)整數(shù)并寫入到文件t想一想將問題10.3中的5個(gè)整數(shù)改為5個(gè)實(shí)數(shù)寫入文件testFloat.dat中應(yīng)如何修改程序?想一想將問題10.3中的5個(gè)整數(shù)改為5個(gè)實(shí)數(shù)寫入文件test試一試問題10.4編一程序從問題10.3寫入的文件test.dat中讀取數(shù)據(jù)并顯示在屏幕上。

【解題步驟】1.定義整型數(shù)組iArray用來存放5個(gè)整數(shù);2.定義整型變量i作為循環(huán)變量;3.定義文件指針fp;4.以讀二進(jìn)制文件方式打開文件test.dat;5.如果打開文件失敗,則輸出錯(cuò)誤信息并結(jié)束程序;6.從文件中讀取5個(gè)整數(shù)并存放在數(shù)組iArray中;7.顯示數(shù)組iArray中的元素;8.關(guān)閉文件。試一試問題10.4編一程序從問題10.3寫入的文件test想一想文件testFloat.dat中存有5個(gè)實(shí)數(shù),請(qǐng)讀取并顯示出來,應(yīng)如何實(shí)現(xiàn)?想一想文件testFloat.dat中存有5個(gè)實(shí)數(shù),請(qǐng)讀取并試一試問題10.5編一程序從鍵盤輸入5個(gè)學(xué)生的成績記錄并寫入到文件stdScore.dat中。5個(gè)學(xué)生的成績記錄見表10-3。試一試問題10.5編一程序從鍵盤輸入5個(gè)學(xué)生的成績記錄并寫調(diào)試問題10.5程序,觀察運(yùn)行結(jié)果調(diào)試問題10.5程序,觀察運(yùn)行結(jié)果想一想問題10.5的寫文件操作是每次寫入一個(gè)學(xué)生的信息,循環(huán)5次,如果不使用循環(huán)語句而一次性地將5個(gè)學(xué)生數(shù)據(jù)寫入文件,應(yīng)該怎樣實(shí)現(xiàn)?想一想問題10.5的寫文件操作是每次寫入一個(gè)學(xué)生的信息,循環(huán)試一試問題10.6編一程序?qū)栴}10.5所寫的文件stdScore.dat中的數(shù)據(jù)顯示在屏幕上?!窘忸}步驟】

1.定義學(xué)生成績結(jié)構(gòu)體類型type_score;2.定義結(jié)構(gòu)體類型type_scor數(shù)組stScore[5]用來存放從文件中讀取的信息;3.定義文件指針fp;4.定義整型變量i作為循環(huán)變量;5.以讀二進(jìn)制文件方式打開文件stdScore.dat;6.如果打開文件失敗,則輸出錯(cuò)誤信息并結(jié)束程序;7.逐條讀取文件中的記錄存放在結(jié)構(gòu)體數(shù)組stScore中8.關(guān)閉文件;9.顯示結(jié)構(gòu)體數(shù)組stScore中的數(shù)據(jù)。試一試問題10.6編一程序?qū)栴}10.5所寫的文件stdS想一想問題10.6的讀取文件操作是每次讀出一個(gè)學(xué)生的信息,循環(huán)5次,如果不使用循環(huán)語句而一次性地讀出5個(gè)學(xué)生的數(shù)據(jù),程序怎樣更改?想一想練一練問題:編一程序從文件stdScore.dat(問題10.5已寫入數(shù)據(jù))中將姓名、學(xué)號(hào)和數(shù)學(xué)成績3個(gè)字段的數(shù)據(jù)保存在文件stdMath.dat中。練一練問題與討論為什么使用數(shù)據(jù)塊讀寫函數(shù)?EOF是否可以用來檢測(cè)二進(jìn)制文件的結(jié)束?怎樣檢測(cè)二進(jìn)制文件的結(jié)束?問題與討論為什么使用數(shù)據(jù)塊讀寫函數(shù)?學(xué)生容易錯(cuò)的地方對(duì)不存在的文件進(jìn)行讀操作;操作方式不熟悉。

學(xué)生容易錯(cuò)的地方對(duì)不存在的文件進(jìn)行讀操作;小結(jié)1.使用fread和fwrite函數(shù)可以方便地讀寫任意類型的數(shù)據(jù),比如int型、float型、char型等基本類型以及結(jié)構(gòu)體類型的數(shù)據(jù)。2.使用fwrite函數(shù)寫入數(shù)據(jù)的文件是二進(jìn)制文件。小結(jié)1.使用fread和fwrite函數(shù)可以方便地讀寫任意類文件的定位與隨機(jī)讀寫

應(yīng)知:-以緩沖文件系統(tǒng)方式隨機(jī)讀寫文件的步驟-指定文件位置值的含義應(yīng)會(huì):

-文件讀寫指針位置的重置-文件讀寫指針位置的隨機(jī)定位

難點(diǎn):

-文件讀寫指針位置的隨機(jī)定位

文件的定位與隨機(jī)讀寫應(yīng)知:英文詞匯Rewind重置Seek定位英文詞匯Rewind提問fputc()函數(shù)與fputs()函數(shù)的區(qū)別是什么?fgetc()函數(shù)與fgets()函數(shù)的區(qū)別是什么?

提問學(xué)一學(xué):文件的定位與隨機(jī)讀寫文件中有一個(gè)位置指針,指向當(dāng)前讀寫的位置。當(dāng)順序讀寫一個(gè)文件時(shí),每讀寫完一個(gè)一個(gè)數(shù)據(jù)單位(一個(gè)字符,或一個(gè)整數(shù),或一個(gè)結(jié)構(gòu)體變量)后,位置指針自動(dòng)移向下一個(gè)數(shù)據(jù)單位位置,如果想改變這種順序,就需要強(qiáng)制使位置指針指向指定的位置。以緩沖文件系統(tǒng)方式隨機(jī)讀寫文件的步驟為①定義文件指針;②打開文件;③文件的定位;④讀寫文件;⑤關(guān)閉文件。文件的定位可以通過重置位置指針函數(shù)rewind和隨機(jī)定位函數(shù)fseek來實(shí)現(xiàn)。學(xué)一學(xué):文件的定位與隨機(jī)讀寫文件中有一個(gè)位置指針,指向當(dāng)前讀學(xué)一學(xué)1.重置位置指針函數(shù)rewind的調(diào)用形式:

rewind(fp);使文件的讀寫位置指針重新移到文件的開頭。其中fp指向正在讀寫的文件。該函數(shù)沒有返回值。2.隨機(jī)定位函數(shù)fseek的調(diào)用形式:

fseek(fp,lOffset,iOrigin)將文件指針fp所指文件的位置指針移到指定的位置,該位置與iOrigin所代表的文件位置相距l(xiāng)Offset個(gè)字節(jié)。iOrigin可以是三個(gè)給定文件位置中的一個(gè),用三個(gè)符號(hào)常量(在stdio.h中定義)或0,1,2來表示,具體含義見表10-4。學(xué)一學(xué)1.重置位置指針函數(shù)rewind的調(diào)用形式:學(xué)一學(xué)學(xué)一學(xué)試一試問題10.7編程將1,2,3,……10十個(gè)整數(shù)寫入文件testRand.dat,然后再從文件中讀取1,3,5,7,9五個(gè)數(shù)字并顯示。

調(diào)試問題10.7程序,觀察運(yùn)行結(jié)果試一試問題10.7編程將1,2,3,……10十個(gè)整數(shù)寫入文想一想

對(duì)于問題10.7,如果要讀取文件testRand.dat中的2,4,6,8,10并顯示,應(yīng)該如何修改程序?提示:整數(shù)2所在的位置是第2、3字節(jié)處,整數(shù)4所在的位置是第6、7字節(jié)處,整數(shù)6所在的位置是10、11字節(jié)處,整數(shù)8所在的位置是14、15字節(jié)處,整數(shù)10所在的位置是第18、19字節(jié)處。想一想對(duì)于問題10.7,如果要讀取文件testRand再試一試問題10.8編一程序從問題10.5寫入的文件stdScore.dat中讀取一條記錄并顯示在屏幕上,要求從鍵盤輸入記錄的序號(hào)。

調(diào)試問題10.8程序,觀察運(yùn)行結(jié)果再試一試問題10.8編一程序從問題10.5寫入的文件std想一想對(duì)問題10.7中找到的記錄進(jìn)行修改,修改完以后再寫入原來的文件中,應(yīng)如何修改程序?請(qǐng)根據(jù)提示寫出完整程序。提示:(1)在變量說明部分增加一個(gè)字符變量chYesNo的申明,用來存放用戶對(duì)是否進(jìn)行修改的確認(rèn)。(2)打開文件的方式改為可讀寫,即"rb+"。(3)在關(guān)閉文件之前,即在語句fclose(filePonter)之前按下面步驟添加程序。從鍵盤讓用戶確認(rèn)是否進(jìn)行修改,輸入字符’y’或‘n’存放在變量chYesNo中;若chYesNo==’y’,則表示要修改記錄,需要完成下面操作。從鍵盤輸入一條學(xué)生記錄數(shù)據(jù)并存放在結(jié)構(gòu)體變量stTemp中;定位文件指針到第iRecordID條記錄的開始處;將結(jié)構(gòu)體變量stTemp中寫入文件;若chYesNo==’n’,則不對(duì)記錄進(jìn)行修改。

想一想對(duì)問題10.7中找到的記錄進(jìn)行修改,修改完以后再寫入原練一練問題:編一程序在文件stdScore.dat(問題10.5已寫入數(shù)據(jù))的末尾添加一條新記錄,然后將文件中所有記錄顯示出來。這條新記錄為學(xué)生Lisa的成績,具體如下:

Name Number Math EnglishChinese Lisa 1006 89 93 75練一練問題:編一程序在文件stdScore.dat(問題10問題與討論怎樣實(shí)現(xiàn)隨機(jī)文件讀寫?問題與討論怎樣實(shí)現(xiàn)隨機(jī)文件讀寫?學(xué)生容易錯(cuò)的地方打開文件進(jìn)行寫之后,沒有將文件位置指針指回文件文件定位fseek函數(shù)的使用學(xué)生容易錯(cuò)的地方打開文件進(jìn)行寫之后,沒有將文件位置指針指回文小結(jié)1.在實(shí)際應(yīng)用中,若對(duì)某一文件進(jìn)行多次讀寫操作后,需要重新讀寫該文件,使用rewind函數(shù)可以在不關(guān)閉文件的情況下將位置指針返回文件開頭,達(dá)到重新讀取文件的目的。2.使用定位當(dāng)前位置指針函數(shù)ftell可獲取當(dāng)前文件指針的位置。注意,該函數(shù)限于二進(jìn)制文件,對(duì)文本文件往往會(huì)出錯(cuò)。3.使用函數(shù)feof可對(duì)文本文件和二進(jìn)制文件進(jìn)行文件是否結(jié)束的判斷。小結(jié)1.在實(shí)際應(yīng)用中,若對(duì)某一文件進(jìn)行多次讀寫操作后,需要重第10章文件及其應(yīng)用第10章文件及其應(yīng)用主要內(nèi)容文本文件的讀寫二進(jìn)制文件的讀寫文件的定位與隨機(jī)讀寫主要內(nèi)容文本文件的讀寫文本文件的讀寫

應(yīng)知:-文件的分類-文本文件讀寫的步驟-文本文件讀寫函數(shù)的功能及函數(shù)參數(shù)的含義應(yīng)會(huì):

-文本文件的打開、讀寫、關(guān)閉-將單個(gè)字符、字符串進(jìn)行文件讀寫,進(jìn)行文件復(fù)制等程序的編寫難點(diǎn):-文件的讀寫文本文件的讀寫應(yīng)知:英文詞匯File文件Read讀Write寫B(tài)uffer緩沖區(qū)英文詞匯File文件提問指針變量的數(shù)據(jù)類型如何確定?指針變量作為函數(shù)參數(shù)時(shí),值或地址傳遞?創(chuàng)建鏈表的算法?提問知識(shí)回顧:線性鏈表簡單敘述輸出鏈表所有結(jié)點(diǎn)的數(shù)據(jù)域(遍歷)的算法思路定義一個(gè)結(jié)點(diǎn)類型的指針變量current作為循環(huán)變量,并賦初始值為pHead,指向鏈表頭結(jié)點(diǎn).輸出current所指向結(jié)點(diǎn)的數(shù)據(jù).將current指向下一個(gè)結(jié)點(diǎn).循環(huán)結(jié)束條件是current=NULL.知識(shí)回顧:線性鏈表簡單敘述輸出鏈表所有結(jié)點(diǎn)的數(shù)據(jù)域(遍歷)的學(xué)一學(xué):文件基礎(chǔ)知識(shí)對(duì)文件的操作只有讀和寫兩種,通常情況下,將內(nèi)存中的數(shù)據(jù)寫入到文件,稱為文件的輸出;將文件中的數(shù)據(jù)讀入到內(nèi)存稱為文件的輸入。C語言中,以緩沖文件系統(tǒng)方式讀寫文件的步驟為①定義文件指針;

②打開文件;③讀寫文件;④關(guān)閉文件。學(xué)一學(xué):文件基礎(chǔ)知識(shí)對(duì)文件的操作只有讀和寫兩種,通常情況下,學(xué)一學(xué)1.定義文件指針一般形式為:

FILE*fp;其中fp就是所定義文件指針。FILE類型以及所有的文件讀寫函數(shù)和相關(guān)常量都定義在文件stdio.h中,在源程序的開頭要包含頭文件stdio.h。學(xué)一學(xué)1.定義文件指針

學(xué)一學(xué)2.打開文件

C語言中,使用fopen函數(shù)來打開文件。fopen函數(shù)的調(diào)用形式:fopen(chFileName,mode);以mode方式打開文件chFileName。其中,參數(shù)chFileName是將要讀寫文件的文件名,mode為文件的操作方式。若文件打開成功,返回一個(gè)文件指針,若打開失敗,則返回空值NULL,NULL在stdio.h中被定義為0。文件操作方式mode是一個(gè)整數(shù),其取值及含義如表10-1所示。

學(xué)一學(xué)2.打開文件學(xué)一學(xué)

學(xué)一學(xué)學(xué)一學(xué)3.文件的讀寫通過函數(shù)進(jìn)行。文本文件的讀寫函數(shù)主要有fgetc和fputc,fgets和fputs,其調(diào)用形式如表10-2所示。表10-2中的EOF是文件結(jié)束標(biāo)志,定義在文件stdio.h中,其值為-1,可用來判斷文本文件是否結(jié)束。學(xué)一學(xué)3.文件的讀寫通過函數(shù)進(jìn)行。文本文件的讀寫函數(shù)主要有學(xué)一學(xué)4.關(guān)閉文件

C語言使用fclose函數(shù)關(guān)閉文件。關(guān)閉文件就是使原來指向該文件的文件指針與文件脫離,fclose的調(diào)用形式為:

fclose(fp);

關(guān)閉文件指針fp所指的文件。若文件關(guān)閉成功,返回值為NULL,否則,返回一個(gè)非0值,表示關(guān)閉文件時(shí)出錯(cuò)。學(xué)一學(xué)4.關(guān)閉文件試一試問題10.1編一程序從鍵盤輸入一串字符“mayfriendshipforever!”,然后保存在文件myInfo.txt中。調(diào)試問題10.1程序,觀察運(yùn)行結(jié)果試一試問題10.1編一程序從鍵盤輸入一串字符“mayfri想一想問題10.1用fputs函數(shù)實(shí)現(xiàn)應(yīng)如何修改程序?請(qǐng)根據(jù)提示寫出完整程序。提示:(1)刪除語句inti;(2)可將語句i=0;while(chInfo[i]!='\0'){fputc(chInfo[i],fp);i++;}改為:fputs(chInfo,fp);想一想問題10.1用fputs函數(shù)實(shí)現(xiàn)應(yīng)如何修改程序?請(qǐng)?jiān)囈辉噯栴}10.2:打開問題10.1生成的文件myInfo.txt,將其中的內(nèi)容顯示在屏幕上,要求文件名從命令行參數(shù)輸入。【解題步驟】1.定義文件指針fp;2.定義字符變量用來存放從文件中讀取的字符;3.以讀文本文件方式打開文件(文件名由命令行參數(shù)輸入);4.如果打開文件失敗,則輸出錯(cuò)誤信息并結(jié)束程序;5.讀取文件中的內(nèi)容并顯示在屏幕上;6.關(guān)閉文件。試一試問題10.2:打開問題10.1生成的文件myInfo想一想

問題10.2用fgets函數(shù)實(shí)現(xiàn)應(yīng)如何修改程序?請(qǐng)根據(jù)提示寫出完整程序。提示:(1)語句charch;改為char*chInfo;

(2)語句ch=fgetc(fp);while(ch!=EOF){putchar(ch);ch=fgetc(fp);}

改為:fgets(chInfo,100,fp);printf("%s",chInfo);注意,fgets函數(shù)中的第2個(gè)參數(shù)為要讀取的字符數(shù),要大于或等于文件的長度+1。想一想問題10.2用fgets函數(shù)實(shí)現(xiàn)應(yīng)如何修改程序練一練問題:編一程序?qū)崿F(xiàn)文件的拷貝,將文件myInfo.txt拷貝到文件myBak.txt。要求源文件名和目標(biāo)文件名都在程序運(yùn)行時(shí)通過鍵盤輸入,可將其存放在兩個(gè)字符數(shù)組中,然后再在打開文件時(shí)使用。練一練問題與討論什么是緩沖文件系統(tǒng),有什么優(yōu)點(diǎn)?二進(jìn)制文件和文本文件各有什么優(yōu)缺點(diǎn)?問題與討論什么是緩沖文件系統(tǒng),有什么優(yōu)點(diǎn)?學(xué)生容易錯(cuò)的地方文件操作完畢后不關(guān)閉文件;文件打開時(shí)沒有賦給一個(gè)文件指針。

學(xué)生容易錯(cuò)的地方文件操作完畢后不關(guān)閉文件;小結(jié):1.文件的存儲(chǔ)形式。數(shù)據(jù)在內(nèi)存中以二進(jìn)制形式存放,當(dāng)把內(nèi)存中的數(shù)據(jù)輸出到磁盤文件中時(shí)可以用兩種形式存儲(chǔ),即字符形式或二進(jìn)制形式。2.在C語言中,系統(tǒng)定義了一個(gè)文件類型FILE,用來實(shí)現(xiàn)緩沖文件系統(tǒng)方式下文件的讀寫操作,文件指針就是一個(gè)FILE類型的指針變量,由此實(shí)現(xiàn)文件的具體讀寫。3.其它讀寫函數(shù)。C語言提供了多種以緩沖文件系統(tǒng)方式讀寫文本文件的函數(shù),在ANSIC中,還有格式化讀寫函數(shù)fprintf和fscanf可用來讀寫文本文件。小結(jié):1.文件的存儲(chǔ)形式。數(shù)據(jù)在內(nèi)存中以二進(jìn)制形式存放,當(dāng)把二進(jìn)制文件的讀寫

應(yīng)知:-二進(jìn)制文件讀寫的步驟-二進(jìn)制文件讀寫函數(shù)的功能及函數(shù)參數(shù)的含義應(yīng)會(huì):

-二進(jìn)制文件的打開、讀寫、關(guān)閉-對(duì)數(shù)據(jù)塊進(jìn)行操作難點(diǎn):

-對(duì)數(shù)據(jù)塊進(jìn)行讀寫二進(jìn)制文件的讀寫應(yīng)知:英文詞匯File文件Binary二進(jìn)制英文詞匯File提問什么是緩沖文件系統(tǒng),有什么優(yōu)點(diǎn)?二進(jìn)制文件和文本文件各有什么優(yōu)缺點(diǎn)?提問知識(shí)回顧:文本文件簡單敘述文件操作四步驟定義文件指針

.打開文件

.讀寫文件

.關(guān)閉文件

.知識(shí)回顧:文本文件簡單敘述文件操作四步驟學(xué)一學(xué):二進(jìn)制文件的讀寫對(duì)于二進(jìn)制文件,以緩沖文件系統(tǒng)方式讀寫文件的步驟同樣為以下四個(gè)步驟:

①定義文件指針;②打開文件;③讀寫文件;④關(guān)閉文件。其中定義文件指針、打開文件和關(guān)閉文件的操作在上一節(jié)中已介紹過,這里主要學(xué)習(xí)用來讀寫二進(jìn)制文件的兩個(gè)函數(shù)fread和fwrite。學(xué)一學(xué):二進(jìn)制文件的讀寫對(duì)于二進(jìn)制文件,以緩沖文件系統(tǒng)方式讀學(xué)一學(xué)塊寫入函數(shù)fwrite的調(diào)用形式為:

fwrite(buffer,size,n,fp)將buffer開始處的n個(gè)大小為size字節(jié)的數(shù)據(jù)塊(記錄)寫入到文件指針fp所指向的文件中。成功返回?cái)?shù)據(jù)塊(記錄)個(gè)數(shù)n,不成功返回0。塊讀取函數(shù)fread的調(diào)用形式為:

fread(buffer,size,n,fp)從文件指針fp所指向的文件中讀取n個(gè)大小為size個(gè)字節(jié)的數(shù)據(jù)塊(記錄)到buffer所指向的地址空間。成功返回?cái)?shù)據(jù)塊(記錄)個(gè)數(shù)n,出錯(cuò)或遇文件結(jié)束返回0。學(xué)一學(xué)塊寫入函數(shù)fwrite的調(diào)用形式為:試一試問題10.3編一程序從鍵盤輸入5個(gè)整數(shù)并寫入到文件test.dat中。

調(diào)試問題10.3程序,觀察運(yùn)行結(jié)果試一試問題10.3編一程序從鍵盤輸入5個(gè)整數(shù)并寫入到文件t想一想將問題10.3中的5個(gè)整數(shù)改為5個(gè)實(shí)數(shù)寫入文件testFloat.dat中應(yīng)如何修改程序?想一想將問題10.3中的5個(gè)整數(shù)改為5個(gè)實(shí)數(shù)寫入文件test試一試問題10.4編一程序從問題10.3寫入的文件test.dat中讀取數(shù)據(jù)并顯示在屏幕上。

【解題步驟】1.定義整型數(shù)組iArray用來存放5個(gè)整數(shù);2.定義整型變量i作為循環(huán)變量;3.定義文件指針fp;4.以讀二進(jìn)制文件方式打開文件test.dat;5.如果打開文件失敗,則輸出錯(cuò)誤信息并結(jié)束程序;6.從文件中讀取5個(gè)整數(shù)并存放在數(shù)組iArray中;7.顯示數(shù)組iArray中的元素;8.關(guān)閉文件。試一試問題10.4編一程序從問題10.3寫入的文件test想一想文件testFloat.dat中存有5個(gè)實(shí)數(shù),請(qǐng)讀取并顯示出來,應(yīng)如何實(shí)現(xiàn)?想一想文件testFloat.dat中存有5個(gè)實(shí)數(shù),請(qǐng)讀取并試一試問題10.5編一程序從鍵盤輸入5個(gè)學(xué)生的成績記錄并寫入到文件stdScore.dat中。5個(gè)學(xué)生的成績記錄見表10-3。試一試問題10.5編一程序從鍵盤輸入5個(gè)學(xué)生的成績記錄并寫調(diào)試問題10.5程序,觀察運(yùn)行結(jié)果調(diào)試問題10.5程序,觀察運(yùn)行結(jié)果想一想問題10.5的寫文件操作是每次寫入一個(gè)學(xué)生的信息,循環(huán)5次,如果不使用循環(huán)語句而一次性地將5個(gè)學(xué)生數(shù)據(jù)寫入文件,應(yīng)該怎樣實(shí)現(xiàn)?想一想問題10.5的寫文件操作是每次寫入一個(gè)學(xué)生的信息,循環(huán)試一試問題10.6編一程序?qū)栴}10.5所寫的文件stdScore.dat中的數(shù)據(jù)顯示在屏幕上?!窘忸}步驟】

1.定義學(xué)生成績結(jié)構(gòu)體類型type_score;2.定義結(jié)構(gòu)體類型type_scor數(shù)組stScore[5]用來存放從文件中讀取的信息;3.定義文件指針fp;4.定義整型變量i作為循環(huán)變量;5.以讀二進(jìn)制文件方式打開文件stdScore.dat;6.如果打開文件失敗,則輸出錯(cuò)誤信息并結(jié)束程序;7.逐條讀取文件中的記錄存放在結(jié)構(gòu)體數(shù)組stScore中8.關(guān)閉文件;9.顯示結(jié)構(gòu)體數(shù)組stScore中的數(shù)據(jù)。試一試問題10.6編一程序?qū)栴}10.5所寫的文件stdS想一想問題10.6的讀取文件操作是每次讀出一個(gè)學(xué)生的信息,循環(huán)5次,如果不使用循環(huán)語句而一次性地讀出5個(gè)學(xué)生的數(shù)據(jù),程序怎樣更改?想一想練一練問題:編一程序從文件stdScore.dat(問題10.5已寫入數(shù)據(jù))中將姓名、學(xué)號(hào)和數(shù)學(xué)成績3個(gè)字段的數(shù)據(jù)保存在文件stdMath.dat中。練一練問題與討論為什么使用數(shù)據(jù)塊讀寫函數(shù)?EOF是否可以用來檢測(cè)二進(jìn)制文件的結(jié)束?怎樣檢測(cè)二進(jìn)制文件的結(jié)束?問題與討論為什么使用數(shù)據(jù)塊讀寫函數(shù)?學(xué)生容易錯(cuò)的地方對(duì)不存在的文件進(jìn)行讀操作;操作方式不熟悉。

學(xué)生容易錯(cuò)的地方對(duì)不存在的文件進(jìn)行讀操作;小結(jié)1.使用fread和fwrite函數(shù)可以方便地讀寫任意類型的數(shù)據(jù),比如int型、float型、char型等基本類型以及結(jié)構(gòu)體類型的數(shù)據(jù)。2.使用fwrite函數(shù)寫入數(shù)據(jù)的文件是二進(jìn)制文件。小結(jié)1.使用fread和fwrite函數(shù)可以方便地讀寫任意類文件的定位與隨機(jī)讀寫

應(yīng)知:-以緩沖文件系統(tǒng)方式隨機(jī)讀寫文件的步驟-指定文件位置值的含義應(yīng)會(huì):

-文件讀寫指針位置的重置-文件讀寫指針位置的隨機(jī)定位

難點(diǎn):

-文件讀寫指針位置的隨機(jī)定位

文件的定位與隨機(jī)讀寫應(yīng)知:英文詞匯Rewind重置Seek定位英文詞匯Rewind提問fputc()函數(shù)與fputs()函數(shù)的區(qū)別是什么?fgetc()函數(shù)與fgets()函數(shù)的區(qū)別是什么?

提問學(xué)一學(xué):文件的定位與隨機(jī)讀寫文件中有一個(gè)位置指針,指向當(dāng)前讀寫的位置。當(dāng)順序讀寫一個(gè)文件時(shí),每讀寫完一個(gè)一個(gè)數(shù)據(jù)單位(一個(gè)字符,或一個(gè)整數(shù),或一個(gè)結(jié)構(gòu)體變量)后,位置指針自動(dòng)移向下一個(gè)數(shù)據(jù)單位位置,如果想改變這種順序,就需要強(qiáng)制使位置指針指向指定的位置。以緩沖文件系統(tǒng)方式隨機(jī)讀寫文件的步驟為①定義文件指針;②打開文件;③文件的定位;④讀寫文件;⑤關(guān)閉文件。文件的定位可以通過重置位置指針函數(shù)rewind和隨機(jī)定位函數(shù)fseek來實(shí)現(xiàn)。學(xué)一學(xué):文件的定位與隨機(jī)讀寫文件中有一個(gè)位置指針,指向當(dāng)前讀學(xué)一學(xué)1.重置位置指針函數(shù)rewind的調(diào)用形式:

rewind(fp);使文件的讀寫位置指針重新移到文件的開頭。其中fp指向正在讀寫的文件。該函數(shù)沒有返回值。2.隨機(jī)定位函數(shù)fseek的調(diào)用形式:

fseek(fp,lOffset,iOrigin)將文件指針fp所指文件的位置指針移到指定的位置,該位置與iOrigin所代表的文件位置相距l(xiāng)Offset個(gè)字

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論