




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、9 文件7/22/20221解析C程序設(shè)計第2章 簡單程序設(shè)計文件系統(tǒng)緩沖型文件系統(tǒng):系統(tǒng)自動在內(nèi)存中為每個文件開辟一個緩沖區(qū),作為程序和磁盤文件數(shù)據(jù)交流的中間媒介.3、關(guān)閉文件(寫入磁盤)變量(內(nèi)存)2、讀寫文件(磁盤)1、打開文件(寫入緩沖區(qū))文件緩沖區(qū)(內(nèi)存)三步中的每一步都是通過C語言的庫函數(shù)實現(xiàn)2解析C程序設(shè)計第2章 簡單程序設(shè)計與文件輸入輸出相關(guān)的庫函數(shù)#include 打開:fopen();讀寫:fgetc(); fputc();fgets(); fputs();fread(); fwrite();fscanf(); fprintf();文件定位指針rewind(); fseek
2、(); ftell();feof();關(guān)閉:fclose();法寶:每個庫函數(shù)在調(diào)用時可以查詢。TC:CTRL+F1VC 輸入函數(shù)名即可看到函數(shù)形參。3解析C程序設(shè)計第2章 簡單程序設(shè)計要解決的問題1:將學(xué)生信息存入文件,再從文件調(diào)入數(shù)組#include#define N 30struct stuchar name10;int num;int age;char addr15; ; 4解析C程序設(shè)計第2章 簡單程序設(shè)計1、輸入學(xué)生信息存入數(shù)組void main()struct stu boyaN,boybN,*pp,*qq; FILE *fp; /*定義一個用于指向FILE類型的指針fp*/in
3、t i; printf(ninput datan);for(i=0,pp=boya;iname,&pp-num,&pp-age,pp-addr); FILE類型是在stdio.h文件中定義的。 typedef struct int level; /*緩沖區(qū)滿或空的程度*/ unsigned flags; /*文件狀態(tài)標志*/ char fd; /*文件描述符*/ unsigned char hold; /*如無緩沖區(qū)不讀字符*/ short bsize; /*緩沖區(qū)的大小*/ unsigned char *buffer;/*數(shù)據(jù)緩沖區(qū)的位置*/ unsigned char *curp; /*文
4、件定位指針*/ unsigned istemp; /*臨時文件指示器*/ short token; /*用于有效性檢查*/ FILE;5解析C程序設(shè)計第2章 簡單程序設(shè)計2、存入文件(打開文件-存儲-關(guān)閉文件) /*先要打開文件*/if(fp=fopen(stu_list.dat,wb+)=NULL)printf(Cannot open file strike any key exit!);exit(1);FILE *fopen(char *filename, char * type);例:FILE *fp = fopen(C:CONFIG.SYS, rw);filename是文件名包含路徑。
5、如果不含路徑,表示打開當前目錄下的文件type是打開方式常用為r、w、rw和a,分別表示只讀、只寫、讀寫和添加“b”表示二進制文件,不寫“b”表示文本文件返回值為指向此文件的指針,留待以后使用如果打開失敗,返回值為NULLint a=30000; ASCII碼文件中存儲格式:3 ,0 ,0 ,0, 0,(5個字節(jié))二進制文件中存儲格式:30000的補碼(2個字節(jié)),即 11101010 01100000二者各有特點:ASCII文件浪費空間和時間,直觀二進制文件節(jié)省空間和時間,不直觀6解析C程序設(shè)計第2章 簡單程序設(shè)計2、存入文件(打開文件-存儲-關(guān)閉文件)/*存入文件(輸出到文件)*/for(
6、i=0,pp=boya;iname,pp-num,pp-age,pp-addr);如果存儲的全部是字符類型,也可以用fwrite( pp, sizeof(struct stu), 1, fp);int fprintf(FILE *fp, char *format, arg1, , argn)函數(shù)功能:按照format給出的控制符格式,將變元arg1,argn的值寫入到fp所指向的文件中去 。unsigned fwrite(void *ptr,unsigned size,unsigned numb,FILE *fp);函數(shù)功能:把從ptr開始的numb個size大小的數(shù)據(jù)塊寫入fp指向的文件,函
7、數(shù)調(diào)用成功返回count的值,否則返回-1。當寫一個字符或一個字符串時,可用fputc()和fputs().int fputc(int c, FILE *fp);功能:向fp輸出字符c若寫入錯誤,則返回EOF,否則返回c例:fputc(a, fp); /*將字符a寫到fp指向的文件*/int fputs(char *s, FILE *fp);功能:將字符串寫到fp指向的文件中去成功時返回0,出錯時返回EOF例:fputs(“abcde”, fp); /*將字符串寫到fp指向的文件*/7解析C程序設(shè)計第2章 簡單程序設(shè)計2、存入文件(打開文件-存儲-關(guān)閉文件)/*最后關(guān)閉文件*/fclose(f
8、p);int fclose(FILE *fp);函數(shù)功能:關(guān)閉文件,此時,fp不再指向文件在內(nèi)存的緩沖區(qū)。返回值:關(guān)閉成功時返回值為0。否則(如磁盤空間不足、寫保護或關(guān)閉已經(jīng)關(guān)閉的文件)返回EOF,即-1。8解析C程序設(shè)計第2章 簡單程序設(shè)計3、從文件讀入到數(shù)組(打開文件-讀入到數(shù)組-關(guān)閉文件)if(fp=fopen(stu_list.dat,rb)=NULL)printf(Cannot open file strike any key exit!);exit(2); for(i=0;iname,&qq-num,&qq-age,qq-addr);printf(nnnametnumber age
9、 addrn);qq=boyb;for(i=0;iname,qq-num, qq-age,qq-addr);fclose(fp);輸出到stdout文件,即輸出到屏幕。其實,從鍵盤輸入、輸出到屏幕與報錯都是以文件的形式來存儲信息,這三個標準設(shè)備文件分別是stdin,stdout,stderr從用戶角度對文件分類,可分為兩類:標準設(shè)備文件和普通磁盤文件9解析C程序設(shè)計第2章 簡單程序設(shè)計要解決的問題2:復(fù)制文件輸入兩個文件名打開這兩個文件將一個文件的內(nèi)容復(fù)制到另外一個文件中關(guān)閉這兩個文件10解析C程序設(shè)計第2章 簡單程序設(shè)計#include#includevoid main() FILE *fp
10、1,*fp2; char ch,file130,file230;printf(Input source file :);scanf(%s,file1); /*輸入源文件名*/printf(Input object file :);scanf(%s,file2); /*輸入目的文件名*/if(fp1=fopen(file1,r)=NULL)printf(Cannot open %sn,file1);exit(1); /*打開源文件*/if(fp2=fopen(file2,w)=NULL) fp2=stdout; /*打開目的文件,找不到的話輸出到屏幕*/ /*從源文件中讀一個字符,并寫入目的文件
11、中*/while(ch=fgetc(fp1)!=EOF) fputc(ch,fp2); fclose(fp1); /*關(guān)閉兩個文件*/fclose(fp2); 11解析C程序設(shè)計第2章 簡單程序設(shè)計/*copy.c*/#include#includevoid main( int argc,char *argv )FILE *fp1,*fp2; char ch;if(argc!=3) puts(error in parameters!); exit(0); if(fp1=fopen( argv1 , r)=NULL)printf(Cannot open %sn,argv1);exit(1); /
12、*打開源文件*/if(fp2=fopen( argv2 ,w)=NULL) fp2=stdout; /*打開目的文件,找不到的話輸出到屏幕*/*從源文件中讀一個字符,并寫入目的文件中*/while(ch=fgetc(fp1)!=EOF) fputc(ch,fp2); fclose(fp1); /*關(guān)閉兩個文件*/fclose(fp2); /*該程序編譯后,要在dos命令行下輸入3個參數(shù)方能運行,第一個是該程序的名字copy,第二個是源文件名,第三個是目的文件名。整個程序的功能是實現(xiàn)文件復(fù)制*/12解析C程序設(shè)計第2章 簡單程序設(shè)計如何隨機讀寫文件的某一部分?前邊對文件的讀寫都是從頭開始,按順序
13、讀(寫)。如何只讀寫文件的某一部分呢?除有FILE *類型的指針fp指向文件的開始外,還有一個char *類型的文件定位指針curp,指向文件內(nèi)部下一個要讀(寫)的字符。我們可以通過改變curp的位置實現(xiàn)隨機讀寫。.fp文件定位指針curp13解析C程序設(shè)計第2章 簡單程序設(shè)計幾個相關(guān)函數(shù)void rewind(FILE *fp); 功能:讓fp中的文件定位指針指向文件開始位置int fseek(FILE *fp,long offset, int fromwhere);功能:把fp中的文件定位指針移動到相應(yīng)位置fromwhere:SEEK_SET或0-文件開始SEEK_CUR或1-當前位置SE
14、EK_END或2-文件末尾long ftell(FILE *fp); 功能:返回fp中文件定位指針所在的位置int feof(FILE *fp);功能:當文件位置指針指向fp末尾時,返回非0值,否則返回0例:while(feof(fp)=0) c=fgetc(fp);14解析C程序設(shè)計第2章 簡單程序設(shè)計#includestruct stu char name10; int num; int age; char addr15;boy,*qq=&boy;void main() FILE *fp; if(fp=fopen(stu.txt,rt)=NULL) printf(Cannot open f
15、ile strike any key exit!); exit(1); rewind(fp); /*將文件定位指針移至文件開始位置*/ fseek(fp,18,1); /*如果每個學(xué)生在文件中占18個字節(jié),”略”過1個學(xué)生所占的18個字節(jié)*/ fscanf(fp,%s%d%d%s,qq-name,&qq-num,&qq-age,qq-addr); /*讀第2個學(xué)生信息至qq*/ printf(“nnnametnumber age addrn”); /*輸出第2個學(xué)生信息*/ printf(%st%5d %7d %sn,qq-name,qq-num,qq-age,qq-addr); fclose
16、(fp);例315解析C程序設(shè)計第2章 簡單程序設(shè)計例4:程序結(jié)構(gòu):float Fun1(float x)/*函數(shù)1定義*/float Fun2(float x) /*函數(shù)2定義*/float Integral(float (*f)(float), float a, float b) /*求積分函數(shù)定義*/void main() y1=Integral(Fun1,a,b); /*對函數(shù)1求積分*/ y2=Integral(Fun2,a,b); /*對函數(shù)2求積分*/ 實參是函數(shù)名,形參是指向函數(shù)的指針其實,函數(shù)名也就是函數(shù)在內(nèi)存中的首地址.指向函數(shù)的指針定義為:int (*p)();/*定義一
17、個變量p,是用來指向返回值為int的函數(shù)的*/指針的初始化為:p=max;/*f指向fun1*/函數(shù)調(diào)用時,可采用如下方式:max(a,b);P(a,b);(*p)(a,b);! (*max)(a,b)與p(a,b)不行16解析C程序設(shè)計第2章 簡單程序設(shè)計函數(shù)指針變量作函數(shù)參數(shù)/*函數(shù)功能:求函數(shù)f在a,b的積分*/float Integral(float (*f)(), float a, float b)float s,h,y;int n,i;s = (*f)(a)+(*f)(b)/2.0;n = 100;h = (b-a)/n;for (i=0;in;i+)y = a+i*h; s +=
18、 (*f)(y);return s*h;17解析C程序設(shè)計第2章 簡單程序設(shè)計小結(jié)文件的相關(guān)概念及相關(guān)庫函數(shù)的調(diào)用帶參數(shù)的main()指向函數(shù)的指針18解析C程序設(shè)計第2章 簡單程序設(shè)計重點循環(huán)“圣經(jīng)”:只要重復(fù)做一件事,就要用循環(huán)語句,此時考慮循環(huán)從哪兒開始,滿足什么條件繼續(xù)循環(huán),每次重復(fù)的是什么?函數(shù)“圣經(jīng)”:函數(shù)調(diào)用,其實就是任務(wù)交接,此時,應(yīng)指定任務(wù)交接給誰(函數(shù)名),要告知他哪些信息(實參)才能完成任務(wù)?而在調(diào)用之前,你必須有一個函數(shù)能夠完成你所移交的任務(wù),即要先有函數(shù)定義,定義時想象自己是完成任務(wù)的那個人,而完成這個任務(wù)需要知道什么信息(形參),完成以后是否有結(jié)果(返回值)。數(shù)據(jù):循環(huán)處理多個數(shù)據(jù)指針“圣經(jīng)”
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 帶目錄合同管理制全文
- 二手房獨家代理協(xié)議
- 二零二五房地產(chǎn)銷售公司的代理合同
- 中國民用航空貨物國內(nèi)運輸規(guī)則
- 風(fēng)險控制管理制度三篇
- 餐飲運營管理制度細則
- 高校自制設(shè)備管理制度
- 公司內(nèi)部報價管理制度
- 集體食堂衛(wèi)生管理制度
- 項目公司接待管理制度
- 治療室物品分類擺放
- 草籽采購(牧草種子采購)投標方案(技術(shù)方案)
- 2025屆湖北省“荊、荊、襄、宜”四地七??荚嚶?lián)盟高考仿真卷英語試卷含解析
- 金價走勢分析
- 2025新譯林版英語七年級下Unit 1 Home單詞表
- 電氣火災(zāi)監(jiān)控系統(tǒng)技術(shù)規(guī)格書
- 客服人員儀容儀表培訓(xùn)
- 房屋中介公司員工管理規(guī)章制度
- 餐飲服務(wù)電子教案 學(xué)習(xí)任務(wù)3 餐巾折花技能(4)-餐巾折花綜合實訓(xùn)
- 增補合同模板
- DB23T 3843-2024 自然災(zāi)害應(yīng)急避難場所標志設(shè)置管理規(guī)范
評論
0/150
提交評論