第10章對文件輸入輸出_第1頁
第10章對文件輸入輸出_第2頁
第10章對文件輸入輸出_第3頁
第10章對文件輸入輸出_第4頁
第10章對文件輸入輸出_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第10章對文件的輸入輸出王燕2/3/20231第10章對文件的輸入輸出主要內(nèi)容10.1C文件的有關(guān)基本知識10.2打開與關(guān)閉文件10.3順序讀寫數(shù)據(jù)文件10.4隨機讀寫數(shù)據(jù)文件10.5文件讀寫的出錯檢測2/3/20232第10章對文件的輸入輸出重點難點文件的打開、關(guān)閉、讀寫2/3/20233第10章對文件的輸入輸出10.1C文件的有關(guān)基本知識文件有不同的類型,在程序設(shè)計中,主要用到兩種文件:(1)程序文件。包括源程序文件(后綴為.c)、目標(biāo)文件(后綴為.obj)、可執(zhí)行文件(后綴為.exe)等。這種文件的內(nèi)容是程序代碼。(2)數(shù)據(jù)文件。文件的內(nèi)容不是程序,而是供程序運行時讀寫的數(shù)據(jù),如一批學(xué)生的成績數(shù)據(jù),或貨物交易的數(shù)據(jù)等。本章主要討論的是數(shù)據(jù)文件2/3/20234第10章對文件的輸入輸出10.1C文件的有關(guān)基本知識使用數(shù)據(jù)文件的目的數(shù)據(jù)文件的改動不引起程序的改動:程序與數(shù)據(jù)分離。不同程序可以訪問同一數(shù)據(jù)文件中的數(shù)據(jù):數(shù)據(jù)共享。能長期保存程序運行的中間數(shù)據(jù)或結(jié)果數(shù)據(jù)。2/3/20235第10章對文件的輸入輸出10.1C文件的有關(guān)基本知識文件:文件指存儲在外部介質(zhì)如(磁盤磁帶)上數(shù)據(jù)的集合。操作系統(tǒng)把各種設(shè)備都作為文件處理從操作系統(tǒng)的角度看,每一個與主機相聯(lián)的輸入輸出設(shè)備都看作是文件。例如:終端鍵盤是輸入文件顯示屏和打印機是輸出文件2/3/20236第10章對文件的輸入輸出10.1C文件的有關(guān)基本知識文件分類按文件的邏輯結(jié)構(gòu):記錄文件:由具有一定結(jié)構(gòu)的記錄組成(定長和不定長)流式文件:由一個個字符(字節(jié))數(shù)據(jù)順序組成按數(shù)據(jù)的組織形式:文本文件:ASCII文件,每個字節(jié)存放一個字符的ASCII碼二進制文件:數(shù)據(jù)按其在內(nèi)存中的存儲形式原樣存放2/3/20237第10章對文件的輸入輸出10.1C文件的有關(guān)基本知識如int型數(shù)100000010011100010000內(nèi)存存儲形式0010011100010000二進制形式0011000100110000001100000011000000110000ASCII形式文本文件特點:存儲量大、速度慢、便于對字符操作二進制文件特點:存儲量小、速度快、便于存放中間結(jié)果2/3/20238第10章對文件的輸入輸出10.1C文件的有關(guān)基本知識C語言的文件是流式文件。所謂流就是一系列的字節(jié)或者字符,輸入輸出數(shù)據(jù)流的開始和結(jié)束僅受程序控制,而不受物理符號(如回車符)的控制。這種文件稱為流式文件。2/3/20239第10章對文件的輸入輸出10.1C文件的有關(guān)基本知識C語言對文件的兩種處理方法:緩沖文件系統(tǒng):系統(tǒng)自動地在內(nèi)存區(qū)為每一個正在使用的文件開辟一個緩沖區(qū)。磁盤文件輸出文件緩沖區(qū)輸入文件緩沖區(qū)程序數(shù)據(jù)區(qū)aANSIC使用緩沖文件系統(tǒng)2/3/202310第10章對文件的輸入輸出10.1C文件的有關(guān)基本知識非緩沖文件系統(tǒng):系統(tǒng)不自動開辟確定大小的緩沖區(qū),而由程序為每個文件設(shè)定緩沖區(qū)。緩沖區(qū)指令區(qū)程序用戶數(shù)據(jù)區(qū)磁盤2/3/202311第10章對文件的輸入輸出10.1C文件的有關(guān)基本知識從內(nèi)存向磁盤輸出數(shù)據(jù)必須先送到內(nèi)存中的緩沖區(qū),裝滿緩沖區(qū)后才一起送到磁盤去如果從磁盤向計算機讀入數(shù)據(jù),則一次從磁盤文件將一批數(shù)據(jù)輸入到內(nèi)存緩沖區(qū)(充滿緩沖區(qū)),然后再從緩沖區(qū)逐個地將數(shù)據(jù)送到程序數(shù)據(jù)區(qū)(給程序變量)2/3/202312第10章對文件的輸入輸出10.1C文件的有關(guān)基本知識文件要有一個唯一的文件標(biāo)識,以便用戶識別和引用。文件標(biāo)識包括三部分:(1)文件路徑(2)文件名主干(3)文件后綴2/3/202313第10章對文件的輸入輸出10.1C文件的有關(guān)基本知識文件路徑表示文件在外部存儲設(shè)備中的位置。如:D:\CC\temp\file1.dat表示file1.dat文件存放在D盤中的CC目錄下的temp子目錄下面文件路徑文件名主干文件后綴2/3/202314第10章對文件的輸入輸出10.1C文件的有關(guān)基本知識每個被使用的文件都在內(nèi)存中開辟一個相應(yīng)的文件信息區(qū),用來存放文件的有關(guān)信息(如文件的名字、文件狀態(tài)及文件當(dāng)前位置等)這些信息是保存在一個結(jié)構(gòu)體變量中的。該結(jié)構(gòu)體類型是由系統(tǒng)聲明的,取名為FILE聲明FILE結(jié)構(gòu)體類型的信息包含在頭文件“stdio.h”中一般設(shè)置一個指向FILE類型變量的指針變量,然后通過它來引用這些FILE類型變量2/3/202315第10章對文件的輸入輸出10.1C文件的有關(guān)基本知識typedefstruct{shortlevel;/*緩沖區(qū)“滿”或“空”的程度*/unsignedflags;/*文件狀態(tài)標(biāo)志*/charfd;/*文件描述符*/unsignedcharhold;/*如無緩沖區(qū)不讀取字符*/shortbsize;/*緩沖區(qū)的大小*/unsignedchar*buffer;/*數(shù)據(jù)緩沖區(qū)的位置*/unsignedchar*curp;/*指針,當(dāng)前的指向*/unsignedistemp; /*臨時文件,指示器*/shorttoken;/*用于有效性檢查*/}FILE;2/3/202316第10章對文件的輸入輸出10.1C文件的有關(guān)基本知識定義文件類型變量存放文件的信息,如:定義FILE類型變量,存放文件信息:FILEf;定義文件型指針變量,指向FILE類型結(jié)構(gòu)體變量,通過該結(jié)構(gòu)體變量中的文件信息訪問文件。如:FILE*fp;2/3/202317第10章對文件的輸入輸出10.2打開與關(guān)閉文件對文件讀寫之前應(yīng)該“打開”該文件,在使用結(jié)束之后應(yīng)“關(guān)閉”該文件。所謂“打開”是指為文件建立相應(yīng)的信息區(qū)(用來存放有關(guān)文件的信息)和文件緩沖區(qū)(用來暫時存放輸入輸出的數(shù)據(jù))。在編寫程序時,在打開文件的同時,一般都指定一個指針變量指向該文件,也就是建立起指針變量與文件之間的聯(lián)系,這樣就可以通過該指針變量對文件進行讀寫所謂“關(guān)閉”是指撤銷文件信息區(qū)和文件緩沖區(qū)2/3/202318第10章對文件的輸入輸出10.2打開與關(guān)閉文件文件使用方式:打開文件→文件讀/寫→關(guān)閉文件文件打開時,系統(tǒng)自動建立文件結(jié)構(gòu)體,并把指向它的指針返回來,程序通過這個指針獲得文件信息,訪問文件。如:fp=fopen("a1","r");在打開一個文件時,通知編譯系統(tǒng)以下3個信息:①需要訪問的文件的名字②使用文件的方式(“讀”還是“寫”等)③讓哪一個指針變量指向被打開的文件文件關(guān)閉后,它的文件結(jié)構(gòu)體被釋放2/3/202319第10章對文件的輸入輸出10.2打開與關(guān)閉文件C語言文件操作用庫函數(shù)實現(xiàn),包含在stdio.h系統(tǒng)自動打開和關(guān)閉三個標(biāo)準(zhǔn)文件:標(biāo)準(zhǔn)輸入------鍵盤stdin標(biāo)準(zhǔn)輸出------顯示器stdout標(biāo)準(zhǔn)出錯輸出-----顯示器stderr文件的打開(fopen函數(shù))函數(shù)原型:FILE*fopen(char*name,char*mode)調(diào)用方式:fopen("文件名","使用文件方式")例:FILE*fp;fp=fopen("d:\\user\\myfile.txt","r");為什么\\Read2/3/202320第10章對文件的輸入輸出10.2打開與關(guān)閉文件返回值:正常打開,返回指向文件結(jié)構(gòu)體的指針;打開失敗,返回NULL。方式處理方式指定文件不存在文件存在r 只讀出錯正常w只寫建立新文件原內(nèi)容丟失a追加建立新文件在原內(nèi)容后追加r+/w+讀寫出錯正常2/3/202321第10章對文件的輸入輸出10.2打開與關(guān)閉文件如果打開失敗,fopen函數(shù)將會帶回一個出錯信息。fopen函數(shù)將帶回一個空指針值NULL常用下面的方法打開一個文件:if((fp=fopen("file1","r"))==NULL){ printf("cannotopenthisfile\n");exit(0);}終止正在執(zhí)行的程序2/3/202322第10章對文件的輸入輸出10.2打開與關(guān)閉文件#include<stdio.h>#include<stdlib.h>voidmain(){ FILE*fp; fp=fopen("aa.c","w"); if(fp==NULL) {printf("Fileopenerror!\n");

exit(0);/*關(guān)閉所有文件終止調(diào)用*/ }}2/3/202323第10章對文件的輸入輸出10.2打開與關(guān)閉文件文件的關(guān)閉(fclose函數(shù))作用:使文件指針變量與文件“脫鉤”,釋放文件結(jié)構(gòu)體和文件指針。如果不關(guān)閉文件將會丟失數(shù)據(jù)。返回值:用于表示文件是否被正確地關(guān)閉,如果文件順利關(guān)閉,該值為0,否則為-1(EOF)。返回值可以用ferror函數(shù)測試。FILE*fp;fp=fopen("a.txt","r");fclose(fp);2/3/202324第10章對文件的輸入輸出10.3順序讀寫數(shù)據(jù)文件在順序?qū)憰r,先寫入的數(shù)據(jù)存放在文件中前面,后寫入的數(shù)據(jù)存放在文件中后面在順序讀時,先讀文件中前面的數(shù)據(jù),后讀文件中后面的數(shù)據(jù)對順序讀寫來說,對文件讀寫數(shù)據(jù)的順序和數(shù)據(jù)在文件中的物理順序是一致的順序讀寫需要用庫函數(shù)實現(xiàn)2/3/202325第10章對文件的輸入輸出10.3順序讀寫數(shù)據(jù)文件讀/寫文件中的一個字符fputc函數(shù)(putc函數(shù))函數(shù)原型:intfputc(intc,FILE*fp)功能:把一字節(jié)代碼c寫入fp指向的文件中返值:正常,返回c;出錯,為EOF(-1)fgetc函數(shù)(getc函數(shù))函數(shù)原型:int

fgetc(FILE*fp)功能:從fp指向的文件中讀取一字節(jié)代碼返值:返回讀到的代碼值;讀到文件尾或出錯為EOF(-1)字符常量或變量文件指針變量2/3/202326第10章對文件的輸入輸出10.3順序讀寫數(shù)據(jù)文件feof函數(shù)調(diào)用方式:feof(fp)功能:對于二進制文件讀取時判斷文件是否結(jié)束。返值:結(jié)束-1;反之0。例10.1:從鍵盤輸入一些字符,逐個把它們送到磁盤上去,直到輸入一個“#”為止。2/3/202327第10章對文件的輸入輸出#include<stdlib.h>#include<stdio.h>voidmain(){ FILE*fp; charch,filename[10]; scanf("%s",filename); if((fp=fopen(filename,"w"))==NULL) { printf("cannotopenfile\n"); exit(0);/*終止程序*/ }ch=getchar();/*接收執(zhí)行scanf時最后輸入的回車符*/ ch=getchar();/*第一個輸入的字符被賦給變量ch*/ while(ch!='#') { fputc(ch,fp);/*字符被寫入filename表示的文件中*/ putchar(ch);/*字符被輸出到顯示器*/ ch=getchar(); } fclose(fp);/*關(guān)閉文件*/}運行情況如下:file1.c(輸入磁盤文件名)computerandc#(輸入一個字符串)computerandc(輸出一個字符串)2/3/202328第10章對文件的輸入輸出10.3順序讀寫數(shù)據(jù)文件例10.2:將一個磁盤文件中的信息復(fù)制到另一個磁盤文件中。解題思路:處理此問題的算法是:從file1.dat文件中逐個讀入字符,然后逐個輸出到file2.dat中。2/3/202329第10章對文件的輸入輸出#include<stdlib.h>#include<stdio.h>voidmain(){ FILE*in,*out; charch,infile[10],outfile[10]; printf("Entertheinfilename:\n"); scanf("%s",infile); printf("Entertheoutfilename:\n");scanf("%s",outfile); if((in=fopen(infile,"r"))==NULL) { printf("cannotopeninfile\n"); exit(0);} if((out=fopen(outfile,"w"))==NULL) {printf("cannotopenoutfile\n");exit(0); } while(!feof(in)) fputc(fgetc(in),out); fclose(in); fclose(out); }2/3/202330第10章對文件的輸入輸出10.3順序讀寫數(shù)據(jù)文件2.fgets和fputs函數(shù)形式:fgets(str,n,fp);(str字符數(shù)組,n-1個字符)fputs(字符串,fp);("\0"不輸出)作用:從fp指向的文件讀/寫一個字符串返值:fgets正常時返回字符串的首地址;出錯或文件尾,NULLfputs正常時返回寫入的最后一個字符;出錯為EOF2/3/202331第10章對文件的輸入輸出舉例例10.3:從鍵盤讀入若干個字符串,對它們按字母大小的順序排序,然后把排好序的字符串送到磁盤文件中保存。解題思路:為解決問題,可分為三個步驟:從鍵盤讀入n個字符串,存放在一個二維字符數(shù)組中,每一個一維數(shù)組存放一個字符串;對字符數(shù)組中的n個字符串按字母順序排序,排好序的字符串仍存放在字符數(shù)組中;將字符數(shù)組中的字符串順序輸出。2/3/202332第10章對文件的輸入輸出#include<stdio.h>#include<stdlib.h>#include<string.h>intmain(){FILE*fp;charstr[3][10],temp[10];inti,j,k,n=3;printf("Enterstrings:\n");for(i=0;i<n;i++)gets(str[i]);for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++) if(strcmp(str[k],str[j])>0)k=j;2/3/202333第10章對文件的輸入輸出if(k!=i) {strcpy(temp,str[i]); strcpy(str[i],str[k]); strcpy(str[k],temp);}}if((fp=fopen("D:\\CC\\string.dat","w"))==NULL){printf("can'topenfile!\n");exit(0);}printf("\nThenewsequence:\n");for(i=0;i<n;i++) {fputs(str[i],fp);fputs("\n",fp); printf("%s\n",str[i]);}return0;}人為地輸出一個'\n'2/3/202334第10章對文件的輸入輸出例從鍵盤讀入字符串存入文件,再從文件讀回顯示#include<stdio.h>#include<string.h>voidmain(){FILE*fp;charstring[81];if((fp=fopen("file.txt","w"))==NULL){printf("cann'topenfile");return;}while(strlen(gets(string))>0){fputs(string,fp);

fputs("\n",fp);}

fclose(fp);if((fp=fopen("file.txt","r"))==NULL){printf("cann'topenfile");return;}while(fgets(string,81,fp)!=NULL)

fputs(string,stdout);fclose(fp);}2/3/202335第10章對文件的輸入輸出10.3順序讀寫數(shù)據(jù)文件按指定格式讀寫文件的函數(shù):fprintf和fscanf一般調(diào)用格式:fscanf(fp,格式字符串,輸入列表);fprintf(fp,格式字符串,輸出列表);返值:成功,返回I/O的個數(shù);出錯或文件尾,返回EOF由于輸入輸出時要進行ASCII碼和二進制形式的轉(zhuǎn)換,費時較多。fscanf(fp,"%d,%f"

,&i,&t);/*若文件中有3,4.5,則將3讀出送入i,4.5讀出送入t*/fprintf(fp,"%d,%6.2f"

,i,t);/*將i和t按%d,%6.2f格式寫入到fp文件*/2/3/202336第10章對文件的輸入輸出voidsave(){FILE*fp;inti;if((fp=fopen("d:\\stu_list","w"))==NULL){printf("cannotopenfile\n");return;}for(i=0;i<SIZE;i++)

fprintf(fp,"%s%d%d%s",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);

fclose(fp);}2/3/202337第10章對文件的輸入輸出voiddisplay(){FILE*fp;inti;if((fp=fopen("d:\\stu_list","r"))==NULL){printf("cannotopenfile\n");return;}for(i=0;i<SIZE;i++){fscanf(fp,"%s%d%d%s",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);

printf("%-10s%4d%4d%-15s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);}

fclose(fp);}2/3/202338第10章對文件的輸入輸出10.3順序讀寫數(shù)據(jù)文件數(shù)據(jù)塊輸入輸出函數(shù):fread與fwrite一般調(diào)用形式:fread(buffer,size,count,fp);fwrite(buffer,size,count,fp);參數(shù)說明:buffer:要讀入的數(shù)據(jù)塊的存放首地址或要輸出的數(shù)據(jù)塊的起始地址。size:每個要讀/寫的數(shù)據(jù)塊的大小(字節(jié)數(shù))count:要讀/寫的數(shù)據(jù)塊的個數(shù)fp:要讀/寫的文件指針2/3/202339第10章對文件的輸入輸出10.3順序讀寫數(shù)據(jù)文件返值:成功,返count的值;出錯或文件尾,0值。fread與fwrite一般用于二進制文件的輸入/輸出,若文件以二進制形式打開,用fread或fwrite可讀寫任何類型的數(shù)據(jù)。如:fread(f,4,2,fp)2/3/202340第10章對文件的輸入輸出舉例例10.4:從鍵盤輸入10個學(xué)生的有關(guān)數(shù)據(jù),然后把它們轉(zhuǎn)存到磁盤文件上去。解題思路:定義有10個元素的結(jié)構(gòu)體數(shù)組,用來存放10個學(xué)生的數(shù)據(jù)從main函數(shù)輸入10個學(xué)生的數(shù)據(jù)用save函數(shù)實現(xiàn)向磁盤輸出學(xué)生數(shù)據(jù)用fwrite函數(shù)一次輸出一個學(xué)生的數(shù)據(jù)2/3/202341第10章對文件的輸入輸出#include<stdio.h>#defineSIZE10structstudent_type{charname[10];intnum;intage;charaddr[15];}stud[SIZE];voidmain(){inti;for(i=0;i<SIZE;i++)scanf("%s%d%d%s",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr);

save();display();}2/3/202342第10章對文件的輸入輸出voidsave(){FILE*fp;inti;if((fp=fopen("d:\\stu_list","wb"))==NULL){printf("cannotopenfile\n");return;}for(i=0;i<SIZE;i++)

if(fwrite(&stud[i],sizeof(structstudent_type),1,fp)!=1)

printf("filewriteerror\n");

fclose(fp);}文件必須是以“二進制”打開的2/3/202343第10章對文件的輸入輸出voiddisplay(){FILE*fp;inti;if((fp=fopen("d:\\stu_list","rb"))==NULL){printf("cannotopenfile\n");return;}for(i=0;i<SIZE;i++){fread(&stud[i],sizeof(structstudent_type),1,fp);printf("%-10s%4d%4d%-15s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);}

fclose(fp);}2/3/202344第10章對文件的輸入輸出10.3順序讀寫數(shù)據(jù)文件例題:將4個學(xué)生的數(shù)據(jù),從磁盤文件stu_dat調(diào)入,然后輸出到stu_list文件中,并在屏幕上顯示磁盤文件的內(nèi)容。2/3/202345第10章對文件的輸入輸出10.3順序讀寫數(shù)據(jù)文件#include<stdio.h>#defineSIZE4structstudent_type{charname[10];intnum;intage;charaddr[15];}stud[SIZE];main(){load();

save();display();}voidload(){FILE*fp;inti;if((fp=fopen("d:\\stu_dat","rb"))==NULL){printf("cannotopenfile\n");return;}for(i=0;i<SIZE;i++)if(fread(&stud[i],sizeof(structstudent_type),1,fp)!=1){if(feof(fp)){fclose(fp);retun;}printf("filereaderror\n");}

fclose(fp);}2/3/202346第10章對文件的輸入輸出10.4隨機讀寫數(shù)據(jù)文件對文件進行順序讀寫比較容易理解,也容易操作,但有時效率不高隨機訪問不是按數(shù)據(jù)在文件中的物理位置次序進行讀寫,而是可以對任何位置上的數(shù)據(jù)進行訪問,顯然這種方法比順序訪問效率高得多文件位置標(biāo)記:為了對讀寫進行控制,系統(tǒng)為每個文件設(shè)置了一個文件讀寫位置標(biāo)記(簡稱文件標(biāo)記),用來指示“接下來要讀寫的下一個字符的位置”2/3/202347第10章對文件的輸入輸出10.4隨機讀寫數(shù)據(jù)文件文件位置由文件打開方式確定。"r""w":指向文件頭"a":指向文件尾讀寫方式順序讀寫:文件位置按字節(jié)位置順序移動。隨機讀寫:文件位置按需要移動到任意位置。2/3/202348第10章對文件的輸入輸出10.4隨機讀寫數(shù)據(jù)文件rewind函數(shù)函數(shù)原型:voidrewind(FILE*fp)功能:重置文件位置指針到文件開頭返值:無例10.5:有一個磁盤文件,內(nèi)有一些信息。要求第一次將它的內(nèi)容顯示在屏幕上,第二次把它復(fù)制到另一文件上。2/3/202349第10章對文件的輸入輸出#include<stdio.h>voidmain(){FILE*fp1,*fp2;fp1=fopen("c:\\tc\\user\\ch12_4.c","r");fp2=fopen("d:\\tc\\user\\ch12_41.c","w");while(!feof(fp1))putchar(getc(fp1));

rewind(fp1);while(!feof(fp1))putc(getc(fp1),fp2);

fclose(fp1);fclose(fp2);}2/3/202350第10章對文件的輸入輸出10.4隨機讀寫數(shù)據(jù)文件fseek函數(shù)和隨機讀寫調(diào)用形式:fseek(文件類型指針,位移量,起始點)功能:改變文件位置指針的位置返值:成功,返回0;失敗,返回非0值位移量(以起始點為基點,移動的字節(jié)數(shù))>0向后移動,<0向前移動起始點文件開始SEEK_SET0文件當(dāng)前位置

SEEK_CUR1文件末尾SEEK_END2例fseek(fp,100L,0);fseek(fp,50L,1);fseek(fp,-10L,2);2/3/202351第10章對文件的輸入輸出10.4隨機讀寫數(shù)據(jù)文件例10.6:文件內(nèi)存有10個學(xué)生數(shù)據(jù),將單數(shù)學(xué)生數(shù)據(jù)輸入計算機并在屏幕上顯示#include<stdlid.h>#include<stdio.h>structstudent_type{charname[10];intnum;intage;charsex;}stud[10];2/3/202352第10章對文件的輸入輸出voidmain(){FILE*fp;inti;if((fp=fopen("stud_dat","rb"))==NULL){printf("cannotopenfile\n");return;}for(i=0;i<10;i+=2){fseek(fp,i*sizeof(structstudent_type),0);fread(&stud[i],sizeof(structstudent_type),1,fp);printf("%s%d%d%c\n",stud[i].name,stud[i].num,stud[i].age,stud[i].sex);}

fclose(fp);}2/3/202353第10章對文件的輸入輸出10.4隨機讀寫數(shù)據(jù)文件ftell函數(shù)函數(shù)原型:longftell(FILE*fp)功能:得到流式文件中位置指針當(dāng)前位置(用相對于文件開頭的位移量表示)返值:返回當(dāng)前位置指針位置;失敗,返回-1L2/3/202354第10章對文件的輸入輸出例求文件長度#include"stdio.h"voidmain(){FILE*fp;charfilename[80];longlength;

gets(filename);

fp=fopen(filename,"rb");if(fp==NULL)printf("filenotfound!\n");else{fseek(fp,0L,SEEK_END);length=ftell(fp);printf("LengthofFileis%1dbytes\n",lengt

溫馨提示

  • 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論