




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、main()int i,j,t,x10=2,19,8,-10,7,0,89,3,13,50;for(i=0;i9;i+) for(j=i+1;jxj) t=xi,xi=xj,xj=t;for(i=0;i10;i+) printf(%d,xi);getch();首先,看一個熟悉的交換法排序例子:#include main()int i,j,t,x10=2,19,8,-10,7,0,89,3,13,50;FILE *fp;fp=fopen(demo.txt,w);for(i=0;i9;i+) for(j=i+1;jxj) t=xi,xi=xj,xj=t;for(i=0;i10;i+) fprint
2、f(fp,%d,xi);fclose(fp);#include main() int i,j,m,x10; FILE *fp; fp=fopen(demo.txt,r); for(i=0;i10;i+)fscanf(fp,%d,&xi); fclose(fp); m=x0; for(i=0;i10;i+) m=min(m,xi); printf(minimum=%d ,m); getch(); int min(int x,int y) return (xy?x:y);文件可以存放程序或數(shù)據(jù);文件是由文件名來識別的,只要指明文件名就可以讀出或?qū)懭霐?shù)據(jù);根據(jù)數(shù)據(jù)的組織形式,可以分為兩種類型
3、:文本文件(也稱ASCII文件):二進(jìn)制文件兩者的區(qū)別在于存儲數(shù)值型數(shù)據(jù)的方式不同。C語言把文件看作是一個字符(字節(jié))的序列,即由一個一個字符(字節(jié))的數(shù)據(jù)順序組成,也就是所謂的流式文件。內(nèi) 存程序數(shù)據(jù)區(qū)程序數(shù)據(jù)區(qū)輸入文件緩沖區(qū)輸入文件緩沖區(qū)輸出文件緩沖區(qū)輸出文件緩沖區(qū)磁盤磁盤文件文件緩沖文件系統(tǒng)示意圖緩沖文件系統(tǒng)示意圖nA file is data stored in secondary storage. This is usual a hard disk connected to the computer bus by means of some interface. nAccessing
4、 data in files is much slower than from memory, but files are more permanent and can be larger.在C語言中,對文件的操作一般分為:打開文件:利用一個文件指針使外部文件與程序之間建立數(shù)據(jù)交換的可能;使用文件:使用該文件(讀或?qū)?;關(guān)閉文件:切斷外部文件與程序之間的聯(lián)系,并保證文件的完整性。在C語言的程序中是通過一個文件類型指針來使用外部文件。該結(jié)構(gòu)體類型是系統(tǒng)定義的,包含在stdio.h中,取名為FILE。對于每個要操作的文件,用戶需先在程序中定義一個指向FILE類型的指針變量,如:FILE *fp;T
5、his pointer, called the file pointer, points to a structure that contains information about the file, such as the location of a buffer, the current character position in the buffer, whether the file is being read or written, and whether errors or end of file have occurred. Users dont need to know th
6、e details, because the definitions obtained from include a structure declaration called FILE. typedef structshortlevel;/ fill/empty level of buffer unsigned flags;/ file status flags charfd;/ file descriptor unsigned char hold;/ ungetc char if no buffer shortbsize;/ buffer size unsigned char buffer;
7、/ data transfer buffer unsigned char curp;/ current active pointer unsignedistemp;/ temporary file indicator shorttoken;/ used for validity checking FILE; / this is the FILE object文件的打開函數(shù):fopen( )fopen()函數(shù)為編譯系統(tǒng)提供以下信息:需要打開的文件名(filename)使用文件的方式(mode,讀還是寫等)讓哪個指針變量(fp)指向被打開的文件fopen()函數(shù)的原型為:FILE *fopen(c
8、har *filename, char *mode)filename指定要打開的文件名,可以為字符串常量或字符串變量mode表示文件的打開方式r :只讀w:只寫a:追加b:針對二進(jìn)制文件+:可讀可寫mode處理方式處理方式指定文件不存在指定文件不存在指定文件存在指定文件存在含含 義義r只讀只讀出錯出錯正常打開正常打開以讀方式打開一個文本文件以讀方式打開一個文本文件w只寫只寫建立新文件建立新文件文件原有內(nèi)容丟失文件原有內(nèi)容丟失以寫方式打開一個文本文件以寫方式打開一個文本文件a追加追加建立新文件建立新文件在文件原內(nèi)容后追加在文件原內(nèi)容后追加以追加方式打開一個文本文件以追加方式打開一個文本文件rb只
9、讀只讀出錯出錯正常打開正常打開以讀方式打開一個二進(jìn)制文件以讀方式打開一個二進(jìn)制文件wb只寫只寫建立新文件建立新文件文件原有內(nèi)容丟失文件原有內(nèi)容丟失以寫方式打開一個二進(jìn)制文件以寫方式打開一個二進(jìn)制文件ab追加追加建立新文件建立新文件在文件原內(nèi)容后追加在文件原內(nèi)容后追加以追加方式打開一個二進(jìn)制文件以追加方式打開一個二進(jìn)制文件r+讀寫讀寫出錯出錯正常打開正常打開以讀以讀/寫方式打開一個文本文件寫方式打開一個文本文件w+讀寫讀寫建立新文件建立新文件文件原有內(nèi)容丟失文件原有內(nèi)容丟失以寫以寫/讀方式打開一個文本文件讀方式打開一個文本文件a+讀寫讀寫建立新文件建立新文件在文件原內(nèi)容后追加在文件原內(nèi)容后追加以
10、讀以讀/寫方式打開一個文本文件寫方式打開一個文本文件rb+讀寫讀寫出錯出錯正常打開正常打開以讀以讀/寫方式打開一個二進(jìn)制文件寫方式打開一個二進(jìn)制文件wb+讀寫讀寫建立新文件建立新文件文件原有內(nèi)容丟失文件原有內(nèi)容丟失以寫以寫/讀方式打開一個二進(jìn)制文件讀方式打開一個二進(jìn)制文件Ab+讀寫讀寫建立新文件建立新文件在文件原內(nèi)容后追加在文件原內(nèi)容后追加以讀以讀/寫方式打開一個二進(jìn)制文件寫方式打開一個二進(jìn)制文件功能:成功,返回一個指向指定文件的指針。若打開文件不成功,返回空指針NULL。一般為增強(qiáng)程序的可靠性,常用下面的方法打開一個文件: if(fp=fopen(data.txt,r)=NULL) prin
11、tf(can not open this filen); exit(0); 函數(shù)原型:stdio.h 。注:對文件操作的庫函數(shù),函數(shù)原型均在頭文件stdio.h中。后續(xù)函數(shù)不再贅述。stdin:標(biāo)準(zhǔn)輸入文件(只讀),指向終端輸入設(shè)備(鍵盤)。stdout:標(biāo)準(zhǔn)輸出文件(只寫),指向終端輸出設(shè)備(顯示器)。stderr:標(biāo)準(zhǔn)錯誤輸出文件(讀/寫),指向終端輸出設(shè)備(顯示器)。使用完一個文件后應(yīng)該將它關(guān)閉,使文件指針變量不再指向該文件(此后不能再通過該指針對文件進(jìn)行讀/寫操作)fclose()函數(shù)的原型為:int fclose(EILE *fp);功能:執(zhí)行該函數(shù),若正常關(guān)閉,返回零;否則返回非零
12、。當(dāng)程序運(yùn)行正常結(jié)束時(shí),系統(tǒng)自動關(guān)閉所有的標(biāo)準(zhǔn)文件。文件被打開后可以對文件進(jìn)行操作,文件的讀寫操作是最常用的文件操作。C語言中文件的讀寫沒有特定的輸入輸出,它是通過函數(shù)來實(shí)現(xiàn)的。 文件讀與寫的操作: 1. 讀寫文件中的一個字符2. 讀寫一個字符串3. 讀寫一個數(shù)據(jù)塊4. 對文件進(jìn)行格式化讀寫fputc()函數(shù)和 fgetc() 函數(shù)fputc()函數(shù)原型為:int fputc(char ch, FILE *fp)說明:將ch中的字符輸出到fp所指向的文件中;輸出成功則返回所輸出的字符,失敗則返回EOFfgetc()函數(shù)原型為:int fgetc(FILE *fp)說明:從fp所指向的文件中讀入
13、一個字符;成功則返回所讀的字符,如發(fā)生錯誤或讀到文件結(jié)束符失敗則返回EOF#includemain() int ch; FILE *outf, *inf; outf=fopen(demo.txt,r); / 以讀方式打開原文本文件 inf=fopen(復(fù)件demo.txt,w); / 以寫方式打開新文本文件 ch=fgetc(outf); / 從原文件中讀出一字符 while(ch!=EOF) / 檢查是否到文件尾 fputc(ch,inf); / 將字符ch的值寫入到新文件中 ch=fgetc(outf); fclose(outf); / 關(guān)閉原文件fclose(inf); / 關(guān)閉新文件在
14、對文本文件執(zhí)行讀入操作時(shí),如果遇到文件尾,則讀操作函數(shù)返回一個文件結(jié)束標(biāo)志EOF(其值在頭文件stdio.h中被定義為-1)。庫函數(shù)feof() (判斷是否到文件尾的函數(shù))原型:int feof(FILE *fp);說明:在執(zhí)行讀文件操作時(shí),如果遇到文件尾,則函數(shù)返回邏輯真(1);否則,則返回邏輯假(0)。feof()函數(shù)同時(shí)適用于文本文件和二進(jìn)制文件。fgets()函數(shù)和fputs()函數(shù)fgets()函數(shù)的原型char *fgets(char *str,int n,FILE *fp);說明:從指定文件中讀入一個規(guī)定長度(n-1)字符串,存入str中,并在尾端自動加一個結(jié)束標(biāo)志0;同時(shí)將讀寫
15、位置指針向前移動字符串長度個字節(jié)。 在讀出n-1個字符之前,如遇到了換行符或EOF,則讀出結(jié)束。fgets函數(shù)返回值是字符數(shù)組的首地址(指針值)。fputs()函數(shù)的原型int fputs(const char *str,FILE *fp);說明將str中的字符串寫入fp所指文件中;寫入錯誤,則返回EOF。 #include#include#define N 80 main() char stringN;FILE *outf;outf=fopen(c:demo.txt,r ); /如果要指定路徑名,要用雙斜杠 while(!feof(outf) / 檢查是否到文件尾 fgets(string,
16、N,outf); /從原文件中讀出N-1個字符作為一個串放入string中 fputs(string, stdout); /將string中的內(nèi)容送至標(biāo)準(zhǔn)輸出文件流,即在顯示器上顯示出來 fclose(outf);getch();fread () 函數(shù)和 fwrite() 函數(shù)fread() 的函數(shù)原型unsigned fread(void *buffer, unsigned size, unsigned count, FILE *fp);說明:從fp所指向的文件中將讀出每項(xiàng)長度為size的count個數(shù)據(jù)項(xiàng),存放到buffer所指向的內(nèi)存單元開始的存儲區(qū)中fwrite()的函數(shù)原型:unsi
17、gned fwrite(const void *buffer, unsigned size, unsigned count, FILE *fp);說明:將buffer所指向的內(nèi)存單元開始的內(nèi)存區(qū)中的長度為size的count個數(shù)據(jù)項(xiàng)寫入fp所指向的文件中如果文件以二進(jìn)制形式打開,用fread()和fwrite()可以讀寫任何類型的信息。若有 float x10;fread(x,4,10,fp); fread(x,sizeof(float),10,fp);fwrite(x,sizeof(float),10,fp);fread(x,4*10,fp); fread(x,sizeof(float)*1
18、0,1,fp);fwrite(x,sizeof(float)*10,1,fp);struct student char name20; float grade;stu30;for (i=0; i30; i+) fwrite(&stui, sizeof(struct student), 1, fp);for (i=0; i30; i+) fread(&stui, sizeof(struct student), 1, fp);fwrite(stu, sizeof(struct student), 30, fp);fread(stu, sizeof(struct student),
19、30, fp);fscanf()函數(shù)和fprintf()函數(shù)格式化讀取函數(shù)fscanf() 的原型int fscanf(FILE *fp, char *format, )說明:從fp所指文件中,按format格式讀出系列數(shù)據(jù)存放到 給出的地址系列中。格式化寫入函數(shù)fprintf()的原型int fprintf(FILE *fp, char *format, )說明:將中給出的數(shù)據(jù)系列按format格式寫入到fp所指文件中。讀寫位置指針:文件中有一個讀寫位置指針,指向當(dāng)前的讀寫位置。 每次讀寫1個(或1組)數(shù)據(jù)后,系統(tǒng)自動將位置指針移動到下一個讀寫位置上。 如果想改變系統(tǒng)這種讀寫規(guī)律,可使用有關(guān)
20、文件定位的函數(shù)。所謂隨機(jī)讀寫,是指讀完上一個字符后,并不一定要讀寫其后繼的字符,而可以讀寫文件中任意所需的字符。原型:void rewind(FILE *fp);說明:將文件位置指針復(fù)位到文件的首部。即,將fp所指文件的文件位置指針移動到文件起始位置,函數(shù)無返回值。原型int fseek(FILE *fp,long offset, int whence);說明:將fp的文件位置指針從whence開始,移動offset個字節(jié),指向下一個要讀取的數(shù)據(jù)的位置。offset:正數(shù)則往文件尾移,負(fù)數(shù)則往文件頭移whence: SEEK_SET 或0表示文件的起始位置 SEEK_CUR或1表示文件的當(dāng)前位
21、置 SEEK_END或2表示文件的終止位置原型:long ftell(FILE*fp);說明:返回文件位置指針的當(dāng)前位置(用相對于文件頭的位移量表示)。若出錯返回-1。8.5.1 文件檢測函數(shù) 1. feof()函數(shù)int feof(FILE *fp);說明:判斷文件是否處于文件結(jié)束位置,如文件結(jié)束,則返回值為1,否則為0。當(dāng)在對文件進(jìn)行讀操作時(shí),為了避免讀完文件中數(shù)據(jù)時(shí),繼續(xù)對文件進(jìn)行讀取操作,可以通過來檢測文件是否結(jié)束。在調(diào)用輸入輸出庫函數(shù)時(shí),如果出錯,除了函數(shù)返回值有所反映外,也可利用ferror()函數(shù)來檢測。 原型: int ferror(FILE *fp); 說明: 如果函數(shù)返回值為0,表示未出錯;如果返回一個非0值,表示出錯。對同一文件,每次調(diào)用輸入輸出函數(shù)均產(chǎn)生一個新的ferror()函數(shù)值。因此在調(diào)用了輸入輸出函數(shù)后,應(yīng)立即檢測,否則出錯信息會丟失。在執(zhí)行fopen()函數(shù)時(shí),系統(tǒng)將ferr
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度電視劇導(dǎo)演聘用合同書(古裝戰(zhàn)爭)
- 2025年度個人出租車承包運(yùn)營管理及車輛更新合同
- 2025年吉林工業(yè)職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫及答案1套
- 健康管理融資居間合同
- 2025年度教育培訓(xùn)借款居間服務(wù)合同協(xié)議書
- 2025年度農(nóng)村別墅裝修與設(shè)施配套合同
- 2025年度房屋租賃權(quán)轉(zhuǎn)讓及租賃保證金合同協(xié)議書
- 歷史建筑保護(hù)扶梯改造合同
- 2025年度協(xié)議離婚孩子撫養(yǎng)權(quán)及父母子女法律咨詢服務(wù)合同
- 2025年度員工股份激勵與股權(quán)激勵評估協(xié)議
- LY/T 3400-2024荒漠與荒漠化防治術(shù)語
- 2024-2025學(xué)年第二學(xué)期英語教研組工作計(jì)劃
- 2025年往年教師職稱考試試題
- 幼兒園開學(xué)前的廚房人員培訓(xùn)
- 《幼兒教育政策與法規(guī)》教案-單元6 幼兒園的工作人員
- 虛擬制片技術(shù)在VRAR應(yīng)用中的角色建模與渲染-洞察分析
- GB/T 45167-2024熔模鑄鋼件、鎳合金鑄件和鈷合金鑄件表面質(zhì)量目視檢測方法
- 2023年東北公司加油站賬務(wù)人員考試題庫
- 2024年四川綿陽初中學(xué)業(yè)水平考試英語試卷真題(含答案詳解)
- 《鴉片戰(zhàn)爭改》課件
- 消防員證考試題庫2000題中級
評論
0/150
提交評論