C語(yǔ)言程序設(shè)計(jì)教程 課件 第10.1 文件_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)教程 課件 第10.1 文件_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)教程 課件 第10.1 文件_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)教程 課件 第10.1 文件_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)教程 課件 第10.1 文件_第5頁(yè)
已閱讀5頁(yè),還剩41頁(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)介

第10章文件教學(xué)目標(biāo)1.了解C語(yǔ)言中文件的使用方法;2.能夠讀寫(xiě)文本文件和二進(jìn)制文件;3.掌握順序讀寫(xiě)和隨機(jī)讀寫(xiě)函數(shù)的用法。教學(xué)內(nèi)容文件的相關(guān)操作10.2

文件的相關(guān)概念10.1第9章文件想一想C語(yǔ)言編程為什么需要使用文件?編程計(jì)算10名學(xué)生平均成績(jī),每一次運(yùn)行程序都要重復(fù)輸入10名學(xué)生的成績(jī)。如何做到一次輸入,下次運(yùn)行程序重復(fù)使用??jī)?nèi)存:臨時(shí)存儲(chǔ)數(shù)據(jù)磁盤(pán)(外存):長(zhǎng)期保存數(shù)據(jù),可以使用文件,將數(shù)據(jù)存儲(chǔ)到磁盤(pán)上。10.1文件的相關(guān)概念“文件”:就是記載在外部存儲(chǔ)器上的數(shù)據(jù)集合,是存儲(chǔ)數(shù)據(jù)的載體。在C語(yǔ)言中,把這些數(shù)據(jù)的集合看成是字符或者字節(jié)序列(或稱:有序的“字節(jié)流”),處理這些文件時(shí),并不區(qū)分文件類型,而是按字節(jié)處理。EOF012345n-1結(jié)束標(biāo)志10.1文件的相關(guān)概念文件的分類按數(shù)據(jù)的組織形式:文本文件、二進(jìn)制文件按文件存儲(chǔ)格式:源程序文件、數(shù)據(jù)文件、圖形圖像文件、音頻文件、視頻文件、可執(zhí)行文件按照保護(hù)級(jí)別:只讀文件、只寫(xiě)文件、可讀可寫(xiě)文件等按照保存期限:臨時(shí)文件、永久文件C語(yǔ)言程序輸入輸出操作涉及的數(shù)據(jù)文件10.1文件的相關(guān)概念文件的緩沖區(qū)使用緩沖區(qū)的目的:減少對(duì)磁盤(pán)的實(shí)際讀寫(xiě)次數(shù),提高讀、寫(xiě)操作的速度。從磁盤(pán)文件讀入數(shù)據(jù):一次將一批數(shù)據(jù)讀到內(nèi)存緩沖區(qū)(充滿緩沖區(qū)),然后再?gòu)木彌_區(qū)逐個(gè)地將數(shù)據(jù)送給接收變量。向磁盤(pán)文件寫(xiě)數(shù)據(jù):先將數(shù)據(jù)送到內(nèi)存緩沖區(qū),裝滿緩沖區(qū)后才一起寫(xiě)到磁盤(pán)文件。用緩沖區(qū)可以一次輸入或輸出一批數(shù)據(jù),而不是執(zhí)行一次輸入或輸出操作就訪問(wèn)一次磁盤(pán)。10.1文件的相關(guān)概念文件的緩沖區(qū)C語(yǔ)言兩大類磁盤(pán)文件系統(tǒng):“緩沖文件系統(tǒng)”:系統(tǒng)自動(dòng)地在內(nèi)存區(qū)為每一個(gè)正在使用的文件開(kāi)辟一個(gè)緩沖區(qū)?!鷺?biāo)準(zhǔn)I/O(標(biāo)準(zhǔn)輸入輸出)“非緩沖文件系統(tǒng)”:系統(tǒng)不自動(dòng)設(shè)置緩沖區(qū),而由用戶根據(jù)需要設(shè)置?!到y(tǒng)I/O(系統(tǒng)輸入輸出)stdio.h頭文件10.2文件的相關(guān)操作對(duì)文件的兩種操作:

“讀”----“輸入”“寫(xiě)”----“輸出”從鍵盤(pán)(stdin)輸入,從手寫(xiě)板輸入,都是讀數(shù)據(jù),將數(shù)據(jù)讀入內(nèi)存中。將文件中數(shù)據(jù)讀入內(nèi)存就稱為“讀”文件,也稱為文件的輸入;將內(nèi)存中的數(shù)據(jù)輸出到顯示器(stdout),輸出到打印機(jī),都是寫(xiě)數(shù)據(jù),將內(nèi)存中的數(shù)據(jù)寫(xiě)入到文件,就稱為“寫(xiě)”文件,也稱為文件的輸出。10.2文件的相關(guān)操作C語(yǔ)言文件操作步驟分為四步:①定義文件指針②打開(kāi)文件③讀或?qū)懳募荜P(guān)閉文件重點(diǎn):記住各種函數(shù)的用法10.2文件的相關(guān)操作1.定義文件指針文件操作之前必須要先定義文件指針變量,記錄文件當(dāng)前的讀寫(xiě)位置(相當(dāng)于word文件和EXCEL文件中的光標(biāo))定義形式:FILE*<變量標(biāo)識(shí)符>;如:FILE*fp;

則:fp為指向FILE類型結(jié)構(gòu)體的指針變量(FILE:已經(jīng)定義的結(jié)構(gòu)體數(shù)據(jù)類型,類型定義在stdio.h頭文件中;)10.2文件的相關(guān)操作1.定義文件指針文件指針類型FILE的定義stdio.h頭文件中對(duì)文件指針類型的定義如下:typedefstruct{shortlevel;unsignedflags;charfd;unsignedcharhold;shortbsize;unsignedchar*buffer;unsignedchar*curp;//當(dāng)前激活指針unsignedistemp;shorttoken;}FILE;10.2文件的相關(guān)操作2.文件的打開(kāi)與關(guān)閉文件打開(kāi)函數(shù)原型

FILE*fopen(char*filename,char*type);filename:字符串,文件名,可以是帶有路徑的文件名,可以在當(dāng)前工作目錄(相對(duì)路徑)下;也可以在指定路徑(絕對(duì)路徑)下;type:字符串,操作模式,不同的模式對(duì)應(yīng)不同的操作,對(duì)文本文件和二進(jìn)制文件分別使用不同的操作模式;函數(shù)返回值:成功→文件指針;失敗→NULL。10.2文件的相關(guān)操作2.文件的打開(kāi)與關(guān)閉常用的6種打開(kāi)模式文本文件r

以只讀方式打開(kāi)w

以只寫(xiě)方式打開(kāi)a

以追加方式打開(kāi)r+

以讀/寫(xiě)方式打開(kāi)w+

以讀/寫(xiě)方式建新文件a+

以讀/寫(xiě)方式打開(kāi)二進(jìn)制文件rb

以只讀方式打開(kāi)wb

以只寫(xiě)方式打開(kāi)ab

以追加方式打開(kāi)rb+

以讀/寫(xiě)方式打開(kāi)wb+

以讀/寫(xiě)方式建新文件ab+

以讀/寫(xiě)方式打開(kāi)注:并不是所有的C語(yǔ)言系統(tǒng)都具備以上文件操作模式,與編譯器有關(guān)。10.2文件的相關(guān)操作例題2.文件的打開(kāi)與關(guān)閉【例題10_1】/*p10_1.c文件打開(kāi)方式1*/#include<stdio.h>voidmain(){

FILE*fp;fp=fopen("myfile1.txt","r");if(fp==NULL)printf("fileopenerror!\n");elseprintf("fileopenOK!\n");fclose(fp);}問(wèn)題:1.myfile1.txt文件在哪里?2.如果myfile1.txt文件不存在,會(huì)怎樣?與當(dāng)前程序在同一個(gè)文件夾打開(kāi)失敗,返回NULL10.2文件的相關(guān)操作例題2.文件的打開(kāi)與關(guān)閉【例題10_2】/*p10_2.c文件打開(kāi)方式2*/#include<stdio.h>voidmain(){

FILE*fp;fp=fopen("c:\\myfile2.txt","w");if(fp==NULL)printf("fileopenerror!\n");elseprintf("fileopenOK!\n");}問(wèn)題:1.myfile2.txt文件在哪里?2.如果myfile2.txt文件不存在,會(huì)怎樣?在C盤(pán)根目錄下創(chuàng)建新文件,打開(kāi)成功10.2文件的相關(guān)操作例題2.文件的打開(kāi)與關(guān)閉【例題10_3】/*p10_3.c文件打開(kāi)方式3*/#include<stdio.h>#include<stdlib.h>voidmain(){FILE*fp;if((fp=fopen("myfile3.txt","a"))==NULL){printf("fileopenerror!\n");exit(0);}else{printf("FileopenisOK!\n");

/*此處為讀寫(xiě)文件的操作代碼*/}fclose(fp);}問(wèn)題:1.紅色括號(hào)是否必須有?必須有,==優(yōu)先于=2.如果myfile3.txt文件不存在,會(huì)怎樣?創(chuàng)建新文件,打開(kāi)成功10.2文件的相關(guān)操作2.文件的打開(kāi)與關(guān)閉文件關(guān)閉函數(shù)原型為:intfclose(FILE*fp);fp:文件指針,指向一個(gè)已經(jīng)打開(kāi)的文件;例:fclose(fp);函數(shù)返回值:0-表示文件關(guān)閉正確;非0值-表示文件關(guān)閉失敗。文件使用完要關(guān)閉,否則有可能造成數(shù)據(jù)丟失!10.2文件的相關(guān)操作3.文件讀寫(xiě)函數(shù)讀寫(xiě)文件兩種方式:“順序讀寫(xiě)”:文件被打開(kāi)后,按照數(shù)據(jù)流的先后順序?qū)ξ募M(jìn)行從前向后按順序讀/寫(xiě)操作,每讀/寫(xiě)一次,文件指針自動(dòng)指向下一個(gè)讀/寫(xiě)位置?!爸苯幼x寫(xiě)”:又稱隨機(jī)讀寫(xiě),是指先通過(guò)庫(kù)函數(shù)指定要開(kāi)始讀寫(xiě)的字節(jié)號(hào),將文件指針進(jìn)行準(zhǔn)確定位,然后從此位置開(kāi)始對(duì)文件內(nèi)容進(jìn)行讀或?qū)懖僮鳌V苯幼x寫(xiě)適合于具有固定長(zhǎng)度記錄的文件。10.2文件的相關(guān)操作3.文件讀寫(xiě)函數(shù)C語(yǔ)言文件讀寫(xiě)函數(shù)聲明在stdio.h頭文件中,主要有四組,分別為:fgetc()/fputc:讀寫(xiě)字符fgets()/fputs:讀寫(xiě)字符串fscanf()/fprintf:格式化讀寫(xiě)fread()/fwrite():按塊讀寫(xiě)對(duì)文本文件,一般按字符、按字符串讀寫(xiě),或者格式化讀寫(xiě);對(duì)二進(jìn)制文件,一般進(jìn)行成塊讀寫(xiě)或者格式化讀寫(xiě)。10.2文件的相關(guān)操作3.文件讀寫(xiě)函數(shù)1)字符讀寫(xiě)函數(shù)向文件中寫(xiě)一個(gè)字符:原型:charfputc(charch,FILE*fp);函數(shù)返回值:寫(xiě)入正確→返回字符ch;錯(cuò)誤→返回-1(EOF)ch:待輸出的某個(gè)字符,可以是一個(gè)字符常量,也可以是一個(gè)字符變量;fp:文件指針,指向一個(gè)已經(jīng)打開(kāi)的文件例:fputc(ch,fp);作用:將字符ch寫(xiě)入fp指針?biāo)傅奈募恢?。【例題10_4】從鍵盤(pán)輸入一系列字符,原樣寫(xiě)入文件file1.txt,用字符*做結(jié)束標(biāo)志。#include<stdio.h>#include<stdlib.h>voidmain(){FILE*fp;charch;fp=fopen("file1.txt","w");if(fp==NULL)

{printf("fileopenerror!\n");

return;}//exit(0);printf("請(qǐng)連續(xù)輸入字符:\n");ch=getchar();while(ch!='*')

{

fputc(ch,fp); ch=getchar();}fclose(fp);}10.2文件的相關(guān)操作3.文件讀寫(xiě)函數(shù)1)字符讀寫(xiě)函數(shù)從文件中讀一個(gè)字符原型:intfgetc(FILE*fp);函數(shù)返回值:成功→返回字符的ASCII碼錯(cuò)誤或到達(dá)文件尾→返回-1(EOF)fp:文件指針,指向一個(gè)已經(jīng)打開(kāi)的文件例:while((ch=fgetc(fp))!=EOF)作用:從文件指針fp所指文件中讀一個(gè)字符存入字符變量ch(事先已經(jīng)定義),讀取成功未到文件尾部(ch!=EOF),則執(zhí)行循環(huán)體里的語(yǔ)句,到文件尾部(ch==EOF)則退出循環(huán)。【例題10_5】將文件file1.txt中的內(nèi)容逐個(gè)字符讀出來(lái),原樣顯示在屏幕上。

#include<stdio.h>#include<stdlib.h>voidmain(){FILE*fp;charch;fp=fopen("file1.txt","r");if(fp==NULL)

{

printf("fileopenerror!\n");

return;

}printf("讀出的字符是:\n");

ch=fgetc(fp);while(ch!=EOF)

{ putchar(ch);

ch=fgetc(fp); }putchar('\n');fclose(fp);}10.2文件的相關(guān)操作3.文件讀寫(xiě)函數(shù)提示:每讀/寫(xiě)一次,文件指針自動(dòng)指向下一個(gè)位置;讀取文件時(shí),一定要先讀一次,再判斷文件是否結(jié)束。循環(huán)語(yǔ)句中一定要有再次讀文件的語(yǔ)句。10.2文件的相關(guān)操作3.文件讀寫(xiě)函數(shù)2)字符串讀寫(xiě)函數(shù)從文件中讀取字符串:char*fgets(char*string,intn,F(xiàn)ILE*

fp);返回值:正確→返回地址string;錯(cuò)誤→返回NULLstring:字符型指針,表示字符串的起始地址n:讀取字符串最長(zhǎng)n-1個(gè)字符,回車換行符也是一個(gè)字符。如果提前遇到回車或文件結(jié)束符,則操作提前結(jié)束。讀取結(jié)束后,自動(dòng)在讀入的字符串后面加一個(gè)“\0”作為字符串結(jié)束標(biāo)志。fp:文件指針,指向一個(gè)已經(jīng)打開(kāi)的文件10.2文件的相關(guān)操作3.文件讀寫(xiě)函數(shù)2)字符串讀寫(xiě)函數(shù)例:fgets(ch,10,fp);作用:從文件指針fp所指文件位置讀取9個(gè)字符,放到以ch為起始地址的存儲(chǔ)空間,若在9個(gè)字符前,遇到回車換行符或文件結(jié)束符,則操作結(jié)束。讀取結(jié)束后在讀入的字符串后面加一個(gè)“\0”字符作為字符串結(jié)束標(biāo)識(shí)。10.2文件的相關(guān)操作3.文件讀寫(xiě)函數(shù)2)字符串讀寫(xiě)函數(shù)向文件寫(xiě)入字符串:原型:intfputs(char*str,F(xiàn)ILE*fp);返回值:正確→返回非負(fù)數(shù);錯(cuò)誤→返回-1(EOF)str:要寫(xiě)入文件的字符串。可以是字符串常量,也可以是指向字符串的指針或字符型數(shù)組;fp:文件指針,指向一個(gè)已經(jīng)打開(kāi)的文件例:fputs("你好??!",fp);作用:將字符串"你好啊!"保存到文件指針fp所指的文件位置。【例題10_6】改進(jìn)【例題10_4】,用讀寫(xiě)字符串函數(shù)實(shí)現(xiàn)從鍵盤(pán)輸入一行字符寫(xiě)入文本文件,文件名字由用戶指定

#include<stdio.h>#include<stdlib.h>#include<string.h>voidmain(){FILE*fp;charstr[20],name[20];printf("請(qǐng)輸入文件名:\n");gets(name);fp=fopen(name,"w");if(fp==NULL){printf("fileopenerror!\n");

return; }printf("請(qǐng)輸入字符串:\n");while(strlen(gets(str))>0)

fputs(str,fp);fclose(fp);}【例題10_7】改進(jìn)【例題10_5】,用字符串讀寫(xiě)函數(shù)將【例題10_6】創(chuàng)建的文件內(nèi)容串讀出來(lái),原樣顯示在屏幕上

#include<stdio.h>#include<stdlib.h>voidmain(){FILE*fp;charstr[20],name[20];printf("請(qǐng)輸入文件名:\n");gets(name);fp=fopen(name,"r");if(fp==NULL){printf("fileopenerror!\n");

return; }printf("讀出的字符是:\n");while(fgets(str,20,fp)!=NULL)puts(str);fclose(fp);}10.2文件的相關(guān)操作習(xí)題如下程序執(zhí)行后,文件t1.dat中的內(nèi)容是()。#include<stdio.h>#include<stdlib.h>voidWriteStrn(char*fn,char*str){FILE*fp;chars;fp=fopen(fn,"w");fputs(str,fp);fclose(fp);}voidmain(){WriteStrn("t1.dat","start");WriteStrn("t1.dat","end");}A.startB.endC.startendD.endtB10.2文件的相關(guān)操作3.文件讀寫(xiě)函數(shù)3)格式化讀寫(xiě)函數(shù)格式化讀函數(shù)原型:intfscanf(FILE*fp,char*format,&arg1,&arg2,…,&argn);&arg1,&arg2,…,&argn:輸入項(xiàng)列表,與scanf()函數(shù)一致format:格式控制字符,與scanf()函數(shù)一致fp:文件指針,指向一個(gè)已經(jīng)打開(kāi)的文件例:fscanf(fp,"%d%d",&a,&b);作用:從fp所指文件位置讀兩個(gè)整數(shù),分別存入變量a和b中,變量a和b事先已經(jīng)正確定義,兩個(gè)整數(shù)之間以空格(或者跳格符、回車換行符)分隔。10.2文件的相關(guān)操作3.文件讀寫(xiě)函數(shù)3)格式化讀寫(xiě)函數(shù)格式化寫(xiě)函數(shù)原型:intfprintf(FILE*fp,char*format,arg1,arg2,…argn)&arg1,&arg2,…,&argn:輸出項(xiàng)列表,與printf()函數(shù)一致format:格式控制字符,與printf()函數(shù)一致fp:文件指針,指向一個(gè)已經(jīng)打開(kāi)的文件例:fprintf(fp,"%d%s\n",i,name);作用:向fp指針?biāo)肝募恢脤?xiě)兩個(gè)數(shù)據(jù),一個(gè)整數(shù),一個(gè)字符串。變量i和name已經(jīng)正確定義,并存入數(shù)據(jù)。為了便于讀文件數(shù)據(jù),格式符中加了空格進(jìn)行分隔【例題10_8】編寫(xiě)程序,輸入5名學(xué)生的成績(jī)、姓名,存在文本文件cj.txt中,每個(gè)學(xué)生一行,垂直對(duì)齊。

#include<stdio.h>#include<stdlib.h>voidmain(){FILE*fp;intcj,i;charname[8];fp=fopen("cj.txt","w");if(fp==NULL){printf("fileopenerror!\n");

return; }for(i=1;i<=5;i++){printf("第%d名學(xué)生的成績(jī)、姓名:",i);

scanf("%d%s",&cj,name);

fprintf(fp,"%d\t%s\n",cj,name); }fclose(fp);}問(wèn):為何不需要定義結(jié)構(gòu)體數(shù)組存學(xué)生成績(jī)?【例題10_9】編寫(xiě)程序,將文本cj.txt文件中讀出,原樣顯示在屏幕上。

#include<stdio.h>#include<stdlib.h>voidmain(){FILE*fp;intcj,i;charname[8];fp=fopen("cj.txt","r");if(fp==NULL){printf("fileopenerror!\n");exit(0);}for(i=1;i<=5;i++){ printf("第%d名學(xué)生:",i);

fscanf(fp,"%d%s",&cj,name);printf("%d\t%s\n",cj,name); }fclose(fp);}【例題10_10】用格式化讀寫(xiě)函數(shù)讀寫(xiě)二進(jìn)制文件

#include<stdio.h>#include<stdlib.h>voidmain(){FILE*fp;intcj,i;charname[8];fp=fopen("cj.dat","wb+");if(fp==NULL){printf("fileopenerror!\n");exit(0);}printf("【輸入數(shù)據(jù)】\n");for(i=1;i<=3;i++)

{ printf("第%d名學(xué)生的成績(jī)、姓名:",i); scanf("%d%s",&cj,name);

fprintf(fp,"%d\t%s\n",cj,name);

}

rewind(fp);//文件位置指針重新返回到文件的開(kāi)頭printf("\n【輸出數(shù)據(jù)】\n");

for(i=1;i<=3;i++){printf("第%d名學(xué)生:",i);

fscanf(fp,"%d%s",&cj,name);

printf("%d\t%s\n",cj,name);

}fclose(fp);}【輸入數(shù)據(jù)】第1名學(xué)生的成績(jī)、姓名:90張三第2名學(xué)生的成績(jī)、姓名:87李四第3名學(xué)生的成績(jī)、姓名:97王五【輸出數(shù)據(jù)】第1名學(xué)生:90張三第2名學(xué)生:87李四第3名學(xué)生:97王五10.2文件的相關(guān)操作3.文件讀寫(xiě)函數(shù)4)按塊讀寫(xiě)函數(shù)①按塊讀函數(shù):原型:intfread(void*buf,intsize,intcount,FILE*fp);buf:數(shù)據(jù)塊指針,準(zhǔn)備讀數(shù)據(jù)的內(nèi)存首地址,通常為字符數(shù)組size:每個(gè)數(shù)據(jù)塊的字節(jié)數(shù)count:每讀寫(xiě)一次,輸入或輸出的數(shù)據(jù)塊個(gè)數(shù)fp:文件指針,指向一個(gè)已經(jīng)打開(kāi)的文件返回值:成功→返回?cái)?shù)據(jù)項(xiàng)數(shù)(count的值),出錯(cuò)或到達(dá)文件尾→返回小于count的值作用:從fp所指的文件中讀取count個(gè)數(shù)據(jù)項(xiàng),每一個(gè)數(shù)據(jù)項(xiàng)的長(zhǎng)度為

size個(gè)字節(jié),放到由buf所指的塊中(buf通常為字符數(shù)組)。讀取的

字節(jié)總數(shù)為size×count。10.2文件的相關(guān)操作3.文件讀寫(xiě)函數(shù)4)按塊讀寫(xiě)函數(shù)②按塊寫(xiě)函數(shù):原型:intfwrite(void*buf,intsize,intcount,FILE*fp)buf:數(shù)據(jù)塊指針,準(zhǔn)備寫(xiě)數(shù)據(jù)的內(nèi)存首地址,通常為字符數(shù)組size:每個(gè)數(shù)據(jù)塊的字節(jié)數(shù)count:每讀寫(xiě)一次,輸入或輸出的數(shù)據(jù)塊個(gè)數(shù)fp:文件指針,指向一個(gè)已經(jīng)打開(kāi)的文件返回值:成功→返回?cái)?shù)據(jù)項(xiàng)數(shù)(count的值),出錯(cuò)→返回小于count的值作用:將count個(gè)長(zhǎng)度為size的數(shù)據(jù)項(xiàng)寫(xiě)到fp所指的文件流中去【例題10_11】輸入5名學(xué)生的序號(hào)、姓名、成績(jī),使用按塊讀寫(xiě)函數(shù)保存在二進(jìn)制文件st.dat中,每個(gè)學(xué)生一行,垂直對(duì)齊#include<stdio.h>#include<stdlib.h>voidmain(){

FILE*fp; inti;structs

{intxh;charname[8];intcj;}ss[5];fp=fopen("st.dat","ab");if(fp==NULL)

{printf("fileopenerror!\n");exit(0); }for(i=0;i<5;i++)

{

ss[i].xh=i+1; printf("第%d名學(xué)生的姓名:",i+1); scanf("%s",&ss[i].name); printf("第%d名學(xué)生的成績(jī):",i+1); scanf("%d",&ss[i].cj);

fwrite(&ss[i],sizeof(structs),1,fp);

}fclose(fp);}【例題10_12】編寫(xiě)程序,將二進(jìn)制文件st.dat中的學(xué)生數(shù)據(jù)讀出來(lái),顯示在屏幕上。st.dat中,每個(gè)學(xué)生一行,垂直對(duì)齊#include<stdio.h>#include<stdlib.h>voidmain(){

FILE*fp;inti=0;structs

{intxh;charname[8];intcj;}ss[30];fp=fopen("st.dat","rb");if(fp==NULL)

{printf("fileopenerror!\n");exit(0); }fread(&ss[i],sizeof(structs),1,fp);while(!feof(fp))

{

printf("序號(hào):%d\t姓名:%s",ss[i].xh,ss[i].name); printf("\t成績(jī):%d:\n",ss[i].cj); i++;

fread(&ss[i],sizeof(structs),1,fp);

}fclose(fp);}序號(hào):1姓名:張三成績(jī):80:序號(hào):2姓名:李四成績(jī):90:序號(hào):3姓名:王五成績(jī):87:序號(hào):4姓名:趙六成績(jī):79:序號(hào):5姓名:鄭琦成績(jī):86:1

溫馨提示

  • 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)論