C語(yǔ)言程序設(shè)計(jì)教程(第二版)_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)教程(第二版)_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)教程(第二版)_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)教程(第二版)_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)教程(第二版)_第5頁(yè)
已閱讀5頁(yè),還剩15頁(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)介

1、第12章 文件 C語(yǔ)言文件。 文件類型指針。 打開、關(guān)閉和檢測(cè)文件 文件的輸入和輸出 文件的定位1 文件: 存儲(chǔ)在外部介質(zhì)上的、可由計(jì)算機(jī)識(shí)別的一組相關(guān)數(shù)據(jù)的集合。 C程序文件,是一個(gè)字符序列。 按文件中數(shù)據(jù)的組織形式(即代碼存放形式)可分為兩種文件: ASCII文本文件:采用ACSII代碼存儲(chǔ)方式,每個(gè)字符占一個(gè)字節(jié),存儲(chǔ)其對(duì)應(yīng)的ASCII碼. 二進(jìn)制文件:采用C規(guī)定的內(nèi)存數(shù)據(jù)的存儲(chǔ)方式 系統(tǒng)將鍵盤、顯示器處理為標(biāo)準(zhǔn)設(shè)備文件。 C系統(tǒng)對(duì)文件的處理采用緩沖文件系統(tǒng)12.1、C語(yǔ)言文件2 每個(gè)被使用的文件都在內(nèi)存中開辟了一個(gè)區(qū),用來(lái)存放該文件的信息。 文件的信息保存在一個(gè)名為FILE的結(jié)構(gòu)體類型

2、的變量中。該結(jié)構(gòu)體類型由系統(tǒng)定義 定義文件型指針變量:FILE * 指針變量名如: FILE * fp;fp:將指向某個(gè)文件的結(jié)構(gòu)體變量C規(guī)定了三個(gè)標(biāo)準(zhǔn)設(shè)備文件指針,無(wú)需再定義。 stdin:標(biāo)準(zhǔn)輸入文件(鍵盤) stdout:標(biāo)準(zhǔn)輸出文件(顯示器) stderr:標(biāo)準(zhǔn)錯(cuò)誤輸出文件(顯示器)12.2、文件類型指針31、打開文件(fopen 函數(shù))FILE *FP;fp=fopen(文件名,使用文件方式)使用文件的方式詳見表12.1fopen函數(shù)是一個(gè)返回指針值的函數(shù)當(dāng)返回值是NULL時(shí),表示無(wú)法打開該文件常采用下列方式打開一個(gè)文件:if (fp=fopen(“file1”,”r”)=NULL)

3、 printf(”cant open this file n”) exit(0); /* 關(guān)閉文件函數(shù) */ 2、關(guān)閉(fclose函數(shù))fclose(文件指針)12.3 打開、關(guān)閉和檢測(cè)文件43、檢測(cè)文件 功能:檢測(cè)“文件指針”所指向文件中的位置指針是否處于文件結(jié)束位置,如果feof()函數(shù)返回值為0,表示文件未結(jié)束(即文件的位置指針沒有指到文件末尾)。如果返回一個(gè)非零值,表示文件結(jié)束(即文件的位置指針已經(jīng)指到文件末尾)。12.3 打開、關(guān)閉和檢測(cè)文件(1) 檢測(cè)文件是否結(jié)束函數(shù)(feof()函數(shù)) feof(文件指針);53、檢測(cè)文件(2)檢測(cè)錯(cuò)誤函數(shù)(ferror()函數(shù)) ferror

4、(文件指針);12.3 打開、關(guān)閉和檢測(cè)文件 功能:檢測(cè)對(duì)文件指針?biāo)赶虻奈募谟酶鞣N輸入、輸出函數(shù)進(jìn)行讀寫時(shí)是否發(fā)生了錯(cuò)誤,如果ferror()函數(shù)返回值為0,表示未出錯(cuò);如果返回一個(gè)非零值,表示出錯(cuò)。在執(zhí)行fopen()函數(shù)時(shí),ferror()函數(shù)的初始值自動(dòng)置為0。63、檢測(cè)文件(3)清除錯(cuò)誤標(biāo)志和文件結(jié)束標(biāo)志函數(shù)(clearerr()函數(shù)) clearerr(文件指針) ;12.3 打開、關(guān)閉和檢測(cè)文件 功能:用于清除文件指針?biāo)赶虻奈募某鲥e(cuò)標(biāo)志和文件結(jié)束標(biāo)志,使它們的值為0。假設(shè)在調(diào)用一個(gè)輸入函數(shù)時(shí)出現(xiàn)錯(cuò)誤,這時(shí)ferror()函數(shù)值為一個(gè)非零值,在調(diào)用clearerr()函數(shù)后,

5、ferror()函數(shù)值變?yōu)?值。712.4.1、fputc,fgetc函數(shù)(1)fputc函數(shù):把一個(gè)字符寫到文件中fputc(ch,fp)ch:為待輸出的字符fputc函數(shù)的返回值:當(dāng)輸出成功時(shí)為ch的值 當(dāng)輸出不成功時(shí)為EOF即 -1。(2)fget函數(shù):從指定文件中讀入一個(gè)字符ch=fgetc(fp);12.4、文件的輸入和輸出8如: 順序讀入磁盤文件中的字符并輸出對(duì)于文本文件:ch=fgetc(fp);while(ch!=EOF) putchar(ch); ch=fgetc(fp); 對(duì)于二進(jìn)制文件:while(!feof() ch=fgetc(fp); putchar(ch); 9例

6、如12.1 編寫程序,從鍵盤輸入一個(gè)以“$”結(jié)尾的字符串,并將它們?cè)瓨哟娴矫麨槲募小?#includestdio.hmain( ) FILE *fout; /*定義文件指針*/ char ch; if(fout=fopen(“”,w)=NULL)/*為寫打開文件*/ printf(can not open filen); exit(0); ch=getchar(); while(ch!=$) fputc(ch,fout);/*將字符變量ch的值輸出到文件中*/putchar(ch); /* 將字符變量ch的值輸出到屏幕*/ ch=getchar( ); fclose(fout);/* 關(guān)閉文

7、件*/ 10例如12.2編寫程序讀入【例12.1】生成的文本文件,并將文件內(nèi)容原樣輸出到顯示屏上。#include stdio.hmain( ) FILE *fin;/*定義文件指針*/ char ch; if(fin=fopen(“”,r)=NULL) /*為讀打開文件*/ printf(can not open infilen); exit(0); while(!feof(fin) /*當(dāng)沒有到文件末尾時(shí)執(zhí)行循環(huán)*/ ch=fgetc(fin); /*從文件中讀一個(gè)字符*/ putchar(ch); /* 將字符變量ch的值輸出到屏幕*/ fc1ose(fin);/* 關(guān)閉文件*/1112

8、.4.2、fputs,fgets函數(shù):讀寫一個(gè)字符串(1)fputs函數(shù)fputs(str,fp) str:為指向字符串的指針或字符數(shù)組 功能: 該函數(shù)將str所指向的字符串活字符串常量輸出到指定的文件中,但不包括字符串結(jié)束符當(dāng)操作成功時(shí),函數(shù)的返回值為0,否則為一個(gè)非0值(tc中)(2)fgets函數(shù)fgets(str,n,fp); 功能: 從指定的文件中讀入n個(gè)字符,存放到str中,并加0,函數(shù)的返回值為str的地址12【例12.3】將從鍵盤上輸入的若干行字符輸出到磁盤文件中。#include stdio.h#include string.hmain( ) FILE *fp; char s

9、tr80; if(fp=fopen(lx.txt, w)=NULL) printf(File can not openedn); exit(0); while(strlen(gets(str)0) /* 從鍵盤讀入的字符串長(zhǎng)度大于0時(shí),執(zhí)行循環(huán)*/ fputs(str,fp); /*將字符串寫入文件*/ fputs(n,fp);/*將換行符寫入文件*/ fclose(fp); 1312.4.3、fprintf、fscanf函數(shù):讀寫一組數(shù)據(jù)fscanf(文件指針,格式字符串,輸入表列);fprintf(文件指針,格式字符串,輸出表列);如: int a3; fscanf(fin,”%d%d%d

10、”,&a0,&a1,&a2); fwrite(fout,”%d,%d,%d”,a0,a1,a2);14例如12.4 編寫程序從鍵盤輸入3個(gè)學(xué)生的學(xué)號(hào)、姓名和成績(jī),并將它們存放到磁盤文件stud.txt中。 #include stdio.h#define SIZE 3main( ) int i,num; char name10; float score; FILE *fout; if(fout=fopen(stud.txt,w)=NULL) printf(can not open filen); exit(0); for(i=0;iSIZE;i+) scanf(%d%s%f,&num,name,

11、&score); fprintf(fout, %d %s %f ,num,name,score); fclose(fout);1512.4.4、fread、fwrite函數(shù):讀寫一組數(shù)據(jù)fread(buffer,size,count,fp);fwrite(buffer,size,count,fp);其中:buffer:讀入或輸出數(shù)據(jù)的指針size :字節(jié)數(shù)count :大小為size個(gè)字節(jié)的數(shù)據(jù)項(xiàng)數(shù)fp :文件指針函數(shù)返回count的值如: int a3; fread(a,sizeof(int),3,fin); fwrite(a,sizeof(int),3,fout);16例如12.5 用fr

12、ead()函數(shù)和fwrite()函數(shù)修改【例12.4】。#include stdio.h#define SIZE 3struct student int num; char name10; int score; stdSIZE;main( ) int i; FILE *fout; if(fout=fopen(stud.bxt,wb))=NULL) printf(can not open filen); exit(0); for(i=0;iSIZE;i+ scanf(%d%s%d,&stdi.num,,&stdi.score); fwrite(&stdi,sizeof(stru

13、ct student),1,fout); fclose(fout);1712.5.1 rewind()函數(shù) rewind(文件指針); 功能:將文件的位置指針置于文件的開頭。此函數(shù)沒有返回值。 12.5.2 fseek()函數(shù)和隨機(jī)讀寫 fseek(文件類型指針,位移量,起始點(diǎn))。 功能:移動(dòng)文件的位置指針到指定的位置上,隨后的讀寫操作將從此位置開始。利用fseek()函數(shù)可以實(shí)現(xiàn)文件的隨機(jī)讀寫。12.5 文件的定位18【例12.6】 在磁盤文件(ss.bxt)上存有10個(gè)實(shí)型數(shù)據(jù)。編寫程序?qū)⒌?、3、5、7、9個(gè)數(shù)據(jù)輸入到計(jì)算機(jī),并在屏幕上顯示出來(lái)。#include stdio.hmain( ) int i;float d10; FILE *fp; if(fp=fopen(“ss.bxt”,rb)=NULL) printf(cannot open filen); exit(0); for(i=0;i10;i+=2) fread(&di,4,1,fp); printf(%8.2fn, di);

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論