




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
項目十學生信息的讀取與保存-文件1【項目要求】從文件a.txt讀取某班的期末考試成績,按總分排序后寫入另外一個文件b.txt。
在上一章實現(xiàn)的項目中發(fā)現(xiàn),每次運行程序都要輸入大量的數(shù)據(jù),如果用我們以前學過的輸入的方法就很不方便,最常用的方法就是預(yù)先將這些數(shù)據(jù)寫到一個文件里,再將這個文件存放在磁盤上,需要時再將數(shù)據(jù)從該文件中讀取。為實現(xiàn)本項目需要經(jīng)過打開文件、從文件進行數(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ù)進行簡單選擇排序{
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個學生的信息:%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");/*打開文件進行保存數(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");/*寫完一個學生的信息換行*/}fclose(fp2);}566相關(guān)知識2.文件的打開與關(guān)閉本講小結(jié)1.文件概述3.文件的讀寫操作重點:文件的打開與關(guān)閉文件的讀寫操作4.文件應(yīng)用舉例1文件概述(1)1.1使用文件的目的①程序與數(shù)據(jù)分離:
數(shù)據(jù)文件的改動不引起程序的改動;②數(shù)據(jù)共享:
不同程序可以訪問同一數(shù)據(jù)文件中的數(shù)據(jù);③能長期保存程序運行的中間數(shù)據(jù)或結(jié)果數(shù)據(jù)。71文件概述(2)1.2文件的分類按文件的邏輯結(jié)構(gòu):記錄文件:由具有一定結(jié)構(gòu)的記錄組成(定長和不定長)流式文件:由一個個字符(字節(jié))數(shù)據(jù)順序組成按存儲介質(zhì):普通文件:存儲介質(zhì)文件(磁盤、磁帶等)設(shè)備文件:非存儲介質(zhì)(鍵盤、顯示器、打印機等)81文件概述(3)1.2文件的分類(續(xù))按數(shù)據(jù)的組織形式:文本文件:ASCII文件,每個字節(jié)存放一個字符的ASCII碼二進制文件:數(shù)據(jù)按其在內(nèi)存中的存儲形式原樣存放9存儲為二進制文件形式:00010000001001111文件概述(4)1.2文件的分類—文本文件和二進制文件0010011100010000存儲為文本文件形式:0011000000110000001100000011000000110001如:int型數(shù)10000內(nèi)存存儲形式文本文件特點:存儲量大、速度慢、便于對字符操作二進制文件特點:存儲量小、速度快、便于存放中間結(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打開文件課堂練習:①打開當前文件夾下的namelist.txt文件,打開方式為追加②打開d盤test文件夾下的namelist.txt文件,如果該文件不存在,就創(chuàng)建該文件,然后增加文件內(nèi)容課堂練習編寫172文件的打開與關(guān)閉(3)2.2關(guān)閉文件函數(shù)原型:
int
fclose(FILE*fp)文件打開時返回的文件類型指針返回值:正常關(guān)閉為0;
出錯時,非0課堂練習:關(guān)閉前面課堂練習中打開的文件返回主菜單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,…])功能:按格式對文件進行I/O操作返值:成功,返回I/O的個數(shù);出錯或文件尾,返回EOF223文件的讀寫(4)3.1文件的順序讀寫—文件的格式化輸入/輸出函數(shù)例3:有如下的學生結(jié)構(gòu)定義,從鍵盤輸入4個學生的信息,保存到文件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文件的隨機讀寫操作—rewind函數(shù)將文件的指針指向用戶指定的位置,進行文件操作rewind函數(shù)函數(shù)原型:voidrewind(FILE*fp)功能:重置文件位置指針到文件開頭返值:無253文件的讀寫(7)2文件的隨機讀寫操作—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)容顯示在屏幕中,第二次讀取將其復制到另一個文件中263文件的讀寫(7)2文件的隨機讀寫操作—fseek函數(shù)fseek函數(shù)函數(shù)原型:
int
fseek(FILE*fp,longoffset,intwhence)功能:改變文件位置指針的位置返值:成功,返回0;失敗,返回非0值273文件的讀寫(8)2文件的隨機讀寫操作—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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026屆新疆伊犁州奎屯一中 化學高二上期中考試試題含解析
- 家電公司合同管理辦法
- 家電公司戰(zhàn)略風險管理細則
- 湖南省瀏陽一中、醴陵一中2026屆化學高一上期末達標檢測模擬試題含解析
- 22.2.1直接開平方法和因式分解法(教學課件)數(shù)學華東師大版九年級上冊
- 基礎(chǔ)卷-2023年小升初數(shù)學模擬卷二(蘇教版)答案解析
- 2022年河南省開封市高中高三下學期5月三模英語試題
- 保安手冊掌握要點課件
- 機關(guān)薪酬方案(3篇)
- 浙江寧波市2026屆高三化學第一學期期末復習檢測試題含解析
- (2025年標準)分次支付協(xié)議書
- 2025年保稅區(qū)面試題目及答案
- 鄉(xiāng)鎮(zhèn)網(wǎng)絡(luò)安全知識培訓課件
- 駕駛員安全培訓考試試題及答案
- 《禮儀規(guī)范教程》 課件 概述篇 以禮相待 第一課 禮儀的概述
- 2025年新疆焊工理論考試題庫
- 2025年工會考試真題附答案
- 國際壓力性損傷-潰瘍預(yù)防和治療臨床指南(2025年版)解讀
- 小沈陽《四大才子》歡樂喜劇人臺詞
- 機械制造技術(shù)基礎(chǔ)(課程精完整版)課件
- 護士注冊健康體檢表下載【可直接打印版本】
評論
0/150
提交評論