




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1/40輸入輸入/輸出的概念及學(xué)習(xí)目標(biāo)輸出的概念及學(xué)習(xí)目標(biāo)3 1學(xué)會(huì)讀寫(xiě)數(shù)據(jù)文件學(xué)會(huì)讀寫(xiě)數(shù)據(jù)文件操作系統(tǒng)的標(biāo)準(zhǔn)輸入操作系統(tǒng)的標(biāo)準(zhǔn)輸入/輸出設(shè)備:鍵盤(pán)輸出設(shè)備:鍵盤(pán)/顯示器顯示器如果需要改變輸入如果需要改變輸入/輸出的流向,需要重定向輸出的流向,需要重定向另一個(gè)輸入另一個(gè)輸入/輸出的對(duì)象就是磁盤(pán)數(shù)據(jù)文件輸出的對(duì)象就是磁盤(pán)數(shù)據(jù)文件 使用數(shù)據(jù)文件來(lái)建立程序中的數(shù)據(jù)或保存數(shù)使用數(shù)據(jù)文件來(lái)建立程序中的數(shù)據(jù)或保存數(shù)據(jù)到文件中,是據(jù)到文件中,是C程序設(shè)計(jì)的習(xí)慣用法。程序設(shè)計(jì)的習(xí)慣用法。2/403文件的概念文件的概念2文件文件: :是指一組相關(guān)數(shù)據(jù)的有序集合。是指一組相關(guān)數(shù)據(jù)的有序集合。 這個(gè)數(shù)據(jù)集有一個(gè)名稱
2、,叫做這個(gè)數(shù)據(jù)集有一個(gè)名稱,叫做文件名文件名。操作系統(tǒng)是以文件為單位對(duì)數(shù)據(jù)進(jìn)行管操作系統(tǒng)是以文件為單位對(duì)數(shù)據(jù)進(jìn)行管理的。理的。 例如例如:C:24000101program.c,其中其中k:24000101叫叫路徑,路徑,program.c是文件名。當(dāng)需要使用文件是文件名。當(dāng)需要使用文件的時(shí)候,需要將文件調(diào)入內(nèi)存中。的時(shí)候,需要將文件調(diào)入內(nèi)存中。 3/403C語(yǔ)言中使用的數(shù)據(jù)文件的概念語(yǔ)言中使用的數(shù)據(jù)文件的概念2從文件編碼和數(shù)據(jù)的組織方式來(lái)看,數(shù)據(jù)從文件編碼和數(shù)據(jù)的組織方式來(lái)看,數(shù)據(jù)文件可分為文件可分為ASCII碼文件碼文件和和二進(jìn)制碼文件二進(jìn)制碼文件。 也叫文本文件也叫文本文件 文件文件程序
3、程序數(shù)據(jù)區(qū)數(shù)據(jù)區(qū)輸輸出出文件緩沖區(qū)文件緩沖區(qū)輸輸入入文件緩沖區(qū)文件緩沖區(qū)磁盤(pán)上內(nèi)存中操作系統(tǒng)在內(nèi)存中的緩沖區(qū)4/403文件的概念文件的概念2ASCII數(shù)據(jù)數(shù)據(jù)文件文件:文件在磁盤(pán)中存放時(shí)每個(gè)字符占一個(gè)字文件在磁盤(pán)中存放時(shí)每個(gè)字符占一個(gè)字節(jié),每個(gè)字節(jié)存放相應(yīng)字符的節(jié),每個(gè)字節(jié)存放相應(yīng)字符的ASCII碼值。碼值。二進(jìn)制數(shù)據(jù)文件二進(jìn)制數(shù)據(jù)文件:存儲(chǔ)介質(zhì)上保存的數(shù)據(jù)采用與內(nèi)存數(shù)據(jù)存儲(chǔ)介質(zhì)上保存的數(shù)據(jù)采用與內(nèi)存數(shù)據(jù)一致的表示形式存儲(chǔ)一致的表示形式存儲(chǔ)(為二進(jìn)制形式)。為二進(jìn)制形式)。 例例: 在文件中存放整數(shù)在文件中存放整數(shù)2147483647ASCII碼碼32H31H34H37H34H38H33H36
4、H34H37H二進(jìn)制FFHFFHFFH7FH語(yǔ)言把文件看作是一個(gè)字符(字節(jié))的序列,即由一個(gè)一個(gè)字符(字節(jié))的數(shù)據(jù)順序組成。一個(gè)輸入輸出流就是一個(gè)字節(jié)流或二進(jìn)制流。 5/40 文件的位置指針位置指針位置指針用來(lái)指示當(dāng)前的讀寫(xiě)位置。用來(lái)指示當(dāng)前的讀寫(xiě)位置。 一般情況下,在對(duì)字符文件進(jìn)行順序讀寫(xiě)時(shí),文件的位置指針指向一般情況下,在對(duì)字符文件進(jìn)行順序讀寫(xiě)時(shí),文件的位置指針指向文件開(kāi)頭,這時(shí)如果對(duì)文件進(jìn)行讀的操作,就讀第一個(gè)字符,然后文件開(kāi)頭,這時(shí)如果對(duì)文件進(jìn)行讀的操作,就讀第一個(gè)字符,然后文件的位置指針順序向后移一個(gè)位置,在下一次執(zhí)行讀的操作時(shí),文件的位置指針順序向后移一個(gè)位置,在下一次執(zhí)行讀的操作
5、時(shí),就將指針指向的第二個(gè)字符讀入。依此類推,直到遇文件尾就將指針指向的第二個(gè)字符讀入。依此類推,直到遇文件尾. . 文件頭 讀寫(xiě)當(dāng)前位置 文件尾有時(shí)希望在一個(gè)文件的原有數(shù)據(jù)之后再添加新的數(shù)據(jù),應(yīng)該把文件有時(shí)希望在一個(gè)文件的原有數(shù)據(jù)之后再添加新的數(shù)據(jù),應(yīng)該把文件位置指針移到文件尾,然后再接著寫(xiě)入新的數(shù)據(jù),這就是文件的位置指針移到文件尾,然后再接著寫(xiě)入新的數(shù)據(jù),這就是文件的追追加加。6/403文件的操作文件的操作3 文件的基本操作文件的基本操作 l定義文件指針定義文件指針 定義格式為:定義格式為:FILE * 文件文件指針變量;指針變量; 例如例如 FILE *fp; FILEFILEf5f5;
6、;l文件的打開(kāi)文件的打開(kāi) 文件指針文件指針 = fopen(文件名,操作模式)(文件名,操作模式)fp = fopen(c:file.dat, r);if (fp= NUUL) printf(“nCannot open the file”); return 1; 7/403文件的操作文件的操作3文件使用方式文件使用方式含含 義義r只讀只讀,文本文本以只讀方式打開(kāi)一個(gè)已有的文本文件。以只讀方式打開(kāi)一個(gè)已有的文本文件。w只寫(xiě)只寫(xiě),文本文本以只寫(xiě)方式建立一個(gè)新的文本文件。如果該文以只寫(xiě)方式建立一個(gè)新的文本文件。如果該文件已存在則將它刪去,然后重新建立一個(gè)新文件已存在則將它刪去,然后重新建立一個(gè)新文件
7、。件。a追加追加,文本文本以添加方式打開(kāi)一個(gè)文本文件,在文件末尾添以添加方式打開(kāi)一個(gè)文本文件,在文件末尾添加。如果該文件不存在,則建立一個(gè)新文件后加。如果該文件不存在,則建立一個(gè)新文件后再添加。再添加。rb只讀只讀,二進(jìn)制二進(jìn)制以只讀方式打開(kāi)一個(gè)已有的二進(jìn)制文件。以只讀方式打開(kāi)一個(gè)已有的二進(jìn)制文件。wb只寫(xiě)只寫(xiě),二進(jìn)制二進(jìn)制以只寫(xiě)方式打開(kāi)一個(gè)二進(jìn)制文件。以只寫(xiě)方式打開(kāi)一個(gè)二進(jìn)制文件。ab追加追加,二進(jìn)制二進(jìn)制以添加方式打開(kāi)一個(gè)二進(jìn)制文件。以添加方式打開(kāi)一個(gè)二進(jìn)制文件。8/403文件的操作文件的操作3打開(kāi)文件文件方式打開(kāi)文件文件方式文件使用方式文件使用方式含含 義義r+讀寫(xiě)讀寫(xiě),文本文本以讀寫(xiě)方
8、式打開(kāi)一個(gè)已有的文本文件。以讀寫(xiě)方式打開(kāi)一個(gè)已有的文本文件。w+讀寫(xiě)讀寫(xiě),文本文本以讀寫(xiě)方式建立一個(gè)新的文本文件。以讀寫(xiě)方式建立一個(gè)新的文本文件。a+讀寫(xiě)讀寫(xiě),文本文本以讀寫(xiě)方式打開(kāi)一個(gè)文本文件,在文件末尾添加以讀寫(xiě)方式打開(kāi)一個(gè)文本文件,在文件末尾添加和修改,如果文件不存在,則建立一個(gè)新文件后和修改,如果文件不存在,則建立一個(gè)新文件后再添加和修改。再添加和修改。rb+讀寫(xiě)讀寫(xiě),二進(jìn)制二進(jìn)制以讀寫(xiě)方式打開(kāi)一個(gè)已有的二進(jìn)制文件。以讀寫(xiě)方式打開(kāi)一個(gè)已有的二進(jìn)制文件。wb+ 讀寫(xiě)讀寫(xiě),二進(jìn)制二進(jìn)制以讀寫(xiě)方式建立一個(gè)新的二進(jìn)制文件。以讀寫(xiě)方式建立一個(gè)新的二進(jìn)制文件。ab+讀寫(xiě)讀寫(xiě),二進(jìn)制二進(jìn)制以讀寫(xiě)方式
9、打開(kāi)一個(gè)二進(jìn)制文件。以讀寫(xiě)方式打開(kāi)一個(gè)二進(jìn)制文件。9/403文件的操作文件的操作3 文件的關(guān)閉文件的關(guān)閉 fclose(文件指針);(文件指針); 例如:例如:fclose(fp); 文件的讀寫(xiě)操作文件的讀寫(xiě)操作l字符讀寫(xiě)函數(shù)字符讀寫(xiě)函數(shù) :fgetc( )和和fputc( )l字符串讀寫(xiě)函數(shù):字符串讀寫(xiě)函數(shù):fgets( )和和fputs( )l數(shù)據(jù)塊讀寫(xiě)函數(shù):數(shù)據(jù)塊讀寫(xiě)函數(shù):fread( )和和fwrite( )l格式化讀寫(xiě)函數(shù):格式化讀寫(xiě)函數(shù):fscanf( )和和fprinf( ) 返回值:關(guān)閉成功返回值為;否則返回EOF(-1) 10/403文件的操作文件的操作4 字符讀寫(xiě)操作字符讀
10、寫(xiě)操作 1、fgetc( )的調(diào)用格式:的調(diào)用格式: 字符型變量字符型變量= fgetc( 文件指針文件指針 ); 例如:例如:ch = fgetc(fp);l語(yǔ)句功能是:從語(yǔ)句功能是:從fp指向的文件中讀取一個(gè)字符并將這個(gè)字指向的文件中讀取一個(gè)字符并將這個(gè)字符賦給符賦給char型變量型變量ch 。遇結(jié)束,返回。遇結(jié)束,返回EOF。2、fputc( )的調(diào)用格式:的調(diào)用格式: fputc(字符,文件指針字符,文件指針); 例如:例如: fputc(ch, fp); l語(yǔ)句功能是:語(yǔ)句功能是:將字符型變量將字符型變量ch的內(nèi)容寫(xiě)入文件指針的內(nèi)容寫(xiě)入文件指針fp所指所指的文本文件中。寫(xiě)入成功,返回
11、字符本身,反之的文本文件中。寫(xiě)入成功,返回字符本身,反之EOF。11/40讀文件基本過(guò)程讀文件基本過(guò)程 #include stdio.hint main()int i,x;FILE * fp ;fp=fopen(array.txt,r);if(fp=NULL)printf(文件不存在文件不存在);exit(0);printf(從文件中讀取的數(shù)據(jù)從文件中讀取的數(shù)據(jù):n);for(i=1;i10;i+)fscanf(fp,%d,&x);if(i%5=0) printf(n);printf(%4d,x); fclose(fp);return 0;1、定義、定義FILE 指針指針2、打開(kāi)文件、
12、打開(kāi)文件3、確保文件有效、確保文件有效4、用函數(shù)讀文件、用函數(shù)讀文件5、關(guān)閉文件、關(guān)閉文件寫(xiě)文件基本過(guò)程寫(xiě)文件基本過(guò)程 #include stdio.hint main()int i,x;FILE * fp ;fp=fopen(array2.txt,“w);if(fp=NULL)printf(文件不存在文件不存在);exit(0);printf(從文件中讀取的數(shù)據(jù)從文件中讀取的數(shù)據(jù):n);for(i=1;i10;i+)scanf(%d,&x);fprintf(fp,%4d,x); fclose(fp);return 0;1、定義、定義FILE 指針指針2、打開(kāi)文件、打開(kāi)文件3、確保文件
13、有效、確保文件有效4、用函數(shù)往文件、用函數(shù)往文件寫(xiě)數(shù)據(jù)寫(xiě)數(shù)據(jù)5、關(guān)閉文件、關(guān)閉文件a和和w的區(qū)別的區(qū)別 #include stdio.hint main()int i,x;FILE * fp ;fp=fopen(array.txt,“a);if(fp=NULL)printf(文件不存在文件不存在);exit(0);printf(從文件中讀取的數(shù)據(jù)從文件中讀取的數(shù)據(jù):n);for(i=1;i10;i+)scanf(%d,&x);fprintf(fp,%4d,x); fclose(fp);return 0;打開(kāi)文件方式打開(kāi)文件方式二進(jìn)制文件和文本二進(jìn)制文件和文本文件文件 #include
14、stdio.hint main()int i,x;FILE * fp ;fp=fopen(array4.txt,wb);if(fp=NULL)printf(文件不存在文件不存在);exit(0);printf(將從鍵盤(pán)輸入數(shù)據(jù)寫(xiě)入文件將從鍵盤(pán)輸入數(shù)據(jù)寫(xiě)入文件:n);scanf(%d,&x);fwrite(&x,sizeof(x),1,fp);fclose(fp);return 0;#include stdio.hint main()int i,x;FILE * fp ;fp=fopen(array5.txt,w);if(fp=NULL)printf(文件不存在文件不存在);ex
15、it(0);printf(將從鍵盤(pán)輸入數(shù)據(jù)寫(xiě)入文件將從鍵盤(pán)輸入數(shù)據(jù)寫(xiě)入文件:n);scanf(%d,&x);fprintf(fp,%d,x);fclose(fp);return 0;二進(jìn)制文件和文本二進(jìn)制文件和文本文件文件 20_e.c3文件的操作文件的操作4例例1 1:讀取一個(gè)給定的文本文件,并將文件的:讀取一個(gè)給定的文本文件,并將文件的內(nèi)容顯示在屏幕上。內(nèi)容顯示在屏幕上。 問(wèn)題分析問(wèn)題分析l需要讀取文本文件,所以以需要讀取文本文件,所以以“r”操作模式將文件打開(kāi)。操作模式將文件打開(kāi)。 l文本文件的結(jié)束標(biāo)志為文本文件的結(jié)束標(biāo)志為EOFEOF(-1-1)。當(dāng)文件讀寫(xiě)指針指。當(dāng)文件讀寫(xiě)指
16、針指向向EOFEOF時(shí),表示文件已經(jīng)讀到了尾部。因此,在讀文件時(shí),表示文件已經(jīng)讀到了尾部。因此,在讀文件時(shí),需要設(shè)計(jì)一個(gè)時(shí),需要設(shè)計(jì)一個(gè)whilewhile循環(huán)語(yǔ)句,它的結(jié)束條件是讀循環(huán)語(yǔ)句,它的結(jié)束條件是讀取的字符等于取的字符等于EOFEOF。l需要讀取的文件名稱通過(guò)命令行參數(shù)帶入,這樣可以需要讀取的文件名稱通過(guò)命令行參數(shù)帶入,這樣可以擴(kuò)展程序的使用范圍,增加程序運(yùn)行的靈活性。擴(kuò)展程序的使用范圍,增加程序運(yùn)行的靈活性。17/40 算法描述 開(kāi)始開(kāi)始結(jié)束結(jié)束ch!=EOF非空行非空行NNargs!=2輸出提示信息輸出提示信息輸出輸出chYYYN打開(kāi)不成功打開(kāi)不成功輸出提示信息輸出提示信息fge
17、tc()chfclose()fgetc()ch18/40#include int main( ) FILE *fp; int ch; char name100; printf(“請(qǐng)輸入文件名請(qǐng)輸入文件名:n”) ; gets(name); fp=fopen(name,r); if(fp= NULL ) /* 打開(kāi)文件打開(kāi)文件 */ printf(Cannot open file !); return 1; ch = fgetc(fp); /* 以字符方式讀取文件以字符方式讀取文件 */ while (ch!=EOF) putchar(ch); ch = fgetc(fp); fclose(fp
18、); /* 關(guān)閉文件關(guān)閉文件 */ return 0;19/403文件的操作文件的操作4 字符串讀寫(xiě)操作字符串讀寫(xiě)操作 1、fgets( )的調(diào)用格式:的調(diào)用格式: fgets(字符數(shù)組名,字符數(shù)組名,n,文件指針,文件指針); 例如:例如:fgets(str, n, fp);l語(yǔ)句功能是:語(yǔ)句功能是:從從fp所指的文件中讀出所指的文件中讀出n-1個(gè)字符并存入字個(gè)字符并存入字符數(shù)組符數(shù)組str中。中。2、fputs ( )的調(diào)用格式:的調(diào)用格式: fputs(字符串,文件指針字符串,文件指針) ; 例如:例如: fputs(“C program”, fp);l語(yǔ)句功能是:語(yǔ)句功能是:將字符串將
19、字符串“C program”寫(xiě)入寫(xiě)入fp所指的文件所指的文件中。中。 20/403文件的操作文件的操作4例例2:編程從鍵盤(pán)輸入一個(gè)源文件的文件名編程從鍵盤(pán)輸入一個(gè)源文件的文件名和一個(gè)目的文件的文件名和一個(gè)目的文件的文件名,將源文件的內(nèi)將源文件的內(nèi)容拷貝到目的文件中。容拷貝到目的文件中。21/40#include int main() FILE *fp1,*fp2; char str20,srcName20,desName20; gets(srcName);gets(desName); if(fp1=fopen(srcName,r)=NULL) printf(file1 openned erro
20、r.n); exit(0); if(fp2=fopen(desName,w)=NULL) printf(file2 created error.n); exit(0); while(fgets(str,20,fp1)!= NULL) fputs(str,fp2); fclose(fp1); fclose(fp2); return 0;22/40#include #include int readFile( char lines 80);void writeFile(char lines 80, int n );main( ) int choice, num; char lines10080;
21、do /*顯示菜單顯示菜單*/ printf(n = MENU =n); printf(n read file.1); printf(n write file.2); printf(n exit.3); printf(n select:); scanf(“%d”,&choice); getchar(); /*用戶選擇用戶選擇*/ if (choice=1)num = readFile(lines); if (choice=2) writeFile(lines, num);while (choice!=3);例例3 3:P214P214例例6-136-1323/40int readFil
22、e(char lines 80) * 讀文件讀文件*/ int i; FILE *fp; char filename30; printf(“nEnter file name:”); /* 輸入要進(jìn)行寫(xiě)操作的文件名輸入要進(jìn)行寫(xiě)操作的文件名*/ gets(filename); if(fp=fopen(filename,“r”)=NULL) /* 打開(kāi)文件打開(kāi)文件*/ printf(Cannot open file!); return 0; for (i=0; !feof(fp); i+) /* 讀取并顯示文件讀取并顯示文件*/ fgets(&linesi0, 80, fp); puts(&
23、amp;linesi0); fclose(fp); return i;24/40void writeFile(char lines 80, int n) /* 寫(xiě)文件寫(xiě)文件 */ FILE *fp; char filename30; printf(“nEnter file name:”); /* 輸入要進(jìn)行寫(xiě)操作的文件名輸入要進(jìn)行寫(xiě)操作的文件名*/ gets(filename); if(fp=fopen(filename, “w”) = NULL) /* 打開(kāi)文件打開(kāi)文件*/ printf(Cannot open file!); return; while( n!=0 ) fputs(&
24、;lines-n0, fp); /*寫(xiě)出一行字符串寫(xiě)出一行字符串*/ fprintf(fp,n); fclose(fp); /* 關(guān)閉文件關(guān)閉文件 */25/403文件的操作文件的操作4 數(shù)據(jù)塊數(shù)據(jù)塊讀寫(xiě)操作讀寫(xiě)操作 1、 fread( )的調(diào)用格式:的調(diào)用格式: fread(buffer, size, count, fp); 例如:例如:fread(buffer, sizeof(int), 5, fp); ;l語(yǔ)句功能是:語(yǔ)句功能是:從從fp所指的文件中讀取所指的文件中讀取5塊數(shù)據(jù)并放在塊數(shù)據(jù)并放在buffer中,每塊數(shù)據(jù)的大小為中,每塊數(shù)據(jù)的大小為int類型占用的字節(jié)數(shù)量。類型占用的字節(jié)數(shù)
25、量。2、 fwrite ( )的調(diào)用格式:的調(diào)用格式: fwrite(buffer, size, count, fp); 例如:例如: fwrite(buffer, sizeof(float), 5, fp) ;l語(yǔ)句功能是:語(yǔ)句功能是:將將buffer中存放的數(shù)據(jù)寫(xiě)入中存放的數(shù)據(jù)寫(xiě)入fp所指的文件中,所指的文件中,共寫(xiě)入共寫(xiě)入5塊數(shù)據(jù),每塊數(shù)據(jù)的大小為塊數(shù)據(jù),每塊數(shù)據(jù)的大小為float類型占用的字節(jié)類型占用的字節(jié)數(shù)量。數(shù)量。 輸入輸出的內(nèi)容都為二進(jìn)制形式26/403文件的操作文件的操作4例例4 4:從鍵盤(pán)輸入學(xué)生基本信息,寫(xiě)入二進(jìn)制:從鍵盤(pán)輸入學(xué)生基本信息,寫(xiě)入二進(jìn)制文件;再?gòu)脑撐募凶x取學(xué)
26、生基本信息,并文件;再?gòu)脑撐募凶x取學(xué)生基本信息,并顯示輸出。顯示輸出。 問(wèn)題分析問(wèn)題分析l假設(shè)學(xué)生基本信息只包含學(xué)號(hào)、姓名、所屬院系和專業(yè)假設(shè)學(xué)生基本信息只包含學(xué)號(hào)、姓名、所屬院系和專業(yè)幾個(gè)數(shù)據(jù)項(xiàng),為此,需要定義一個(gè)結(jié)構(gòu)類型。輸入學(xué)生幾個(gè)數(shù)據(jù)項(xiàng),為此,需要定義一個(gè)結(jié)構(gòu)類型。輸入學(xué)生信息的時(shí)候,將所有數(shù)據(jù)項(xiàng)存放在一個(gè)結(jié)構(gòu)型變量中,信息的時(shí)候,將所有數(shù)據(jù)項(xiàng)存放在一個(gè)結(jié)構(gòu)型變量中,并以二進(jìn)制的形式寫(xiě)入文件;在讀取文件的時(shí)候,每次并以二進(jìn)制的形式寫(xiě)入文件;在讀取文件的時(shí)候,每次讀取一個(gè)結(jié)構(gòu)類型變量的字節(jié)數(shù)目,這樣可以很輕松地讀取一個(gè)結(jié)構(gòu)類型變量的字節(jié)數(shù)目,這樣可以很輕松地實(shí)現(xiàn)將結(jié)構(gòu)型數(shù)據(jù)存儲(chǔ)到磁盤(pán)文
27、件中的操作。實(shí)現(xiàn)將結(jié)構(gòu)型數(shù)據(jù)存儲(chǔ)到磁盤(pán)文件中的操作。 27/40#include #define NUM 30typedef struct info /* 表示學(xué)生基本信息的結(jié)構(gòu)類型表示學(xué)生基本信息的結(jié)構(gòu)類型 */ int No; /* 學(xué)號(hào)學(xué)號(hào) */ char name16; /* 姓名姓名 */ char department32; /* 所屬院系所屬院系 */ char major32; /* 所學(xué)專業(yè)所學(xué)專業(yè) */ INFO;28/40int main( ) INFO s; int i; FILE *fp; char filename32; printf(nEnter filename
28、:); /* 輸入文件名輸入文件名 */ gets(filename); if (fp=fopen(filename, wb) = NULL) /* 以二進(jìn)制寫(xiě)方式打開(kāi)文件以二進(jìn)制寫(xiě)方式打開(kāi)文件 */ printf(Cannot open %s file., filename); return 1; 29/40for (i=0; iNUM; i+) /* 通過(guò)鍵盤(pán)輸入學(xué)生信息并寫(xiě)入文件通過(guò)鍵盤(pán)輸入學(xué)生信息并寫(xiě)入文件 */ scanf(%d%s%s%s, &s.No, , s.department, s.major); fwrite(&s, sizeof(INFO),
29、 1, fp); fclose(fp); /* 關(guān)閉文件關(guān)閉文件 */ if (fp=fopen(filename, rb) = NULL) /* 以二進(jìn)制讀方式打開(kāi)文件以二進(jìn)制讀方式打開(kāi)文件 */ printf(nCannot open %s file., filename); return 1; while (fread(&s, sizeof(INFO), 1, fp) /* 從文件中讀信息并顯示輸出從文件中讀信息并顯示輸出 */ printf(n%4d%16s%20s%20s, s.No, , s.department, s.major); fclose(fp); /
30、* 關(guān)閉文件關(guān)閉文件 */ return 0;30/403文件的操作文件的操作4 格式化格式化讀寫(xiě)操作讀寫(xiě)操作 1、 fscanf( )的調(diào)用格式:的調(diào)用格式: fscanf(文件指針,格式字符串,輸入列表文件指針,格式字符串,輸入列表); 例如:例如: fscanf(fp, %d%f, &i, &j) ;l語(yǔ)句功能是:語(yǔ)句功能是:從從fp所指的文件中按照格式控制的描述讀取所指的文件中按照格式控制的描述讀取一個(gè)整型數(shù)值給一個(gè)整型數(shù)值給i,一個(gè)單精度數(shù)值給,一個(gè)單精度數(shù)值給j。2、 fprintf ( )的調(diào)用格式:的調(diào)用格式: fprintf(文件指針,格式字符串,輸出列表文件
31、指針,格式字符串,輸出列表); 例如:例如: fprintf(fp, %d%f, i, j);l語(yǔ)句功能是:語(yǔ)句功能是:將將i、j的內(nèi)容按照格式控制的描述寫(xiě)入的內(nèi)容按照格式控制的描述寫(xiě)入fp所所指的文件中。指的文件中。 輸入輸出的內(nèi)容都為ASCII碼值制形式注意:注意:用用fprintffprintf和和fscanffscanf函數(shù)對(duì)磁盤(pán)文件讀寫(xiě),使用方便,容易理解,函數(shù)對(duì)磁盤(pán)文件讀寫(xiě),使用方便,容易理解,但由于在輸入時(shí)要將但由于在輸入時(shí)要將ASCIIASCII碼轉(zhuǎn)換為二進(jìn)制形式,在輸出時(shí)又要碼轉(zhuǎn)換為二進(jìn)制形式,在輸出時(shí)又要將二進(jìn)制形式轉(zhuǎn)換成字符,花費(fèi)時(shí)間比較多。因此,在內(nèi)存與磁將二進(jìn)制形式轉(zhuǎn)
32、換成字符,花費(fèi)時(shí)間比較多。因此,在內(nèi)存與磁盤(pán)頻繁交換數(shù)據(jù)的情況下,最好不用盤(pán)頻繁交換數(shù)據(jù)的情況下,最好不用fprintffprintf和和fscanffscanf函數(shù),而函數(shù),而用用freadfread和和fwritefwrite函數(shù)。函數(shù)。31/403文件的操作文件的操作4例例5 5:從鍵盤(pán)輸入一個(gè)源文件的名稱和一個(gè)目:從鍵盤(pán)輸入一個(gè)源文件的名稱和一個(gè)目的文件的名稱的文件的名稱, ,在源文件中存放了一個(gè)計(jì)算式在源文件中存放了一個(gè)計(jì)算式( (注意沒(méi)有空格注意沒(méi)有空格).). 例如例如1+21+2 程序的功能是從源文件中讀取該式程序的功能是從源文件中讀取該式, ,并計(jì)算并計(jì)算其結(jié)果其結(jié)果, ,將
33、式子和結(jié)果以如下樣式輸出將式子和結(jié)果以如下樣式輸出 1+2=31+2=332/40#include int main() FILE *fp1, *fp2; char srcName20,desName20,op; float src1,src2,result; printf(請(qǐng)輸入源文件名:請(qǐng)輸入源文件名:n); gets(srcName); printf(請(qǐng)輸入目的文件名:請(qǐng)輸入目的文件名:n); gets(desName); if(fp1=fopen(srcName,r)=NULL) printf(file1 openned error.n); exit(0); if(fp2=fopen(
34、desName,w)=NULL) printf(file2 created error.n); exit(0); fscanf(fp1,%f%c%f,&src1,&op,&src2); 33/40 switch(op) case +: result=src1+src2; break; case -: result=src1-src2; break; case *: result=src1*src2; break; case /: result=src1/src2; fprintf(fp2,%f%c%f=%f,src1,op,src2,result); fclose(fp
35、1); fclose(fp2); return 0;34/40#include #define NUM 30typedef struct info /* 表示學(xué)生基本信息的結(jié)構(gòu)體類型表示學(xué)生基本信息的結(jié)構(gòu)體類型*/int No;char name16;char department32;char major32;INFO;例例6 6:P219 P219 例例6-156-1535/40main( )INFO s;int i;FILE *fp;char filename32;printf(“nEnter file name:”); /* 輸入文件名輸入文件名 */gets(filename); /
36、* 以寫(xiě)方式打開(kāi)文件以寫(xiě)方式打開(kāi)文件*/if (fp=fopen(filename, w) = NULL) printf(nCannot open %s file., filename);return 1;36/40 /* 按照格式控制輸入學(xué)生信息并寫(xiě)入文件*/ for (i=0; iNUM; i+) printf(n Enter No, name, department, major); scanf(%d%s%s%s, &s.No, , s.department, s.major); fprintf(fp, %d %s %s %sn, s.No, , s.de
37、partment, s.major); fclose(fp); /* 關(guān)閉文件 */ if (fp=fopen(filename, “r”)=NULL) /* 以讀方式打開(kāi)文件*/ printf(nCannot open %s file.,filename); return 1; while (!feof(fp) /* 按格式控制從文件讀取并顯示*/ fscanf(fp, %d%s%s%sn, &s.No, , s.department, s.major); printf(n%4d%16s%20s%20s, s.No, , s.department, s.maj
38、or); fclose(fp); /* 關(guān)閉文件 */37/403課堂練習(xí)課堂練習(xí)5已知在一個(gè)已知在一個(gè)resouce.txtresouce.txt文件中,第一行放文件中,第一行放了一個(gè),表示第二行放的數(shù)的個(gè)數(shù)了一個(gè),表示第二行放的數(shù)的個(gè)數(shù) 例如:例如:對(duì)該文件的第二行中的所有數(shù)據(jù)求和,保存對(duì)該文件的第二行中的所有數(shù)據(jù)求和,保存在文件在文件result.txtresult.txt#include int main( )int i,n=0,m,sum=0;FILE *fp;if (fp=fopen(k:2011-2012-2cresouce.txt, r) = NULL) printf(nCan
39、not openfile.);return 1;fscanf(fp,%d,&n);printf(n=%dn, n);for (i=0; in; i+) fscanf(fp,%d, &m);sum+=m;printf(sum=%dn, sum);fclose(fp); if (fp=fopen(k:2011-2012-2cresult.txt, w) = NULL) printf(nCannot openfile.);return 1;fprintf(fp,%d, sum);fclose(fp);return 0; 38/40順序讀寫(xiě):順序讀寫(xiě):位置指針按字節(jié)位置順序移動(dòng)。隨機(jī)讀
40、寫(xiě)隨機(jī)讀寫(xiě):讀寫(xiě)完上一個(gè)字符(字節(jié))后,并不一定要讀寫(xiě)其后續(xù)的字符(字節(jié)),而可以讀些文件中任意位置上所需要的字符(字節(jié))。1.文件位置指針的定位C語(yǔ)言提供以下有關(guān)函數(shù)使位置指針指向指定的位置:(1)rewind函數(shù)函數(shù)功能函數(shù)功能: :是使位置指針重新返回文件的開(kāi)頭,此函數(shù)沒(méi)有返回值。 3數(shù)據(jù)文件的隨機(jī)讀寫(xiě)數(shù)據(jù)文件的隨機(jī)讀寫(xiě)539/40例例:有一個(gè)磁盤(pán)文件,第一次將它的內(nèi)容顯示在屏幕上,第二次有一個(gè)磁盤(pán)文件,第一次將它的內(nèi)容顯示在屏幕上,第二次把它復(fù)制到另一文件上。把它復(fù)制到另一文件上。 #include main()FILE *fp1,*fp2; fp1=fopen(file1.c,r);fp2=fopen(file2.c,w); while(!feof(fp1) putchar(getc(fp1); rewind(fp1);while(!feof(fp1) putc(getc(fp1),fp2); fclose(fp1);fclose(fp2); 40/40(2)fs
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 文化產(chǎn)業(yè)中涂層的耐磨損性能研究考核試卷
- 工業(yè)設(shè)計(jì)中的產(chǎn)品生命周期管理考核試卷
- 信托公司業(yè)務(wù)流程標(biāo)準(zhǔn)化考核試卷
- 兔飼養(yǎng)繁殖技術(shù)的優(yōu)化考核試卷
- 新能源汽車充電設(shè)施規(guī)劃與布局優(yōu)化考核試卷
- 收購(gòu)公司的合同范本
- 營(yíng)業(yè)執(zhí)照合同范本
- 定制柜定金合同范本
- 木材板材加工合同范本
- 紗窗廠用工合同范本
- 《大學(xué)生創(chuàng)新創(chuàng)業(yè)教程》高職大學(xué)生創(chuàng)新創(chuàng)業(yè)課程全套教學(xué)課件
- 中醫(yī)肝與膽課件
- 鋼結(jié)構(gòu)用戶需求分析報(bào)告
- 3月8日國(guó)際婦女節(jié)主題班會(huì)致敬了不起的她母愛(ài)是生命的搖籃課件
- 圍擋施工方案裝配式鐵馬
- 同步課件:古代非洲與美洲
- 2024年德州職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)各版本
- 外陰炎及陰道炎癥課件
- JC-T 746-2023 混凝土瓦標(biāo)準(zhǔn)規(guī)范
- 統(tǒng)編版語(yǔ)文三年級(jí)下冊(cè)全冊(cè)同步分層作業(yè)課課練(含答案)
- 口腔科普知識(shí)問(wèn)答
評(píng)論
0/150
提交評(píng)論