第11章文件及其應(yīng)用_第1頁(yè)
第11章文件及其應(yīng)用_第2頁(yè)
第11章文件及其應(yīng)用_第3頁(yè)
第11章文件及其應(yīng)用_第4頁(yè)
第11章文件及其應(yīng)用_第5頁(yè)
已閱讀5頁(yè),還剩52頁(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)介

第11章文件及其應(yīng)用鹽城第11章文件及其應(yīng)用11.1文件的引入11.2文件的打開(kāi)與關(guān)閉11.3文件的順序讀寫(xiě)11.4文件的隨機(jī)讀寫(xiě)11.5文件應(yīng)用舉例11.1文件的引入前面所學(xué)的程序中用到的輸入和輸出都只涉及到鍵盤(pán)和顯示器。在運(yùn)行C程序時(shí),通過(guò)鍵盤(pán)輸入數(shù)據(jù),并借助顯示器把程序的運(yùn)算結(jié)果顯示出來(lái),并不能保存相關(guān)數(shù)據(jù)。但是,計(jì)算機(jī)作為一種先進(jìn)的數(shù)據(jù)處理工具,它所面對(duì)的數(shù)據(jù)信息量十分龐大,僅依賴于鍵盤(pán)輸入和顯示輸出等方式是遠(yuǎn)遠(yuǎn)不夠的?!疽繉?duì)一個(gè)班級(jí)學(xué)生成績(jī)進(jìn)行處理,包括學(xué)生信息的多次輸入與修改、處理、輸出等。問(wèn)題分析:

本例要求多次對(duì)學(xué)生的信息輸入,如果每次都是從鍵盤(pán)輸入這些成批的數(shù)據(jù),一方面數(shù)據(jù)輸入的工作量大,另一方面很容易產(chǎn)生差錯(cuò)。因此,要解決這一類問(wèn)題,就必須采用數(shù)據(jù)文件的方法來(lái)處理。11.1.1問(wèn)題與引例11.1文件的引入1.文件的概念“文件”—是指一組相關(guān)數(shù)據(jù)的有序集合。這個(gè)數(shù)據(jù)集有一個(gè)名稱,叫做文件名。當(dāng)有大量數(shù)據(jù)輸入時(shí),通過(guò)編輯工具可以事先建立輸入數(shù)據(jù)文件,程序運(yùn)行時(shí)從指定的文件中讀取數(shù)據(jù),從而實(shí)現(xiàn)數(shù)據(jù)“一次輸入,多次使用”的效果。同樣,當(dāng)有大量數(shù)據(jù)輸出時(shí),也可將其輸出到指定文件,供隨時(shí)查看。11.1.2文件的基本概念2.文件的類型在程序設(shè)計(jì)中,主要用到兩種類型的文件:程序文件和數(shù)據(jù)文件。程序文件:包括源程序文件(后綴為.c)、目標(biāo)文件(后綴為.obj)、可執(zhí)行文件(后綴為.exe)等。這種文件的內(nèi)容是程序代碼。數(shù)據(jù)文件:文件的內(nèi)容不是程序,而是供程序運(yùn)行時(shí)讀寫(xiě)的數(shù)據(jù),如在程序運(yùn)行過(guò)程中輸出到磁盤(pán)(或其他外部設(shè)備)的數(shù)據(jù),或在程序運(yùn)行過(guò)程中供讀入的數(shù)據(jù)。如一批學(xué)生的成績(jī)數(shù)據(jù),或貨物交易的數(shù)據(jù)等。11.1.2文件的基本概念2.文件的類型C語(yǔ)言程序把文件分為ASCII文件和二進(jìn)制文件。ASCII文件又稱文本文件,每一個(gè)字節(jié)存放一個(gè)字符的ASCII碼,便于對(duì)字符進(jìn)行逐個(gè)處理,但一般占用存儲(chǔ)空間較多;二進(jìn)制文件中的數(shù)據(jù)在內(nèi)存中是以二進(jìn)制形式存儲(chǔ)的,占用存儲(chǔ)空間較少。11.1.2文件的基本概念2.文件的類型字符一律以ASCII形式存儲(chǔ)數(shù)值型數(shù)據(jù)既可以用ASCII形式存儲(chǔ),也可以用二進(jìn)制形式存儲(chǔ)如有整數(shù)10000,如果用ASCII碼形式輸出到磁盤(pán),則在磁盤(pán)中占5個(gè)字節(jié)(每一個(gè)字符占一個(gè)字節(jié)),而用二進(jìn)制形式輸出,則在磁盤(pán)上只占4個(gè)字節(jié)(用VC++時(shí))11.1.2文件的基本概念0011100100111000001110000011100000111000(1)(0)(0)(0)(0)ASCII形式00000000000000000011011100011000二進(jìn)制形式(10000)數(shù)據(jù)的存儲(chǔ):以10000為例來(lái)說(shuō)明11.1.2文件的基本概念3.文件的讀寫(xiě)輸入輸出是數(shù)據(jù)傳送的過(guò)程,數(shù)據(jù)如流水一樣從一處流向另一處,因此常將輸入輸出形象地稱為流(stream),即數(shù)據(jù)流。流表示了信息從源到目的端的流動(dòng)。在程序中,當(dāng)調(diào)用輸入函數(shù)從文件中輸入數(shù)據(jù)賦給程序中的變量時(shí),這種操作稱為“輸入”或“讀”;當(dāng)調(diào)用輸出函數(shù)把程序中的變量的值輸出到文件中時(shí),這種操作稱為“輸出”或“寫(xiě)”。11.1.2文件的基本概念4.文件的存取方式文件輸入輸出方式也稱“存取方式”。C語(yǔ)言中,文件有兩種存取方式:順序存取和直接存?。ㄒ步须S機(jī)存?。?。順序存取文件的特點(diǎn)是:每當(dāng)“打開(kāi)”文件進(jìn)行讀或?qū)懖僮鲿r(shí),總是從文件的開(kāi)頭開(kāi)始,從頭到尾順序地讀/寫(xiě);直接(隨機(jī))存取文件的特點(diǎn)是:可以通過(guò)C語(yǔ)言的庫(kù)函數(shù)去指定開(kāi)始讀/寫(xiě)的字節(jié)號(hào),然后直接對(duì)此位置上的數(shù)據(jù)進(jìn)行讀/寫(xiě)操作。11.1.2文件的基本概念在C語(yǔ)言中用一個(gè)指針變量指向一個(gè)文件,這個(gè)指針?lè)Q為文件指針,通過(guò)文件指針就可對(duì)它所指的文件進(jìn)行各種操作。定義文件指針的一般形式:FILE*指針變量名;

如:FILE*fp;

表示fp是指向FILE結(jié)構(gòu)的指針變量,通過(guò)fp即可找到存放某個(gè)文件信息的結(jié)構(gòu)變量,然后按結(jié)構(gòu)變量提供的信息找到該文件,實(shí)施對(duì)該文件的操作。11.1.3文件指針聲明FILE結(jié)構(gòu)體類型的信息包含在頭文件“stdio.h”中一般設(shè)置一個(gè)指向FILE類型變量的指針變量,然后通過(guò)它來(lái)引用這些FILE類型變量11.1.3文件指針FILE

*fp1,*fp2,*fp3;文件f1的文件信息區(qū)fp1文件f2的文件信息區(qū)fp2文件f3的文件信息區(qū)fp311.1.3文件指針11.2.1文件的打開(kāi)對(duì)文件讀寫(xiě)之前應(yīng)該“打開(kāi)”該文件,在使用結(jié)束之后應(yīng)“關(guān)閉”該文件。所謂打開(kāi)文件,實(shí)際上是建立文件的各種有關(guān)信息,并使文件指針指向該文件,以便進(jìn)行其它操作。關(guān)閉文件則斷開(kāi)指針與文件之間的聯(lián)系,也就是禁止再對(duì)該文件進(jìn)行操作。11.2文件的打開(kāi)與關(guān)閉

C語(yǔ)言中文件操作都是由庫(kù)函數(shù)來(lái)完成的。下面介紹主要的文件操作函數(shù)。1.文件的打開(kāi)在編寫(xiě)程序時(shí),在打開(kāi)文件的同時(shí),一般都指定一個(gè)指針變量指向該文件,也就是建立起指針變量與文件之間的聯(lián)系,這樣就可以通過(guò)該指針變量對(duì)文件進(jìn)行讀寫(xiě)FILE*fp;11.2.1文件的打開(kāi)1.文件的打開(kāi)文件的打開(kāi)使用fopen函數(shù),其調(diào)用的一般形式:

文件指針名=fopen(文件名,使用文件方式);其中:“文件指針名”必須是被說(shuō)明為FILE類型的指針變量;“文件名”是被打開(kāi)文件的數(shù)據(jù)文件名,是字符串常量或字符串?dāng)?shù)組;“使用文件方式”是指文件的類型和操作要求。11.2.1文件的打開(kāi)1.文件的打開(kāi)通常將fopen函數(shù)的返回值賦給一個(gè)指向文件的指針變量。如:FILE*fp;fp=fopen(”a1”,”r”);其意義是在當(dāng)前文件夾下打開(kāi)文件a1,只允許進(jìn)行“讀”操作,并使fp指向該文件11.2.1文件的打開(kāi)1.文件的打開(kāi)在打開(kāi)一個(gè)文件時(shí),通知C編譯系統(tǒng)以下3個(gè)信息:①需要訪問(wèn)的文件的名字②使用文件的方式(“讀”還是“寫(xiě)”等)③讓哪一個(gè)指針變量指向被打開(kāi)的文件使用文件方式參見(jiàn)下表11.2.1文件的打開(kāi)文件使用方式

意義"r"只讀打開(kāi)一個(gè)文本文件,只允許讀數(shù)據(jù)"w"只寫(xiě)打開(kāi)或建立一個(gè)文本文件,只允許寫(xiě)數(shù)據(jù)"a"追加打開(kāi)一個(gè)文本文件,并在文件末尾寫(xiě)數(shù)據(jù)"rb"只讀打開(kāi)一個(gè)二進(jìn)制文件,只允許讀數(shù)據(jù)"wb"只寫(xiě)打開(kāi)或建立一個(gè)二進(jìn)制文件,只允許寫(xiě)數(shù)據(jù)"ab"追加打開(kāi)一個(gè)二進(jìn)制文件,并在文件末尾寫(xiě)數(shù)據(jù)"r+"讀寫(xiě)打開(kāi)一個(gè)文本文件,允許讀和寫(xiě)"w+"讀寫(xiě)打開(kāi)或建立一個(gè)文本文件,允許讀寫(xiě)"a+"讀寫(xiě)打開(kāi)一個(gè)文本文件,允許讀,或在文件末追加數(shù)據(jù)"rb+"讀寫(xiě)打開(kāi)一個(gè)二進(jìn)制文件,允許讀和寫(xiě)"wb+"讀寫(xiě)打開(kāi)或建立一個(gè)二進(jìn)制文件,允許讀和寫(xiě)"ab+"讀寫(xiě)打開(kāi)一個(gè)二進(jìn)制文件,允許讀,或在文件末追加數(shù)據(jù)2.文件使用方式的說(shuō)明(1)文件使用方式由r,w,a,b,+五個(gè)字符拼成,含義:r(read):讀w(write):寫(xiě)a(append):追加b(inary):二進(jìn)制文件+:讀和寫(xiě)(2)凡用“r”方式打開(kāi)一個(gè)文件時(shí),該文件必須已經(jīng)存在,且只能從該文件讀出。11.2.1文件的打開(kāi)2.文件使用方式的說(shuō)明(3)用"w"打開(kāi)的文件只能向該文件寫(xiě)入。若打開(kāi)的文件不存在,則以指定的文件名建立該文件,若打開(kāi)的文件已經(jīng)存在,則將該文件刪去,重建一個(gè)新文件。(4)若要向一個(gè)已存在的文件追加新的信息,只能用"a"方式打開(kāi)文件。但此時(shí)該文件必須是存在的,否則將會(huì)出錯(cuò)。(5)在打開(kāi)一個(gè)文件時(shí),如果出錯(cuò),fopen將返回一個(gè)空指針值NULL。11.2.1文件的打開(kāi)文件使用后,應(yīng)及時(shí)將文件關(guān)閉,以避免文件的數(shù)據(jù)丟失等錯(cuò)誤。關(guān)閉文件用fclose函數(shù)。fclose函數(shù)調(diào)用的一般形式為:fclose(文件指針);

例如:fclose(fp);正常完成關(guān)閉文件操作時(shí),fclose函數(shù)返回值為0。如果返回非零值,則表示有錯(cuò)誤發(fā)生11.2.2文件的關(guān)閉11.3文件的順序讀寫(xiě)對(duì)文件的讀和寫(xiě)是最常用的文件操作。文件的順序讀(或?qū)?操作總是從文件的開(kāi)頭開(kāi)始,從頭到尾順序地讀(或?qū)?。在C語(yǔ)言中提供了多種用于文件讀寫(xiě)的函數(shù):字符讀寫(xiě)函數(shù)(fgetc和fputc)、字符串讀寫(xiě)函數(shù)(fgets和fputs)、數(shù)據(jù)塊讀寫(xiě)函數(shù)(fread和fwrite)、格式化讀寫(xiě)函數(shù)(fscanf和fprinf)。注意:使用以上函數(shù)都要求包含頭文件stdio.h。函數(shù)名調(diào)用形式功能返回值fgetcch=fgetc(fp)從fp指向的文件讀入一個(gè)字符讀成功,帶回所讀的字符,失敗則返回文件結(jié)束標(biāo)志EOF(即-1)fputcfputc(ch,fp)把字符ch寫(xiě)到文件指針變量fp所指向的文件中寫(xiě)成功,返回值就是輸出的字符;輸出失敗,則返回EOF(即-1)讀寫(xiě)字符函數(shù)——fgetc(),fputc()11.3.1字符讀寫(xiě)字符讀寫(xiě)函數(shù)是以字符(字節(jié))為單位的讀寫(xiě)函數(shù)。每次可從文件讀出或向文件寫(xiě)入一個(gè)字符。包含fgetc(),fputc()兩個(gè)函數(shù)。1.讀字符函數(shù)fgetcfgetc函數(shù)的功能是從指定的文件中讀一個(gè)字符。

函數(shù)調(diào)用的形式為:字符變量=fgetc(文件指針);例如:ch=fgetc(fp);//從打開(kāi)的文件fp中讀取一個(gè)字符并送入ch中。11.3.1字符讀寫(xiě)幾點(diǎn)說(shuō)明:(1)在fgetc函數(shù)調(diào)用中,讀取的文件必須是以讀或讀寫(xiě)方式打開(kāi)的。(2)讀取字符的結(jié)果也可以不向字符變量賦值。例如:fgetc(fp);但是讀出的字符不能保存。(3)在文件內(nèi)部有一個(gè)位置指針,用來(lái)指向文件的當(dāng)前讀寫(xiě)字節(jié),在文件打開(kāi)時(shí),該指針總是指向文件的第一個(gè)字節(jié)。(4)feof()函數(shù)可以檢查文件讀寫(xiě)位置標(biāo)記是否已經(jīng)到文件尾,如果到文件尾,函數(shù)返回值為1,否則為011.3.1字符讀寫(xiě)【例11.1】讀入文件c1.txt,在屏幕上輸出。#include<stdio.h>voidmain(){FILE*fp;charch;if((fp=fopen("d:\\ccxsj\\example\\c1.txt","r"))==NULL){printf("\nCannotopenanykeyexit!");getch();exit(1);}ch=fgetc(fp);while(ch!=EOF){putchar(ch);ch=fgetc(fp);}fclose(fp);}2.寫(xiě)字符函數(shù)fputcfputc函數(shù)的功能是把一個(gè)字符寫(xiě)入指定的文件中,函數(shù)調(diào)用的形式為:fputc(字符,文件指針);其中,待寫(xiě)入的字符量可以是字符常量或變量,例如:fputc('a',fp);其意義是把字符'a'寫(xiě)入fp所指向的文件中。11.3.1字符讀寫(xiě)幾點(diǎn)說(shuō)明:(1)被寫(xiě)入的文件可以用寫(xiě)、讀寫(xiě)、追加方式打開(kāi),用寫(xiě)或讀寫(xiě)方式打開(kāi)一個(gè)已存在的文件時(shí)將清除原有的文件內(nèi)容,寫(xiě)入字符從文件首開(kāi)始。如需保留原有文件內(nèi)容,希望寫(xiě)入的字符以文件末開(kāi)始存放,必須以追加方式打開(kāi)文件。文件若不存在,創(chuàng)建該文件。(2)每寫(xiě)入一個(gè)字符,文件內(nèi)部位置指針向后移動(dòng)一個(gè)字節(jié)。(3)fputc函數(shù)有一個(gè)返回值,如果寫(xiě)入成功則返回寫(xiě)入的字符,否則返回一個(gè)EOF。11.3.1字符讀寫(xiě)【例11.2】從鍵盤(pán)輸入一行字符,寫(xiě)入一個(gè)文件,再把該文件內(nèi)容讀出顯示在屏幕上。#include<stdio.h>voidmain(){FILE*fp;charch;if((fp=fopen("d:\\ccxsj\\example\\string","w+"))==NULL){printf(“不能打開(kāi),按任意鍵退出!");getch();exit(1);}printf("inputastring:\n");ch=getchar();while(ch!='\n'){fputc(ch,fp);ch=getchar();}rewind(fp);ch=fgetc(fp);while(ch!=EOF){putchar(ch);ch=fgetc(fp);}printf("\n");

fclose(fp);}

【例11.3】

將一個(gè)磁盤(pán)文件中的信息復(fù)制到另一個(gè)磁盤(pán)文件中。要求將已經(jīng)建立的文件中的內(nèi)容復(fù)制到另一個(gè)磁盤(pán)文件中。解題思路:處理此問(wèn)題的算法是:從文件中逐個(gè)讀入字符,然后逐個(gè)輸出到中。#include<stdio.h>#include<stdlib.h>voidmain(){FILE*in,*out;charch,in],out];printf("輸入讀入文件的名字:");scanf("%s",infile);printf("輸入輸出文件的名字:");scanf("%s",outfile);if((in=fopen(infile,"r"))==NULL){printf("無(wú)法打開(kāi)此文件\n");exit(0);}if((out=fopen(outfile,"w"))==NULL){printf("無(wú)法打開(kāi)此文件\n");exit(0);}改為rb和wb,則復(fù)制一個(gè)二進(jìn)制文件改為rb和wb,則復(fù)制一個(gè)二進(jìn)制文件while(!feof(in)){ch=fgetc(in);

fputc(ch,out);putchar(ch);}putchar(11);fclose(in);fclose(out);}檢查當(dāng)前讀寫(xiě)位置是否移到文件末尾讀寫(xiě)字符串函數(shù)--fgets(),fputs()函數(shù)名調(diào)用形式功能返回值fgetsfgets(str,n,fp)從fp指向的文件讀入長(zhǎng)度為(n-1)的字符串,存放到字符數(shù)組str中讀成功,返回地址str,失敗則返回NULL)fputsfputs(str,fp)str所指向的字符串寫(xiě)到文件指針變量fp所指向的文件中寫(xiě)成功,返回0;否則返回非0值11.3.2字符串讀寫(xiě)1.讀字符串函數(shù)fgets函數(shù)的功能是從指定的文件中讀一個(gè)字符串到字符數(shù)組中,函數(shù)調(diào)用的形式為:fgets(字符數(shù)組名,n,文件指針);其中:n是一個(gè)正整數(shù),表示從文件中讀出的字符串不超過(guò)n-1個(gè)字符。在讀入的最后一個(gè)字符后加上串結(jié)束標(biāo)志'\0'。例如:fgets(str,n,fp);其意義是從fp所指的文件中讀出n-1個(gè)字符送入字符數(shù)組str中。11.3.2字符串讀寫(xiě)#include<stdio.h>voidmain(){FILE*fp;charstr[11];if((fp=fopen("d:\string.txt","r"))==NULL){……//若文件不存在,輸出提示信息,返回}

fgets(str,11,fp);

//從文件fp中讀10個(gè)字符printf("\n%s\n",str);fclose(fp);}【例11.4】從文件中讀入一個(gè)含10個(gè)字符的字符串。2.寫(xiě)字符串函數(shù)fputsfputs函數(shù)的功能是向指定的文件寫(xiě)入一個(gè)字符串,其調(diào)用形式:

fputs(字符串,文件指針);其中:字符串可以是字符串常量,也可以是字符數(shù)組名,或指針變量。

例如:fputs("abcd",fp);其意義是把字符串"abcd"寫(xiě)入fp所指的文件之中。11.3.2字符串讀寫(xiě)分析下列部分代碼的功能:scanf("%s",st);fputs(st,fp);rewind(fp);ch=fgetc(fp);while(ch!=EOF){putchar(ch);ch=fgetc(fp);}//從鍵盤(pán)讀取一個(gè)字符串給st//將字符串st里的內(nèi)容寫(xiě)到文件中//將文件內(nèi)部位置指針移動(dòng)文件首部//從文件中一次讀取一個(gè)字符//從文件中一次讀取一個(gè)字符//若不在文件尾【例11.5】在例11.2中建立的文件string中追加一個(gè)字符串。#include<stdio.h>voidmain(){FILE*fp;charch,st[20];if((fp=fopen("string","a+"))==NULL){printf("Cannotopenanykeyexit!");getch();exit(1);}printf("inputastring:\n");scanf("%s",st);fputs(st,fp);rewind(fp);ch=fgetc(fp);while(ch!=EOF){putchar(ch);ch=fgetc(fp);}printf("\n");fclose(fp);}數(shù)據(jù)塊讀寫(xiě)函數(shù)—fread(),fwrite()

數(shù)據(jù)塊讀寫(xiě)函數(shù)可用來(lái)讀寫(xiě)一組數(shù)據(jù),如一個(gè)數(shù)組元素,一個(gè)結(jié)構(gòu)變量的值等。

讀數(shù)據(jù)塊函數(shù)調(diào)用的一般形式為:fread(buffer,size,count,fp);

寫(xiě)數(shù)據(jù)塊函數(shù)調(diào)用的一般形式為:fwrite(buffer,size,count,fp);其中:buffer是一個(gè)指針,在fread函數(shù)中,它表示存放輸入數(shù)據(jù)的首地址。在fwrite函數(shù)中,它表示存放輸出數(shù)據(jù)的首地址;size表示數(shù)據(jù)塊的字節(jié)數(shù);count表示要讀寫(xiě)的數(shù)據(jù)塊塊數(shù);fp表示文件指針。11.3.3數(shù)據(jù)塊讀寫(xiě)例如:fread(fa,4,5,fp);其意義是從fp所指的文件中,每次讀4個(gè)字節(jié)(一個(gè)實(shí)數(shù))送入實(shí)型數(shù)組fa中,連續(xù)讀5次,即讀5個(gè)實(shí)數(shù)到fa中。

11.3.3數(shù)據(jù)塊讀寫(xiě)【例11.6】從鍵盤(pán)輸入兩個(gè)學(xué)生的數(shù)據(jù),并寫(xiě)入一個(gè)文件中,再讀出這兩個(gè)學(xué)生的數(shù)據(jù)顯示在屏幕上。程序分析:定義一個(gè)結(jié)構(gòu)體類型student,并聲明兩個(gè)結(jié)構(gòu)數(shù)組boya和boyb以及兩個(gè)結(jié)構(gòu)指針變量pp和qq。pp指向boya,qq指向boyb。以讀寫(xiě)方式打開(kāi)二進(jìn)制文件“stu_list”,輸入2個(gè)學(xué)生的數(shù)據(jù)之后,寫(xiě)入該文件中,然后把文件內(nèi)部位置指針移到文件首,讀出兩塊學(xué)生數(shù)據(jù)后,在屏幕上顯示。11.3.3數(shù)據(jù)塊讀寫(xiě)#include<stdio.h>structstudent{charname[10];intnum;intage;charaddr[15];}boya[2],boyb[2],*pp,*qq;11.3.3數(shù)據(jù)塊讀寫(xiě)voidmain(){FILE*fp;

charch;inti;pp=boya;

qq=boyb;if((fp=fopen("d:\st1","wb+"))==NULL){printf("Cannotopenanykeyexit!");getch();exit(1);}printf("\ninputdata\n");for(i=0;i<2;i++,pp++)scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr);pp=boya;fwrite(pp,sizeof(structstu),2,fp);rewind(fp);fread(qq,sizeof(structstu),2,fp);printf("\n\nname\tnumberageaddr\n");for(i=0;i<2;i++,qq++)printf("%s\t%5d%7d%s\n",qq->name,qq->num,qq->age,qq->addr);fclose(fp);}11.3.3數(shù)據(jù)塊讀寫(xiě)fscanf()函數(shù)、fprintf()函數(shù)與前面使用的scanf()和printf()函數(shù)的功能相似,都是格式化讀寫(xiě)函數(shù)。

兩者的區(qū)別在于fscanf()函數(shù)和fprintf()函數(shù)的讀寫(xiě)對(duì)象不是鍵盤(pán)和顯示器,而是磁盤(pán)文件。

11.3.4格式化讀寫(xiě)一般調(diào)用方式為:fprintf(文件指針,格式字符串,輸出表列);

fscanf(文件指針,格式字符串,輸入表列);如:fprintf(fp,”%d,%6.2f”,i,f);fscanf(fp,”%d,%f”,&i,&f);

11.3.4格式化讀寫(xiě)pp=boya;for(i=0;i<2;i++,pp++)fprintf(fp,"%s%d%d%s\n",pp->name,pp->num,pp->age,pp->addr);rewind(fp);for(i=0;i<2;i++,qq++)fscanf(fp,"%s%d%d%s\n",qq->name,&qq->num,&qq->age,qq->addr);11.3.4格式化讀寫(xiě)11.4文件的隨機(jī)讀寫(xiě)對(duì)文件進(jìn)行順序讀寫(xiě)比較容易理解,也容易操作,但有時(shí)效率不高隨機(jī)訪問(wèn)不是按數(shù)據(jù)在文件中的物理位置次序進(jìn)行讀寫(xiě),而是可以對(duì)任何位置上的數(shù)據(jù)進(jìn)行訪問(wèn),顯然這種方法比順序訪問(wèn)效率高得多11.4.1位置指針復(fù)位

實(shí)現(xiàn)隨機(jī)讀寫(xiě)的關(guān)鍵是要按要求移動(dòng)位置指針,這稱為文件的定位。

移動(dòng)文件內(nèi)部位置指針的函數(shù)主要有兩個(gè),即rewind函數(shù)和fseek函數(shù)。

其調(diào)用形式為:rewind(文件指針);它的功能是把文

溫馨提示

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