




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、9 文件7/22/20221解析C程序設計第2章 簡單程序設計文件系統緩沖型文件系統:系統自動在內存中為每個文件開辟一個緩沖區,作為程序和磁盤文件數據交流的中間媒介.3、關閉文件(寫入磁盤)變量(內存)2、讀寫文件(磁盤)1、打開文件(寫入緩沖區)文件緩沖區(內存)三步中的每一步都是通過C語言的庫函數實現2解析C程序設計第2章 簡單程序設計與文件輸入輸出相關的庫函數#include 打開:fopen();讀寫:fgetc(); fputc();fgets(); fputs();fread(); fwrite();fscanf(); fprintf();文件定位指針rewind(); fseek
2、(); ftell();feof();關閉:fclose();法寶:每個庫函數在調用時可以查詢。TC:CTRL+F1VC 輸入函數名即可看到函數形參。3解析C程序設計第2章 簡單程序設計要解決的問題1:將學生信息存入文件,再從文件調入數組#include#define N 30struct stuchar name10;int num;int age;char addr15; ; 4解析C程序設計第2章 簡單程序設計1、輸入學生信息存入數組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; /*緩沖區滿或空的程度*/ unsigned flags; /*文件狀態標志*/ char fd; /*文件描述符*/ unsigned char hold; /*如無緩沖區不讀字符*/ short bsize; /*緩沖區的大小*/ unsigned char *buffer;/*數據緩沖區的位置*/ unsigned char *curp; /*文
4、件定位指針*/ unsigned istemp; /*臨時文件指示器*/ short token; /*用于有效性檢查*/ FILE;5解析C程序設計第2章 簡單程序設計2、存入文件(打開文件-存儲-關閉文件) /*先要打開文件*/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個字節)二進制文件中存儲格式:30000的補碼(2個字節),即 11101010 01100000二者各有特點:ASCII文件浪費空間和時間,直觀二進制文件節省空間和時間,不直觀6解析C程序設計第2章 簡單程序設計2、存入文件(打開文件-存儲-關閉文件)/*存入文件(輸出到文件)*/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)函數功能:按照format給出的控制符格式,將變元arg1,argn的值寫入到fp所指向的文件中去 。unsigned fwrite(void *ptr,unsigned size,unsigned numb,FILE *fp);函數功能:把從ptr開始的numb個size大小的數據塊寫入fp指向的文件,函
7、數調用成功返回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程序設計第2章 簡單程序設計2、存入文件(打開文件-存儲-關閉文件)/*最后關閉文件*/fclose(f
8、p);int fclose(FILE *fp);函數功能:關閉文件,此時,fp不再指向文件在內存的緩沖區。返回值:關閉成功時返回值為0。否則(如磁盤空間不足、寫保護或關閉已經關閉的文件)返回EOF,即-1。8解析C程序設計第2章 簡單程序設計3、從文件讀入到數組(打開文件-讀入到數組-關閉文件)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文件,即輸出到屏幕。其實,從鍵盤輸入、輸出到屏幕與報錯都是以文件的形式來存儲信息,這三個標準設備文件分別是stdin,stdout,stderr從用戶角度對文件分類,可分為兩類:標準設備文件和普通磁盤文件9解析C程序設計第2章 簡單程序設計要解決的問題2:復制文件輸入兩個文件名打開這兩個文件將一個文件的內容復制到另外一個文件中關閉這兩個文件10解析C程序設計第2章 簡單程序設計#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); /*關閉兩個文件*/fclose(fp2); 11解析C程序設計第2章 簡單程序設計/*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); /*關閉兩個文件*/fclose(fp2); /*該程序編譯后,要在dos命令行下輸入3個參數方能運行,第一個是該程序的名字copy,第二個是源文件名,第三個是目的文件名。整個程序的功能是實現文件復制*/12解析C程序設計第2章 簡單程序設計如何隨機讀寫文件的某一部分?前邊對文件的讀寫都是從頭開始,按順序
13、讀(寫)。如何只讀寫文件的某一部分呢?除有FILE *類型的指針fp指向文件的開始外,還有一個char *類型的文件定位指針curp,指向文件內部下一個要讀(寫)的字符。我們可以通過改變curp的位置實現隨機讀寫。.fp文件定位指針curp13解析C程序設計第2章 簡單程序設計幾個相關函數void rewind(FILE *fp); 功能:讓fp中的文件定位指針指向文件開始位置int fseek(FILE *fp,long offset, int fromwhere);功能:把fp中的文件定位指針移動到相應位置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程序設計第2章 簡單程序設計#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); /*如果每個學生在文件中占18個字節,”略”過1個學生所占的18個字節*/ fscanf(fp,%s%d%d%s,qq-name,&qq-num,&qq-age,qq-addr); /*讀第2個學生信息至qq*/ printf(“nnnametnumber age addrn”); /*輸出第2個學生信息*/ printf(%st%5d %7d %sn,qq-name,qq-num,qq-age,qq-addr); fclose
16、(fp);例315解析C程序設計第2章 簡單程序設計例4:程序結構:float Fun1(float x)/*函數1定義*/float Fun2(float x) /*函數2定義*/float Integral(float (*f)(float), float a, float b) /*求積分函數定義*/void main() y1=Integral(Fun1,a,b); /*對函數1求積分*/ y2=Integral(Fun2,a,b); /*對函數2求積分*/ 實參是函數名,形參是指向函數的指針其實,函數名也就是函數在內存中的首地址.指向函數的指針定義為:int (*p)();/*定義一
17、個變量p,是用來指向返回值為int的函數的*/指針的初始化為:p=max;/*f指向fun1*/函數調用時,可采用如下方式:max(a,b);P(a,b);(*p)(a,b);! (*max)(a,b)與p(a,b)不行16解析C程序設計第2章 簡單程序設計函數指針變量作函數參數/*函數功能:求函數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程序設計第2章 簡單程序設計小結文件的相關概念及相關庫函數的調用帶參數的main()指向函數的指針18解析C程序設計第2章 簡單程序設計重點循環“圣經”:只要重復做一件事,就要用循環語句,此時考慮循環從哪兒開始,滿足什么條件繼續循環,每次重復的是什么?函數“圣經”:函數調用,其實就是任務交接,此時,應指定任務交接給誰(函數名),要告知他哪些信息(實參)才能完成任務?而在調用之前,你必須有一個函數能夠完成你所移交的任務,即要先有函數定義,定義時想象自己是完成任務的那個人,而完成這個任務需要知道什么信息(形參),完成以后是否有結果(返回值)。數據:循環處理多個數據指針“圣經”
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年初中地理模擬考試卷地理國情認知地理信息工程案例分析試題
- 2025年小學語文畢業升學考試全真模擬卷(語文綜合素養測評)-閱讀理解能力提升策略篇
- 2025年專升本藝術概論考試模擬試題(藝術鑒賞提升與藝術素養)
- 2025農產品運輸合同
- 2025年小學語文畢業升學模擬試卷(口語表達與溝通技巧專項試題)
- 遼寧生態工程職業學院《國際貿易與實務》2023-2024學年第二學期期末試卷
- 武漢交通職業學院《局部解剖學》2023-2024學年第二學期期末試卷
- 上海工商職業技術學院《隧道施工技術B》2023-2024學年第一學期期末試卷
- 杭州萬向職業技術學院《社會統計學實驗》2023-2024學年第一學期期末試卷
- 湄洲灣職業技術學院《社區工作實務》2023-2024學年第二學期期末試卷
- 2024年武漢市第五醫院高層次衛技人才招聘筆試歷年參考題庫頻考點附帶答案
- 十個一護理服務心得體會
- 2025年民航華北空管局招聘筆試參考題庫含答案解析
- 裝配式建筑 構件生產與施工-預制墻板的套筒灌53課件講解
- 《高原地區 無人機預警系統基本要求》
- 《癱瘓的類型及病因》課件
- 碼頭修復工程施工組織設計1
- 【MOOC】生命的教育-浙江大學 中國大學慕課MOOC答案
- (2024年更新)國家慢性疾病編碼新目錄
- 醫院培訓課件:《醫患溝通技巧》
- 治療室物品分類擺放
評論
0/150
提交評論