版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
項目十學(xué)生信息的讀取與保存-文件1【項目要求】從文件a.txt讀取某班的期末考試成績,按總分排序后寫入另外一個文件b.txt。
在上一章實現(xiàn)的項目中發(fā)現(xiàn),每次運(yùn)行程序都要輸入大量的數(shù)據(jù),如果用我們以前學(xué)過的輸入的方法就很不方便,最常用的方法就是預(yù)先將這些數(shù)據(jù)寫到一個文件里,再將這個文件存放在磁盤上,需要時再將數(shù)據(jù)從該文件中讀取。為實現(xiàn)本項目需要經(jīng)過打開文件、從文件進(jìn)行數(shù)據(jù)的讀/寫、關(guān)閉文件指針三步。
【項目分析】2問題情境及實現(xiàn)
#include<stdio.h>#defineN100typedef
structstudent{charnum[11];charname[9];intscore[3];floatavr;}STU;voidfsort(STU
s[],intn)//對結(jié)構(gòu)體數(shù)組中的n個數(shù)據(jù)進(jìn)行簡單選擇排序{
int
i,j,k; STUt;
for(i=0;i<n-1;i++) {k=i;
for(j=i+1;j<n;j++)
if(s[k].avr<s[j].avr)k=j;
if(i!=k){t=s[i];s[i]=s[k];s[k]=t;}}}3問題情境及實現(xiàn)
voidmain(){FILE*fp1,*fp2;STUs[N];int
i,n,j,sum;if((fp1=fopen("f:\\cresource\\10w2.txt","r"))==NULL){
printf("找不到該文件\n");/*如果打不開文件則給出相應(yīng)的提示*/
getch();exit(0);}i=0;while(!feof(fp1))/*從文件中讀取有關(guān)數(shù)據(jù),一直讀到文件末尾*/{ fscanf(fp1,"%s%s",s[i].num,s[i].name);
sum=0;
for(j=0;j<3;j++) { fscanf(fp1,"%d",&s[i].score[j]); sum+=s[i].score[j]; }
s[i].avr=sum/3.0;/*同時求出平均分*/ i++;}4問題情境及實現(xiàn)
fclose(fp1);/*關(guān)閉文件*/n=i;for(i=0;i<n;i++){
printf("\n第%d個學(xué)生的信息:%s%s",i+1,s[i].num,s[i].name);
for(j=0;j<3;j++)
printf("%d",s[i].score[j]);}fsort(s,n);fp2=fopen("f:\\cresource\\10w2_2.txt","w");/*打開文件進(jìn)行保存數(shù)據(jù)*/for(i=0;i<n;i++){ fprintf(fp2,"%s%s",s[i].num,s[i].name);
for(j=0;j<3;j++) fprintf(fp2,"%d",s[i].score[j]); fprintf(fp2,"%f",s[i].avr); fprintf(fp2,"\n");/*寫完一個學(xué)生的信息換行*/}fclose(fp2);}566相關(guān)知識2.文件的打開與關(guān)閉本講小結(jié)1.文件概述3.文件的讀寫操作重點(diǎn):文件的打開與關(guān)閉文件的讀寫操作4.文件應(yīng)用舉例1文件概述(1)1.1使用文件的目的①程序與數(shù)據(jù)分離:
數(shù)據(jù)文件的改動不引起程序的改動;②數(shù)據(jù)共享:
不同程序可以訪問同一數(shù)據(jù)文件中的數(shù)據(jù);③能長期保存程序運(yùn)行的中間數(shù)據(jù)或結(jié)果數(shù)據(jù)。71文件概述(2)1.2文件的分類按文件的邏輯結(jié)構(gòu):記錄文件:由具有一定結(jié)構(gòu)的記錄組成(定長和不定長)流式文件:由一個個字符(字節(jié))數(shù)據(jù)順序組成按存儲介質(zhì):普通文件:存儲介質(zhì)文件(磁盤、磁帶等)設(shè)備文件:非存儲介質(zhì)(鍵盤、顯示器、打印機(jī)等)81文件概述(3)1.2文件的分類(續(xù))按數(shù)據(jù)的組織形式:文本文件:ASCII文件,每個字節(jié)存放一個字符的ASCII碼二進(jìn)制文件:數(shù)據(jù)按其在內(nèi)存中的存儲形式原樣存放9存儲為二進(jìn)制文件形式:00010000001001111文件概述(4)1.2文件的分類—文本文件和二進(jìn)制文件0010011100010000存儲為文本文件形式:0011000000110000001100000011000000110001如:int型數(shù)10000內(nèi)存存儲形式文本文件特點(diǎn):存儲量大、速度慢、便于對字符操作二進(jìn)制文件特點(diǎn):存儲量小、速度快、便于存放中間結(jié)果101文件概述(5)1.3文件處理的方法緩沖文件系統(tǒng):高級文件系統(tǒng),系統(tǒng)自動為正在使用的文件開辟內(nèi)存緩沖區(qū),利用緩沖區(qū)完成文件讀寫操作。非緩沖文件系統(tǒng):低級文件系統(tǒng),由用戶在程序中為每個文件設(shè)定緩沖區(qū)111文件概述(6)1.3文件處理的方法—緩沖文件系統(tǒng)輸出文件緩沖區(qū)輸入文件緩沖區(qū)程序數(shù)據(jù)區(qū)緩沖文件系統(tǒng):磁盤文件寫入文件讀取文件121文件概述(7)1.3文件處理的方法—非緩沖文件系統(tǒng)程序緩沖區(qū)指令區(qū)用戶數(shù)據(jù)區(qū)非緩沖文件系統(tǒng):磁盤文件讀寫文件131文件概述(8)1.4文件類型指針—文件結(jié)構(gòu)體typedef
struct{shortlevel;/*fill/emptylevelofbuffer*/unsignedflags;/*Filestatusflags*/charfd;/*Filedescriptor*/unsignedcharhold;/*Ungetccharifnobuffer*/shortbsize;/*Buffersize*/unsignedchar*buffer;/*Datatransferbuffer*/unsignedchar*curp;/*Currentactivepointer*/unsignedistemp;/*Temporaryfileindicator*/shorttoken;/*Usedforvaliditychecking*/}FILE;
教材P294有VC6.0下的結(jié)構(gòu)定義141文件概述(9)1.4文件類型指針FILE*fp;文件打開時,系統(tǒng)自動建立文件結(jié)構(gòu)體,并把指向它的指針返回來,程序通過這個指針獲得文件信息,訪問文件;文件關(guān)閉后,它的文件結(jié)構(gòu)體被釋放。返回主菜單文件使用方式:打開文件-->文件讀/寫-->關(guān)閉文件152文件的打開與關(guān)閉(1)2.1打開文件函數(shù)原型:FILE*fopen(char*name,char*mode)stdio.h要打開的文件名使用文件方式返回值:正常打開,返回指向文件結(jié)構(gòu)體的指針;打開失敗,為NULLP295頁162文件的打開與關(guān)閉(2)2.1打開文件課堂練習(xí):①打開當(dāng)前文件夾下的namelist.txt文件,打開方式為追加②打開d盤test文件夾下的namelist.txt文件,如果該文件不存在,就創(chuàng)建該文件,然后增加文件內(nèi)容課堂練習(xí)編寫172文件的打開與關(guān)閉(3)2.2關(guān)閉文件函數(shù)原型:
int
fclose(FILE*fp)文件打開時返回的文件類型指針返回值:正常關(guān)閉為0;
出錯時,非0課堂練習(xí):關(guān)閉前面課堂練習(xí)中打開的文件返回主菜單183文件的讀寫(1)3.1文件的順序讀寫—文件字符輸入/輸出函數(shù)函數(shù)原型:int
fputc(intc,FILE*fp)功能:把一字節(jié)代碼c寫入fp指向的文件中返值:正常,返回c;出錯,為EOF函數(shù)原型:int
fgetc(FILE*fp)功能:從fp指向的文件中讀取一字節(jié)代碼返值:正常,返回讀到的代碼值;
讀到文件尾(EOF)或出錯(NULL)為止193文件的讀寫(1)3.1文件的順序讀寫—文件字符輸入/輸出函數(shù)例1:從鍵盤輸入若干字符,逐個將它們寫入文件”file.txt”中,直到輸入一個”*”為止。例1編寫考慮如何編程完成將一個磁盤文件203文件的讀寫(2)3.1文件的順序讀寫—文件字符串輸入/輸出函數(shù)函數(shù)原型:int
fputs(char*string,FILE*fp);
功能:把字符串寫入fp指向的文件中返值:正常,返回0;出錯,為EOF函數(shù)原型:char*fgets(char*s,intn,FILE*fp);
功能:從fp指向的文件中讀取長度不超過n-1個字符返值:正常,返回讀到字符串的首地址;
讀到文件尾(EOF)或出錯(NULL)為止P300頁例11.2213文件的讀寫(3)3.1文件的順序讀寫—文件的格式化輸入/輸出函數(shù)int
fprintf(FILE*fp,constchar*format[,argument,…])int
fscanf(FILE*fp,constchar*format[,address,…])功能:按格式對文件進(jìn)行I/O操作返值:成功,返回I/O的個數(shù);出錯或文件尾,返回EOF223文件的讀寫(4)3.1文件的順序讀寫—文件的格式化輸入/輸出函數(shù)例3:有如下的學(xué)生結(jié)構(gòu)定義,從鍵盤輸入4個學(xué)生的信息,保存到文件name-list.txt文件中struct
student_type{charname[10];
intnum;
intage;charaddr[15];}例3編寫233文件的讀寫(5)3.1文件的順序讀寫—文件的數(shù)據(jù)塊輸入/輸出函數(shù)實現(xiàn)文件操作一次讀取一組數(shù)據(jù)size_tfread(void*buffer,size_tsize,size_tcount,FILE*fp)size_tfwrite(void*buffer,size_tsize,size_tcount,FILE*fp)指向要輸入/輸出數(shù)據(jù)塊的首地址的指針每個要讀/寫的數(shù)據(jù)塊的大?。ㄗ止?jié)數(shù))要讀/寫的數(shù)據(jù)塊的個數(shù)要讀/寫的文件指針返值:成功,返回讀/寫的塊數(shù);出錯或文件尾,返回0P304頁例11.4243文件的讀寫(6)2文件的隨機(jī)讀寫操作—rewind函數(shù)將文件的指針指向用戶指定的位置,進(jìn)行文件操作rewind函數(shù)函數(shù)原型:voidrewind(FILE*fp)功能:重置文件位置指針到文件開頭返值:無253文件的讀寫(7)2文件的隨機(jī)讀寫操作—rewind函數(shù)例4:分析下面程序的功能#include<stdio.h>main(){FILE*fp1,*fp2;fp1=fopen("file1.c","r");fp2=fopen("file2.c","w");
while(!feof(fp1))putchar(fgetc(fp1));rewind(fp1);
while(!feof(fp1))fputc(fgetc(fp1),fp2);fclose(fp1);fclose(fp2);}從文件中第一次將它內(nèi)容顯示在屏幕中,第二次讀取將其復(fù)制到另一個文件中263文件的讀寫(7)2文件的隨機(jī)讀寫操作—fseek函數(shù)fseek函數(shù)函數(shù)原型:
int
fseek(FILE*fp,longoffset,intwhence)功能:改變文件位置指針的位置返值:成功,返回0;失敗,返回非0值273文件的讀寫(8)2文件的隨機(jī)讀寫操作—fseek函數(shù)例5:分析下面程序的功能#include"stdio.h"
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 七年級道德與法治上冊第三單元師長情誼第六課師生之間第1框走近老師教案新人教版
- 三年級科學(xué)上冊第三單元天氣與我們的生活第十四課我的雨量器教案青島版
- 小學(xué)生家校溝通制度
- 《吃蟲草》課件(3篇)
- 《行行重行行完整》課件
- 三年級閱讀課教學(xué)參考計劃范文5篇
- 破釜沉舟成語故事課件全
- 2021年衛(wèi)生法簡答題
- 風(fēng)險合規(guī)管理培訓(xùn)課件
- 2021年全國應(yīng)急普法知識考試題庫(全真題庫)
- ktv營運(yùn)總監(jiān)崗位職責(zé)
- 地震監(jiān)測系統(tǒng)運(yùn)維方案、重點(diǎn)難點(diǎn)分析及應(yīng)對措施
- 三級配電箱巡檢記錄
- 《全國統(tǒng)一安裝工程預(yù)算定額》工程量計算規(guī)則
- 露天礦安全操作規(guī)程匯編
- 胎膜早破的護(hù)理PPT
- (新版)北師大版五年級數(shù)學(xué)上冊期末試卷
- 小班《火車開了》音樂欣賞課評課稿
- 2023年上海市旅行社責(zé)任保險統(tǒng)保保險方案
- 倫理學(xué)與醫(yī)學(xué)倫理學(xué) (醫(yī)學(xué)倫理學(xué)課件)
- GB/T 6344-2008軟質(zhì)泡沫聚合材料拉伸強(qiáng)度和斷裂伸長率的測定
評論
0/150
提交評論