C語言程序設計教程(第二版)_第1頁
C語言程序設計教程(第二版)_第2頁
C語言程序設計教程(第二版)_第3頁
C語言程序設計教程(第二版)_第4頁
C語言程序設計教程(第二版)_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

4、(文件指針);12.3 打開、關閉和檢測文件 功能:檢測對文件指針所指向的文件在用各種輸入、輸出函數(shù)進行讀寫時是否發(fā)生了錯誤,如果ferror()函數(shù)返回值為0,表示未出錯;如果返回一個非零值,表示出錯。在執(zhí)行fopen()函數(shù)時,ferror()函數(shù)的初始值自動置為0。63、檢測文件(3)清除錯誤標志和文件結束標志函數(shù)(clearerr()函數(shù)) clearerr(文件指針) ;12.3 打開、關閉和檢測文件 功能:用于清除文件指針所指向的文件的出錯標志和文件結束標志,使它們的值為0。假設在調用一個輸入函數(shù)時出現(xiàn)錯誤,這時ferror()函數(shù)值為一個非零值,在調用clearerr()函數(shù)后,

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

6、如12.1 編寫程序,從鍵盤輸入一個以“$”結尾的字符串,并將它們原樣存到名為文件中。 #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);/* 關閉文

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

8、.4.2、fputs,fgets函數(shù):讀寫一個字符串(1)fputs函數(shù)fputs(str,fp) str:為指向字符串的指針或字符數(shù)組 功能: 該函數(shù)將str所指向的字符串活字符串常量輸出到指定的文件中,但不包括字符串結束符當操作成功時,函數(shù)的返回值為0,否則為一個非0值(tc中)(2)fgets函數(shù)fgets(str,n,fp); 功能: 從指定的文件中讀入n個字符,存放到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) /* 從鍵盤讀入的字符串長度大于0時,執(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個學生的學號、姓名和成績,并將它們存放到磁盤文件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個字節(jié)的數(shù)據(jù)項數(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ù)和隨機讀寫 fseek(文件類型指針,位移量,起始點)。 功能:移動文件的位置指針到指定的位置上,隨后的讀寫操作將從此位置開始。利用fseek()函數(shù)可以實現(xiàn)文件的隨機讀寫。12.5 文件的定位18【例12.6】 在磁盤文件(ss.bxt)上存有10個實型數(shù)據(jù)。編寫程序將第1、3、5、7、9個數(shù)據(jù)輸入到計算機,并在屏幕上顯示出來。#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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論