C語言程序設(shè)計(jì)-第十章 學(xué)生信息的讀取與保存_第1頁
C語言程序設(shè)計(jì)-第十章 學(xué)生信息的讀取與保存_第2頁
C語言程序設(shè)計(jì)-第十章 學(xué)生信息的讀取與保存_第3頁
C語言程序設(shè)計(jì)-第十章 學(xué)生信息的讀取與保存_第4頁
C語言程序設(shè)計(jì)-第十章 學(xué)生信息的讀取與保存_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

項(xiàng)目十學(xué)生信息的讀取與保存-文件1【項(xiàng)目要求】從文件a.txt讀取某班的期末考試成績,按總分排序后寫入另外一個(gè)文件b.txt。

在上一章實(shí)現(xiàn)的項(xiàng)目中發(fā)現(xiàn),每次運(yùn)行程序都要輸入大量的數(shù)據(jù),如果用我們以前學(xué)過的輸入的方法就很不方便,最常用的方法就是預(yù)先將這些數(shù)據(jù)寫到一個(gè)文件里,再將這個(gè)文件存放在磁盤上,需要時(shí)再將數(shù)據(jù)從該文件中讀取。為實(shí)現(xiàn)本項(xiàng)目需要經(jīng)過打開文件、從文件進(jìn)行數(shù)據(jù)的讀/寫、關(guān)閉文件指針三步。

【項(xiàng)目分析】2問題情境及實(shí)現(xiàn)

#include<stdio.h>#defineN100typedef

structstudent{charnum[11];charname[9];intscore[3];floatavr;}STU;voidfsort(STU

s[],intn)//對結(jié)構(gòu)體數(shù)組中的n個(gè)數(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問題情境及實(shí)現(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;/*同時(shí)求出平均分*/ i++;}4問題情境及實(shí)現(xiàn)

fclose(fp1);/*關(guān)閉文件*/n=i;for(i=0;i<n;i++){

printf("\n第%d個(gè)學(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");/*寫完一個(gè)學(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)的記錄組成(定長和不定長)流式文件:由一個(gè)個(gè)字符(字節(jié))數(shù)據(jù)順序組成按存儲介質(zhì):普通文件:存儲介質(zhì)文件(磁盤、磁帶等)設(shè)備文件:非存儲介質(zhì)(鍵盤、顯示器、打印機(jī)等)81文件概述(3)1.2文件的分類(續(xù))按數(shù)據(jù)的組織形式:文本文件:ASCII文件,每個(gè)字節(jié)存放一個(gè)字符的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),由用戶在程序中為每個(gè)文件設(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;文件打開時(shí),系統(tǒng)自動建立文件結(jié)構(gòu)體,并把指向它的指針返回來,程序通過這個(gè)指針獲得文件信息,訪問文件;文件關(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)文件打開時(shí)返回的文件類型指針返回值:正常關(guān)閉為0;

出錯(cuò)時(shí),非0課堂練習(xí):關(guān)閉前面課堂練習(xí)中打開的文件返回主菜單183文件的讀寫(1)3.1文件的順序讀寫—文件字符輸入/輸出函數(shù)函數(shù)原型:int

fputc(intc,FILE*fp)功能:把一字節(jié)代碼c寫入fp指向的文件中返值:正常,返回c;出錯(cuò),為EOF函數(shù)原型:int

fgetc(FILE*fp)功能:從fp指向的文件中讀取一字節(jié)代碼返值:正常,返回讀到的代碼值;

讀到文件尾(EOF)或出錯(cuò)(NULL)為止193文件的讀寫(1)3.1文件的順序讀寫—文件字符輸入/輸出函數(shù)例1:從鍵盤輸入若干字符,逐個(gè)將它們寫入文件”file.txt”中,直到輸入一個(gè)”*”為止。例1編寫考慮如何編程完成將一個(gè)磁盤文件203文件的讀寫(2)3.1文件的順序讀寫—文件字符串輸入/輸出函數(shù)函數(shù)原型:int

fputs(char*string,FILE*fp);

功能:把字符串寫入fp指向的文件中返值:正常,返回0;出錯(cuò),為EOF函數(shù)原型:char*fgets(char*s,intn,FILE*fp);

功能:從fp指向的文件中讀取長度不超過n-1個(gè)字符返值:正常,返回讀到字符串的首地址;

讀到文件尾(EOF)或出錯(cuò)(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的個(gè)數(shù);出錯(cuò)或文件尾,返回EOF223文件的讀寫(4)3.1文件的順序讀寫—文件的格式化輸入/輸出函數(shù)例3:有如下的學(xué)生結(jié)構(gòu)定義,從鍵盤輸入4個(gè)學(xué)生的信息,保存到文件name-list.txt文件中struct

student_type{charname[10];

intnum;

intage;charaddr[15];}例3編寫233文件的讀寫(5)3.1文件的順序讀寫—文件的數(shù)據(jù)塊輸入/輸出函數(shù)實(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ù)塊的首地址的指針每個(gè)要讀/寫的數(shù)據(jù)塊的大?。ㄗ止?jié)數(shù))要讀/寫的數(shù)據(jù)塊的個(gè)數(shù)要讀/寫的文件指針返值:成功,返回讀/寫的塊數(shù);出錯(cuò)或文件尾,返回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ù)制到另一個(gè)文件中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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論