C語言程序設(shè)計教程第實用教案_第1頁
C語言程序設(shè)計教程第實用教案_第2頁
C語言程序設(shè)計教程第實用教案_第3頁
C語言程序設(shè)計教程第實用教案_第4頁
C語言程序設(shè)計教程第實用教案_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、文件(wnjin)的分類:ASCII 碼文件(文本文件):文件的每一個字節(jié)(z ji)放 一個ASCII代碼,代表一個字符。 二進(jìn)制文件 :把內(nèi)存中的數(shù)據(jù)按其在內(nèi)存中的存 儲形式原樣(yun yn)輸出到文件上。 根據(jù)數(shù)據(jù)在內(nèi)存的組織形式不同可分為兩類文件 ASCII 碼文件(文本文件) 二進(jìn)制文件 根據(jù)數(shù)據(jù)讀寫方式不同可分為兩類文件 順序存取文件 隨機(jī)存取文件 第1頁/共29頁第一頁,共30頁。三、文件(wnjin)的基本操作 打開打開(d ki)文件文件 把文件名等目錄信息從磁盤上把文件名等目錄信息從磁盤上讀讀 入內(nèi)存并存入結(jié)構(gòu)體。入內(nèi)存并存入結(jié)構(gòu)體。 關(guān)閉文件關(guān)閉文件 把內(nèi)存把內(nèi)存(ni

2、 cn)結(jié)構(gòu)體中的文件名結(jié)構(gòu)體中的文件名等目錄等目錄 信息寫入磁盤。信息寫入磁盤。(3) 寫文件寫文件 向文件寫內(nèi)容。向文件寫內(nèi)容。 (4) 讀文件讀文件 從文件讀內(nèi)容。從文件讀內(nèi)容。 四、 文件的輸入輸出方式 C語言對文件進(jìn)行處理分為: 非緩沖文件系統(tǒng) 緩沖文件系統(tǒng)第2頁/共29頁第二頁,共30頁。非緩沖文件系統(tǒng) 程序與外設(shè)直接(zhji)進(jìn)行數(shù)據(jù)交換。 特點(diǎn)(tdin) 每讀寫一次都要啟動外設(shè)。 緩沖文件系統(tǒng) 程序與外設(shè)通過內(nèi)存(ni cn)緩沖區(qū)進(jìn)行 數(shù)據(jù)交換。(常用的方式) 特點(diǎn) 只有內(nèi)存緩沖區(qū)滿(寫盤)或空(讀盤)才 啟動外設(shè)。 程序數(shù)據(jù)區(qū)輸出文件緩沖區(qū)輸入文件緩沖區(qū)磁盤第3頁/共2

3、9頁第三頁,共30頁。1. 文件類型(FILE) 每個被使用的文件都在內(nèi)存中開辟一個區(qū),用來存放(cnfng)文件的有關(guān)信息(如文件名,狀態(tài),當(dāng)前位置等)。這些信息保存在一個結(jié)構(gòu)體類型的變量中。結(jié)構(gòu)體類型由系統(tǒng)定義為“FILE”。 有的C版本在 stdio.h文件中有如下定義:typedef struct int _fd;; /* 文件號 */ int _cleft; /* 緩沖區(qū)中剩下的字符 */ int _mode; /* 文件操作模式(msh) */ char *_nexttc; /* 下一個字符位置 */ char *_buff; /* 文件緩沖區(qū)位置 */ FILE;13.1. 文件

4、(wnjin)指針第4頁/共29頁第四頁,共30頁。2. 定義FILE類型指針(zhzhn)變量 FILE 類型(lixng)的指針變量定義方法 FILE *指針(zhzhn)變量名;例如:FILE *fp;含義:fp是一個指向FILE類型結(jié)構(gòu)體的指針變量。 可以使可以使fpfp指向某個文件的結(jié)構(gòu)體變指向某個文件的結(jié)構(gòu)體變量,從而通過該結(jié)構(gòu)體變量中的文件信量,從而通過該結(jié)構(gòu)體變量中的文件信息能夠訪問該文件。息能夠訪問該文件。 第5頁/共29頁第五頁,共30頁。13.2 13.2 文件(wnjin)(wnjin)的打開與關(guān)閉 13.2.1 文件(wnjin)的打開函數(shù)(fopen函數(shù)) (1)

5、(1) 調(diào)用(dioyng)(dioyng)方式: FILE *fp ;fp= fopen(文件名,文件的使用方式);所要打開的文件名。所要打開的文件名。必須是用雙引號引起的字符串常量。 具有特定含意的符號具有特定含意的符號也必須由雙引號引起用戶定義的文件類型指針變量功能:以指定的方式打開指定的文件,若操作 成功,則返回一個指向該文件的指針,若打 開文件時出現(xiàn)錯誤,則返回空指針NULL。 例 FILE *fp; fp=fopen(stu.dat,r);第6頁/共29頁第六頁,共30頁。文件使用(shyng)方式 基本方式字符(z f)(單獨(dú)使用是對文本文件): r 僅為讀而打開。僅為讀而打開。

6、 ( (只讀文件只讀文件) ) w 僅為寫而打開。僅為寫而打開。 ( (建立新文件建立新文件) ) a 僅為添加而打開。僅為添加而打開。( (寫舊文件寫舊文件) ) 按二進(jìn)制格式(g shi)讀寫文件(基本方式字符+“b”) b 輔助說明,按二進(jìn)制格式讀寫文件。輔助說明,按二進(jìn)制格式讀寫文件。 同時進(jìn)行讀寫文件(基本方式字符+“b”+“+”) + 輔助說明,可同時進(jìn)行讀和寫文件。輔助說明,可同時進(jìn)行讀和寫文件。 例如:fp=(“stu.dat”,“rb”);例如:fp=(“stu.dat”,“r+”);第7頁/共29頁第七頁,共30頁。例:#include main() FILE *fp; i

7、f(fp=fopen(stu.dat,r) =NULL) printf(file not found.); exit(0); else printf(file opened ok!); fclose(fp); 程序運(yùn)行結(jié)果: 如果磁盤上存在文件stu.dat,屏幕(pngm)上會顯示file open ok!,否則屏幕(pngm)上顯示file not found.。常使用此方法打開(d ki)一個文件exit函數(shù)的功能是關(guān)閉所有文件,終止程序運(yùn)行。exit(0)為正常(zhngchng)終止程序第8頁/共29頁第八頁,共30頁。13.2.2 文件的關(guān)閉(gunb)函數(shù)(fclose函數(shù)) (

8、1) 調(diào)用(dioyng)方式: fclose(文件(wnjin)指針); 功能:關(guān)閉由文件指針指定的文件,把緩沖區(qū) 中的數(shù)據(jù)(未裝滿緩沖區(qū)的數(shù)據(jù))輸出 到磁盤上,釋放文件指針。例如: FILE *fp; fp=fopen(“output.dat”,“r+”); /* 進(jìn)行讀寫操作 */ fclose(fp);注意:fopen函數(shù)和fclose函數(shù)總是成對出現(xiàn)的。 無fclose函數(shù)時會導(dǎo)致部分?jǐn)?shù)據(jù)丟失!第9頁/共29頁第九頁,共30頁。13.3 13.3 文件(wnjin)(wnjin)的讀寫 13.3.1 單個字符操作(cozu)的讀寫函數(shù) 這兩個函數(shù)是以字符為單位(dnwi)進(jìn)行文件讀寫

9、的函數(shù)。1. fputc1. fputc函數(shù)函數(shù)一般調(diào)用形式: fputc(fputc(字符常量或變量字符常量或變量, ,文件指針文件指針); ); 功能:把指定字符存入文件指針?biāo)傅奈募小?如果輸出失敗,則返回一個EOF(-1)。例如:fputc(ch,fp); (其中ch為字符變量,fp為文件指針) 含義:將ch的值輸出到fp所指向的文件中去。(EOF是在stdio.h文件中定義的符號常量,值為-1)第10頁/共29頁第十頁,共30頁。2. fgetc2. fgetc函數(shù)函數(shù)(hnsh)(hnsh)一般(ybn)調(diào)用形式: 字符字符(z f)(z f)變量變量=fgetc(=fgetc(

10、文文件指針件指針); ); 功能:從文件指針?biāo)肝募凶x一個字符賦給指 定的字符變量。當(dāng)遇文件結(jié)束符,返回一 個文件結(jié)束標(biāo)志EOF(-1)。例如:ch=fgetc(fp); 其中ch為字符變量,fp為文件指針。 含義:從fp所指向的文件中讀入一個字符賦 給字符變量ch。第11頁/共29頁第十一頁,共30頁。例: 閱讀程序。 #include stdio.h #define NULL 0 main() FILE *fp; int count=0; char c; if(fp=fopen(“file.txt”,“r”)=NULL) printf(“Cant Open File n”); exit(

11、0); c=fgetc(fp); while(c!=EOF) count+; c=fgetc(fp); printf(“count=%dn”,count); fclose(fp); 若文件(wnjin)file.txt的內(nèi)容是: abcd1234ABCD輸出(shch)結(jié)果:12這是讀一個文本文件(wnjin)中字符,并判斷文件(wnjin)是否結(jié)束的常用方法第12頁/共29頁第十二頁,共30頁。13.3.2 字符串的讀寫函數(shù)(hnsh)這兩個函數(shù)是以字符串為單位(dnwi)進(jìn)行文件讀寫的函數(shù)。一般(ybn)調(diào)用形式: fputs(fputs(字符串字符串, ,文件指針文件指針);); 1.

12、fputs函數(shù)功能:向指定文件輸出一個字符串。例如:fputs(str,fp); (其中str是字符數(shù)組名)含義:向fp 所指向的文件中輸出str中的字符串。2. fgets函數(shù)fgets(fgets(字符串字符串, ,字符串長度字符串長度, ,文件指針文件指針);); 功能:從指定文件中讀入一個字符串。 例如:fgets(str,n,fp); (其中str是字符數(shù)組名)含義:從fp指向的文件讀取長度為n-1的字符串, 最后加一個0存入字符數(shù)組str中。調(diào)用形式: 第13頁/共29頁第十三頁,共30頁。13.3.3 數(shù)據(jù)(shj)塊的讀寫函數(shù)一般(ybn)調(diào)用形式: fread(buffer,

13、size,count,fp); fwrite(buffer,size,count,fp); 其中(qzhng):buffer:是一個指針。(是起始地址)。 對fread來說,它是讀入數(shù)據(jù)的存放地址。 對fwrite來說,它是輸出數(shù)據(jù)的地址。size :要讀寫的字節(jié)數(shù)。 count:要進(jìn)行讀寫多少個size字節(jié)的數(shù)據(jù)項。 功能:對fp所指的文件讀寫buffer所指的size*count 個字節(jié)數(shù)據(jù)。 例如:fread(f,4,2,fp); (其中f是實型數(shù)組名)第14頁/共29頁第十四頁,共30頁。例1 把數(shù)組a寫入文件(wnjin)fa;再從fa讀入數(shù)組b。 #include stdio.h

14、main() FILE* fp; int a100=1,5,6,78,21,34,67,87,23,b100, i ; fp=fopen(tmp,wb); fwrite(a,sizeof(a),1,fp); /* fwrite(a,sizeof(int),100,fp);*/ fclose(fp); fp=fopen(tmp,rb); fread(b,sizeof(a),1,fp); for(puts(),i=0;i10;i+)printf(%6d,bi); fclose(fp);第15頁/共29頁第十五頁,共30頁。13.3.4 格式化讀寫函數(shù)(hnsh)這兩個函數(shù)是進(jìn)行格式(g shi)讀

15、寫文件的函數(shù) 。一般調(diào)用(dioyng)形式: fprintf(文件指針,格式字符串,輸出表列); fscanf(文件指針,格式字符串,輸入表列) ; 例如:fprintf(fp,“%d,%6.2f”,i,x);功能:按指定格式將數(shù)據(jù)寫到指定文件中。 或從指定文件按格式輸入數(shù)據(jù)。又如:fscanf(fp,“%d,%f”,&i,&x);第16頁/共29頁第十六頁,共30頁。13.4 13.4 文件的定位(dngwi)(dngwi)與出錯檢測 1. rewind函數(shù)(hnsh)一般調(diào)用(dioyng)形式: rewind(rewind(文件指針文件指針);); 功能:使位置指針重新返回文件的開頭。

16、2. fseek函數(shù) 一般調(diào)用形式: fseek(fseek(文件指針文件指針,位移量,起始點(diǎn)) ); 起始點(diǎn):用0、1、2或其對應(yīng)的名字SEEK_SET、 SEEK_CUR、SEEK_END代替,分別表 示文件開始、文件當(dāng)前位置、文件末尾。 位移量:指以起始點(diǎn)為基點(diǎn),向前(-)或向后移動的 字節(jié)數(shù)。ANSI C標(biāo)準(zhǔn)規(guī)定在數(shù)字末尾加一個 字母L,表示long型。 第17頁/共29頁第十七頁,共30頁。功能:把文件的讀寫位置指針(zhzhn)移到指定的位置。 例如(lr):fseek(fp,128L,SEEK_SET); 將位置指針移到離文件頭128個字節(jié)處。例如:fseek(fp,-10L,2

17、); 將位置指針從文件末尾處向后退(hutu)10個字節(jié)。注意:fseek函數(shù)一般用于二進(jìn)制文件。 3. ftell函數(shù) 一般調(diào)用形式: ftell(ftell(文件指針文件指針);); 功能:返回文件位置指針的當(dāng)前值。例如:pos=ftell(fp); 獲取fp指向文件的當(dāng)前讀寫位置,并將其值 賦給變量pos 。 第18頁/共29頁第十八頁,共30頁。 . ferror()函數(shù) ferror()函數(shù)用來確定文件操作系統(tǒng)中是否出錯。其函數(shù)原型為: int ferror(FILE *fp); 如果ferror()函數(shù)返回值為0,則表示此前的文件操作成功;否則,若返回一個非0值,則表示最近一次文件

18、操作出錯。由于對文件的每次I/O操作都會形成新的出錯碼,所以在每次文件操作后應(yīng)立即調(diào)用ferror()函數(shù)查看此次操作是否成功,否則會丟失信息。 表示上述功能常用(chn yn)的語句的是: if(ferror(fp) printf(file can not I/On); fclose(fp); exit(0); 第19頁/共29頁第十九頁,共30頁。5. clearer()函數(shù) clearer()函數(shù)的函數(shù)原型(yunxng)為: void clearer(FILE *fp); 功能是清除文件結(jié)束標(biāo)志和文件出錯標(biāo)志(設(shè)置為0)。本函數(shù)沒有返回值。6exit函數(shù) 當(dāng)文件出現(xiàn)錯誤時,為了避免數(shù)據(jù)

19、丟失,正常(zhngchng)返回操作系統(tǒng),可以調(diào)用過程控制函數(shù)exit關(guān)閉文件,終止程序的執(zhí)行。一般形式為:exit(status);第20頁/共29頁第二十頁,共30頁。13.5 13.5 文件(wnjin)(wnjin)綜合實例 編寫一個程序,從data.datdata.dat文本文件中讀出一個字符,將其加密后寫入data1.datdata1.dat文件中,加密方式是字符的ASCIIASCII碼加1 1。 分析:先打開data.datdata.dat文本文件并建立data1.datdata1.dat文件,從前者讀出一個字符c c,將(c+1)%256(c+1)%256這個(zh ge)A

20、SCII(zh ge)ASCII碼對應(yīng)的字符寫入后者中。直到讀完為止。 第21頁/共29頁第二十一頁,共30頁。#includevoid main()FILE *fp,*fp2; char c; if(fp=fopen(data.dat,r)=NULL) printf(不能打開文件(wnjin)n); return; if(fp1=fopen(data1.dat),w)=NULL) printf(不能建立文件(wnjin)n); return; while(!feof(fp) c=fgetc(fp); c=(c+1)%256; fputc(c,fp1); fclose(fp); fclose(

21、fp); 第22頁/共29頁第二十二頁,共30頁。 編寫程序,創(chuàng)建數(shù)據(jù)文件goods.dat用于存儲商品信息。已知每一個(y )商品 包括:名稱,單價,進(jìn)貨量,和庫存4項數(shù)據(jù)。按指定的格式讀寫.第23頁/共29頁第二十三頁,共30頁。#includemain()int count ,amount,stock;float price;char name20;FILE *fp;if(fp=fopen(“goods.dat”,”wb”)= =NULL)printf(“can not open file.n”);exit(0);第24頁/共29頁第二十四頁,共30頁。for(count=0; ;cou

22、nt+)fprintf(“%d”,count+1);scanf(“%s%d%d”,name,&price,&amount,&stock);if(price=0)break; printf(fp,”%sn%.2f,%d,%d”,name,price,amount,stock);第25頁/共29頁第二十五頁,共30頁。fclose(fp);fp=fopen(“goods.dat”,”rb”);printf(“overstock goods is:n”);while(!feof(fp)fscanf(fp,”%s%f,%d,%d”,name,&price,&amount,&stock);if(stoc

23、k=amount/2);printf(“%s,%.2f,%d,%dn”,name,price,amount,stock);fclose(fp);第26頁/共29頁第二十六頁,共30頁。13.6 13.6 小 結(jié)(1)(1)文件是指存儲在外部介質(zhì)上的數(shù)據(jù)集合。 (2)(2)對文件的操作(cozu)(cozu)包括文件的打開、關(guān)閉、讀、寫、文件的定位和出錯的檢驗等?,F(xiàn)在分別介紹如下:在C C語言中使用fopen()fopen()函數(shù)完成對文件的打開操作(cozu)(cozu)。其一般調(diào)用方式為:fopen(fopen(文件名,操作(cozu)(cozu)方式););關(guān)閉文件用函數(shù)fclose()f

24、close()函數(shù)來實現(xiàn),其調(diào)用的形式為:fclose(fp);fclose(fp);文件的讀函數(shù)包括fgetc()fgetc()函數(shù)、fgets()fgets()函數(shù)、fread()fread()函數(shù)和fscanf()fscanf()函數(shù)。 fgetc() fgetc()函數(shù)的功能是從指定的文件中讀入一個字符。 fgets() fgets()函數(shù)的功能是從文件指針?biāo)赶虻奈募?,讀入一個字符串。 fscanf() fscanf()函數(shù)為格式化輸入函數(shù),其功能是從指定的文件中讀取指定格式的數(shù)據(jù)。 fread() fread()函數(shù)的功能是從指定文件中讀入一組數(shù)據(jù)。有關(guān)寫操作(cozu)(cozu)的函數(shù)主要有fputc()fputc()函數(shù)、fputs()fputs()函數(shù)、fwrite()fwrite()函數(shù)和fprintf()fprintf()函數(shù)。第27頁/共29頁第二十七頁,共30頁。 fputs() fputs()函數(shù),功能是將字符串寫入文件指針?biāo)傅奈募小puts()fputs()函數(shù)帶返回值。如輸出成功,返回值為0 0,否則返回文件結(jié)束標(biāo)志EOFEOF其值為-1-1。 fprintf() fprintf()函數(shù)為

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論