




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第13章文件操作1精選課件ppt第13章文件操作1精選課件ppt內(nèi)容提要
二進(jìn)制文件和文本文件
文件的打開和關(guān)閉文件的順序讀寫與隨機(jī)讀寫2精選課件ppt內(nèi)容提要二進(jìn)制文件和文本文件2精選課件pptVonJ.Neumannarchitecture輸入/輸出設(shè)備存儲(chǔ)器運(yùn)算器控制器程序和輸入數(shù)據(jù)輸出結(jié)果取出數(shù)據(jù)存入數(shù)據(jù)操作命令存取命令取出程序指令輸入輸出命令計(jì)算結(jié)果CPU大腦記憶裝置(Memory)眼睛和耳朵(I/Odevices)Wheretoputdataincomputer?
Howtoinputoroutputdata?
3精選課件pptVonJ.Neumannarchitecture存儲(chǔ)器I/O設(shè)備輸入設(shè)備鍵盤、鼠標(biāo)軟盤、硬盤、光驅(qū)(以文件的形式)掃描儀、視頻采集卡、電視卡、游戲桿、話筒……輸出設(shè)備顯示器、打印機(jī)軟盤、硬盤、CD/DVD-RW(以文件的形式)音箱……4精選課件pptI/O設(shè)備輸入設(shè)備4精選課件ppt內(nèi)存:程序運(yùn)行時(shí)申請(qǐng),程序結(jié)束時(shí)釋放,無法保存數(shù)據(jù),數(shù)據(jù)會(huì)隨著程序的結(jié)束而丟失。#include<stdio.h>structstudent{ intnum; charname[10]; floatscore[3];};voidmain(){structstudentstu[3];inti;printf("請(qǐng)輸入學(xué)生信息\n");for(i=0;i<3;i++)scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);for(i=0;i<3;i++)printf("%d%s%.2f%.2f%.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]); }5精選課件ppt內(nèi)存:程序運(yùn)行時(shí)申請(qǐng),程序結(jié)束時(shí)釋放,無法保存數(shù)據(jù),數(shù)據(jù)會(huì)隨如何在程序結(jié)束后依然保留數(shù)據(jù)?
以文件的形式放在外存上文件:存儲(chǔ)在外存上有名字的一組相關(guān)數(shù)據(jù)的集合6精選課件ppt如何在程序結(jié)束后依然保留數(shù)據(jù)?以文件的形式放在外存上文件:存文件的存放(Storage)可以建立若干文件目錄(directory\folder文件夾)在目錄里保存文件同一級(jí)目錄里保存的文件不能同名對(duì)使用者而言,只要知道文件的路徑(path,全目錄)和文件名,就能使用該文件C:\home\Sunner\main.c這都是托OS的福7精選課件ppt文件的存放(Storage)可以建立若干文件目錄(direc13.1二進(jìn)制文件和文本文件
二進(jìn)制文件是一種字節(jié)序列,沒有字符變換按照數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式(二進(jìn)制)存儲(chǔ)到文件如短整數(shù)123,在內(nèi)存占2個(gè)字節(jié),則文件中也占2個(gè)字節(jié)文本文件/ASCII碼文件是一種字符序列,文件中存儲(chǔ)每個(gè)字符的ASCII碼如整數(shù)123在文件中占3個(gè)字節(jié),分別存放這3個(gè)字符的ASCII碼如果存整數(shù)1234呢?8精選課件ppt13.1二進(jìn)制文件和文本文件二進(jìn)制文件如果存整數(shù)1234呢ASCII文件和二進(jìn)制文件的比較:ASCII文件便于對(duì)字符進(jìn)行逐個(gè)處理,也便于輸出字符。但一般占存儲(chǔ)空間較多,而且要花費(fèi)轉(zhuǎn)換時(shí)間。二進(jìn)制文件可以節(jié)省外存空間和轉(zhuǎn)換時(shí)間,但一個(gè)字節(jié)并不對(duì)應(yīng)一個(gè)字符,不能直接輸出字符形式。一般中間結(jié)果數(shù)據(jù)需要暫時(shí)保存在外存上,以后又需要輸入內(nèi)存的,常用二進(jìn)制文件保存。9精選課件pptASCII文件和二進(jìn)制文件的比較:9精選課件ppt文件的格式(FormatofFiles)數(shù)據(jù)必須按照存入的類型讀出,才能恢復(fù)其本來面貌公開的標(biāo)準(zhǔn)格式如bmp、tif、gif、jpg和mp3等類型的文件,有大量軟件能生成和使用這些類型的文件不公開或加密的文件格式如MicrosoftWord的doc格式就不公開,所以至今沒有Word以外的其它軟件能完美地讀出doc文件
10精選課件ppt文件的格式(FormatofFiles)數(shù)據(jù)必須按照存入所有有關(guān)文件的操作都離不開文件指針用文件指針代表一個(gè)文件,對(duì)文件的操作都是通過相應(yīng)文件的文件指針來完成文件指針是C為我們提供的一種文件類型的指針變量,它的具體定義方法是
FILE*fp;有了這樣的定義之后,fp就可以指向一個(gè)文件11精選課件ppt所有有關(guān)文件的操作都離不開文件指針11精選課件ppt文件指針()#include<stdio.h>FILE
*fp;typedef
struct{
shortlevel;/*緩沖區(qū)‘滿’或‘空’的程度*/
unsignedflags;/*文件狀態(tài)標(biāo)志*/
charfd;/*文件描述符*/
unsignedcharhold;/*如無緩沖區(qū)不讀字符*/
shortbsize;/*緩沖區(qū)的大小*/
unsignedchar*buffer;/*數(shù)據(jù)緩沖區(qū)的位置*/
unsignedchar*curp;/*指針當(dāng)前的指向*/
unsignedistemp;/*臨時(shí)文件指示器*/
shorttoken;/*用于有效性檢查*/}FILE;/*在stdio.h文件中定義*/對(duì)文件的操作都是通過各種函數(shù)來實(shí)現(xiàn)的12精選課件ppt文件指針()#include<stdio.h>typede13.2文件的打開和關(guān)閉文件的打開(fopen()函數(shù))FILE*fopen(const
char*,const
char*mode);FILE*fp=fopen("C:\\CONFIG.SYS","rw");是文件名包含路徑。如果不含路徑,表示打開當(dāng)前目錄下的文件mode是打開方式常用為"r"、"w"、"rw"和"a",分別表示只讀、只寫、讀寫和添加"rb"表示只讀二進(jìn)制文件返回值為指向此文件的指針,留待以后使用如果打開失敗,返回值為NULL13精選課件ppt13.2文件的打開和關(guān)閉文件的打開(fopen()函數(shù))13文件打開方式(mode):對(duì)應(yīng)二進(jìn)制文件對(duì)應(yīng)文本文件“r”
只讀必須是已存在的文件?!皐”
只寫不論該文件是否存在,都新建一個(gè)文件?!癮”
追加向文本文件尾增加數(shù)據(jù),該文件必須存在“r+”
讀寫打開一個(gè)已存在的文件,用于讀寫?!皐+”讀寫建立一個(gè)新文件,可讀可寫。“a+”
讀寫向文件尾追加數(shù)據(jù),也可讀。“rb”
“wb”“ab”“rb+”“wb+”“ab+”14精選課件ppt文件打開方式(mode):對(duì)應(yīng)二進(jìn)制文件對(duì)應(yīng)文本文件“r”13.2文件的打開和關(guān)閉文件的關(guān)閉(fclose()函數(shù))intfclose(FILE*fp);使文件指針變量和文件脫鉤,釋放文件所占的緩沖區(qū)fclose函數(shù)的返回值當(dāng)順利地執(zhí)行了關(guān)閉操作,返回值為0;如果返回值為非零值,表示關(guān)閉時(shí)有錯(cuò)誤。一般只有驅(qū)動(dòng)器中無盤或盤空間不夠時(shí)才失敗,關(guān)閉失敗會(huì)引起數(shù)據(jù)丟失、文件的破壞和程序中的隨機(jī)錯(cuò)誤。15精選課件ppt13.2文件的打開和關(guān)閉文件的關(guān)閉(fclose()函數(shù))1例:文件的打開和關(guān)閉#include<stdio.h>voidmain(){ FILE*fp; if((fp=fopen("test.txt","r"))==NULL) { printf("Failuretoopendemo.txt!\n"); exit(0); } fclose(fp);}16精選課件ppt例:文件的打開和關(guān)閉16精選課件ppt13.3按字符讀寫文件字符讀寫intfgetc(FILE*fp);從fp讀出一個(gè)字符,將位置指針指向下一個(gè)字符若讀成功,則返回該字符,若讀到文件尾,則返回EOF(EOF是一個(gè)符號(hào)常量,在stdio.h中定義為-1)intfputc(intc,FILE*fp);向fp輸出字符c若寫入錯(cuò)誤,則返回EOF,否則返回c17精選課件ppt13.3按字符讀寫文件字符讀寫17精選課件ppt13.3按字符讀寫文件【例13.1】從鍵盤鍵入一串字符,轉(zhuǎn)存到磁盤文件上為什么要判斷文件打開是否成功呢?#include<stdio.h>#include<stdlib.h>voidmain(){ FILE*fp; charch; if((fp=fopen("demo.txt","w"))==NULL) { printf("Failuretoopendemo.txt!\n"); exit(0); } ch=getchar(); while(ch!='\n') { fputc(ch,fp); ch=getchar(); } fclose(fp);}18精選課件ppt13.3按字符讀寫文件【例13.1】從鍵盤鍵入一串字符,轉(zhuǎn)#include<stdio.h>#include<stdlib.h>voidmain(){ FILE*fp; charch; inti; if((fp=fopen("demo.bin","wb"))==NULL) { printf("Failuretoopendemo.bin!\n"); exit(0); } for(i=0;i<128;i++) fputc(i,fp); fclose(fp); if((fp=fopen("demo.bin","rb"))==NULL) {printf("Failuretoopendemo.bin!\n"); exit(0); } while((ch=fgetc(fp))!=EOF) putchar(ch); fclose(fp);}【例13.2】將0~127之間的ASCII字符寫到文件中,然后從文件中讀出并顯示到屏幕上函數(shù)feof()檢查是否到達(dá)文件尾,當(dāng)文件位置指針指向文件尾時(shí),返回非0值,否則返回0值19精選課件ppt#include<stdio.h>【例13.2】將0~【例13.3】修改例13.2,從文件中讀出字符時(shí),判斷是否為可打印字符,若是則顯示該字符,否則顯示其十進(jìn)制ASCII碼值while((ch=fgetc(fp))!=EOF)if(isprint(ch)) printf("%c\t",ch);else printf("%d\t",ch);20精選課件ppt【例13.3】修改例13.2,從文件中讀出字符時(shí),判斷是例:復(fù)制文件#include<stdlib.h>#include<stdio.h>voidmain(){ FILE*in,*out; charin],out]; printf("Enterthein:\n"); scanf("%s",infile); printf("Entertheout:\n"); scanf("%s",outfile); if((in=fopen(infile,"rb"))==NULL) { printf("cannotopeninfile\n"); exit(0); } if((out=fopen(outfile,"wb"))==NULL) { printf("cannotopenoutfile\n"); exit(0); } while(!feof(in)) fputc(fgetc(in),out); fclose(in); fclose(out);}21精選課件ppt例:復(fù)制文件#include<stdlib.h>21精選課例:復(fù)制文件,利用命令行參數(shù)輸入兩個(gè)文件名#include<stdlib.h>#include<stdio.h>main(intargc,char*argv[]){ FILE*in,*out; if(argc!=3) { printf("Youforgottoentera\n"); exit(0); } if((in=fopen(argv[1],"rb"))==NULL) { printf("cannotopeninfile\n"); exit(0); } if((out=fopen(argv[2],"wb"))==NULL) { printf("cannotopenoutfile\n"); exit(0); } while(!feof(in)) fputc(fgetc(in),out); fclose(in); fclose(out);}22精選課件ppt例:復(fù)制文件,利用命令行參數(shù)輸入兩個(gè)文件名#include13.5按數(shù)據(jù)塊讀寫文件按數(shù)據(jù)塊讀寫從fp所指的文件中讀取數(shù)據(jù)塊并存儲(chǔ)到buffer指向的內(nèi)存中buffer是待讀入數(shù)塊據(jù)的起始地址size是每個(gè)數(shù)據(jù)塊的大小(待讀入的每個(gè)數(shù)據(jù)塊的字節(jié)數(shù))count是最多允許讀取的數(shù)據(jù)塊個(gè)數(shù)(每個(gè)數(shù)據(jù)塊size個(gè)字節(jié))返回實(shí)際讀到的數(shù)據(jù)塊個(gè)數(shù)將buffer指向的內(nèi)存中的數(shù)據(jù)塊寫入fp所指的文件23精選課件ppt13.5按數(shù)據(jù)塊讀寫文件按數(shù)據(jù)塊讀寫23精選課件ppt使用舉例:若文件以二進(jìn)制形式打開:
fread(f,4,2,fp);
此函數(shù)從fp所指向的文件中讀入2個(gè)4個(gè)字節(jié)的數(shù)據(jù),存儲(chǔ)到指針f所指向的空間中。24精選課件ppt使用舉例:24精選課件ppt使用舉例:若有如下結(jié)構(gòu)類型:structstudent_type{charname[10];intnum;intage;charaddr[30];}stud[40];可以用fread和fwrite來進(jìn)行數(shù)據(jù)的操作:for(i=0;i<40;i++)
fread(&stud[i],sizeof(structstudent_type),1,fp);
for(i=0;i<40,i++)fwrite(&stud[i],sizeof(structstudent_type),1,fp);
fread(stud,sizeof(structstudent_type),40,fp);fwrite(stud,sizeof(structstudent_type),40,fp);25精選課件ppt使用舉例:fread(stud,sizeof(struct例從鍵盤輸入4個(gè)學(xué)生的有關(guān)數(shù)據(jù),然后把它們轉(zhuǎn)存到磁盤文件上去。#include<stdio.h>#defineSIZE4typedefstructstudent_type{ charname[10]; intnum; intage; charaddr[15];}STUDENT;voidmain(){ voidsave(STUDENTstud[]); STUDENTstud[SIZE];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(stud);}26精選課件ppt例從鍵盤輸入4個(gè)學(xué)生的有關(guān)數(shù)據(jù),然后把它們轉(zhuǎn)存到磁盤文件上voidsave(STUDENTstud[]){ FILE*fp; inti; if((fp=fopen("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("error\n"); fclose(fp);}27精選課件pptvoidsave(STUDENTstud[])27精選課例驗(yàn)證上面程序生成的stu_list文件是否存在,從文件中讀出數(shù)據(jù)并顯示在屏幕上。#include<stdio.h>#defineSIZE4structstudent{ charname[10]; intnum; intage; charaddr[15];};voidmain(){ structstudentstud; inti; FILE*fp; if((fp=fopen("stu_list","rb"))==NULL) { printf("打開文件錯(cuò)誤!\n");return; } for(i=0;i<SIZE;i++) { fread(&stud,sizeof(structstudent),1,fp); printf("%-10s%4d%4d%15s\n",,stud.num,stud.age,stud.addr); }fclose(fp);}28精選課件ppt例驗(yàn)證上面程序生成的stu_list文件是否存在,從文件中
【例13.7】在例12.7基礎(chǔ)上,計(jì)算每個(gè)學(xué)生的4門課程的平均分,將學(xué)生的各科成績(jī)及平均分輸出到文件student.txt中,然后再?gòu)奈募凶x出數(shù)據(jù)并顯示到屏幕上29精選課件ppt【例13.7】在例12.7基礎(chǔ)上,計(jì)算每個(gè)學(xué)生的4門課程的【例13.7】在例12.7基礎(chǔ)上,計(jì)算每個(gè)學(xué)生的4門課程的平均分,將學(xué)生的各科成績(jī)及平均分輸出到文件student.txt中,然后再?gòu)奈募凶x出數(shù)據(jù)并顯示到屏幕上30精選課件ppt【例13.7】在例12.7基礎(chǔ)上,計(jì)算每個(gè)學(xué)生的4門課程的【例13.7】在例12.7基礎(chǔ)上,計(jì)算每個(gè)學(xué)生的4門課程的平均分,將學(xué)生的各科成績(jī)及平均分輸出到文件student.txt中,然后再?gòu)奈募凶x出數(shù)據(jù)并顯示到屏幕上31精選課件ppt【例13.7】在例12.7基礎(chǔ)上,計(jì)算每個(gè)學(xué)生的4門課程的【例13.7】在例12.7基礎(chǔ)上,計(jì)算每個(gè)學(xué)生的4門課程的平均分,將學(xué)生的各科成績(jī)及平均分輸出到文件student.txt中,然后再?gòu)奈募凶x出數(shù)據(jù)并顯示到屏幕上32精選課件ppt【例13.7】在例12.7基礎(chǔ)上,計(jì)算每個(gè)學(xué)生的4門課程的【例13.7】在例12.7基礎(chǔ)上,計(jì)算每個(gè)學(xué)生的4門課程的平均分,將學(xué)生的各科成績(jī)及平均分輸出到文件student.txt中,然后再?gòu)奈募凶x出數(shù)據(jù)并顯示到屏幕上33精選課件ppt【例13.7】在例12.7基礎(chǔ)上,計(jì)算每個(gè)學(xué)生的4門課程的【例13.7】在例12.7基礎(chǔ)上,計(jì)算每個(gè)學(xué)生的4門課程的平均分,將學(xué)生的各科成績(jī)及平均分輸出到文件student.txt中,然后再?gòu)奈募凶x出數(shù)據(jù)并顯示到屏幕上34精選課件ppt【例13.7】在例12.7基礎(chǔ)上,計(jì)算每個(gè)學(xué)生的4門課程的13.3按字符讀寫文件字符串讀寫char*fgets(char*s,intn,FILE*fp);從fp所指的文件中讀取字符串并在字符串末尾添加'\0',然后存入s,最多讀n-1個(gè)字符當(dāng)讀到回車換行符、文件末尾或讀滿n-1個(gè)字符時(shí)函數(shù)返回該字符串的首地址intfputs(const
char*s,FILE*fp);將字符串寫入文件中若出現(xiàn)寫入錯(cuò)誤,則返回EOF,否則返回一個(gè)非負(fù)數(shù)35精選課件ppt13.3按字符讀寫文件字符串讀寫35精選課件ppt13.4按格式讀寫文件格式化讀寫intfscanf(FILE*fp,const
char*format,...);fscanf(fp,"%d,%f",&i,&t);第1個(gè)參數(shù)為文件指針,第2個(gè)參數(shù)為格式控制參數(shù),第3個(gè)參數(shù)為地址參數(shù)表列intfprintf(FILE*fp,const
char*format,...);fprintf(fp,"%d,%6.2f",i,t);第1個(gè)參數(shù)為文件指針,第2個(gè)參數(shù)為格式控制參數(shù),第3個(gè)參數(shù)為輸出參數(shù)表列36精選課件ppt13.4按格式讀寫文件格式化讀寫36精選課件ppt文件讀寫函數(shù):分類函數(shù)名功能 打開文件fopen()打開文件關(guān)閉文件fclose()關(guān)閉文件文件讀寫fgetc()從指定文件取得一個(gè)字符
fputc()把字符輸出到指定文件
fgets()從指定文件讀取字符串
fputs()把字符串輸出到指定文件
fread()從指定文件中讀取數(shù)據(jù)項(xiàng)
fwrite()把數(shù)據(jù)項(xiàng)寫到指定文件中
fscanf()從指定文件按格式輸入數(shù)據(jù)
fprintf()按指定格式將數(shù)據(jù)寫到指定文件中37精選課件ppt文件讀寫函數(shù):分類函數(shù)名13.6擴(kuò)充內(nèi)容13.6.1文件的隨機(jī)讀寫fseek()
改變文件位置指針的位置rewind()
使文件位置指針重新置于文件開頭ftell()
返回文件位置指針的當(dāng)前值38精選課件ppt13.6擴(kuò)充內(nèi)容13.6.1文件的隨機(jī)讀寫fseek()rewind函數(shù):使位置指針重新返回文件的開頭,無返回值。
例有一個(gè)磁盤文件,第一次將它的內(nèi)容顯示在屏幕上,第二次把它復(fù)制到另一文件上。#include<stdio.h>voidmain(){ FILE*fp1,*fp2; fp1=fopen("","r"); fp2=fopen("","w"); while(!feof(fp1))putchar(fgetc(fp1)); rewind(fp1); while(!feof(fp1)) fputc(fgetc(fp1),fp2); fclose(fp1);fclose(fp2);}39精選課件pptrewind函數(shù):例有一個(gè)磁盤文件,第一次將它的內(nèi)容顯示在fseek函數(shù)函數(shù)功能:改變文件的位置指針。函數(shù)調(diào)用形式:fseek(文件類型指針,位移量,起始點(diǎn))起始點(diǎn):文件開頭SEEK_SET0
文件當(dāng)前位置SEEK_CUR1
文件末尾SEEK_END2位移量:以起始點(diǎn)為基點(diǎn),向前移動(dòng)的字節(jié)數(shù)。一般要求為long型。
40精選課件pptfseek函數(shù)40精選課件pptfseek函數(shù)應(yīng)用舉例fseek(fp,100L,0);將位置指針移到離文件頭100個(gè)字節(jié)處。fseek(fp,50L,1);將位置指針移到離當(dāng)前位置50個(gè)字節(jié)處。fseek(fp,-10L,2);將位置指針從文件末尾處向后退10個(gè)字節(jié)。
41精選課件pptfseek函數(shù)應(yīng)用舉例41精選課件ppt#include<stdlib.h>#include<stdio.h>structstudent_type{ charname[10]; intnum; intage; charsex;}stud;voidmain(){ inti; FILE*fp; if((fp=fopen("stud_dat","rb"))==NULL) {printf("cannotopenfile\n");exit(0);} for(i=0;i<10;i+=2) {
fseek(fp,i*sizeof(structstudent_type),0);
fread(&stud,sizeof(structstudent_type),1,fp);
printf("%s%d%d%c\n",,stud.num,stud.age,stud.sex); } fclose(fp);}例在磁盤文件上存有10個(gè)學(xué)生的數(shù)據(jù)。要求將第1、3、5、7、9個(gè)學(xué)生數(shù)據(jù)輸入計(jì)算機(jī),并在屏幕上顯示出來。
42精選課件ppt#include<stdlib.h>例在磁盤文件上存有1ftell函數(shù)函數(shù)作用:得到流式文件中的當(dāng)前位置,用相對(duì)于文件開頭的位移量來表示。返回值:返回當(dāng)前位置,出錯(cuò)時(shí)返回-1L。應(yīng)用舉例:i=ftell(fp);if(i==-1L)printf(“error\n”);
43精選課件ppt43精選課件ppt第13章文件操作44精選課件ppt第13章文件操作1精選課件ppt內(nèi)容提要
二進(jìn)制文件和文本文件
文件的打開和關(guān)閉文件的順序讀寫與隨機(jī)讀寫45精選課件ppt內(nèi)容提要二進(jìn)制文件和文本文件2精選課件pptVonJ.Neumannarchitecture輸入/輸出設(shè)備存儲(chǔ)器運(yùn)算器控制器程序和輸入數(shù)據(jù)輸出結(jié)果取出數(shù)據(jù)存入數(shù)據(jù)操作命令存取命令取出程序指令輸入輸出命令計(jì)算結(jié)果CPU大腦記憶裝置(Memory)眼睛和耳朵(I/Odevices)Wheretoputdataincomputer?
Howtoinputoroutputdata?
46精選課件pptVonJ.Neumannarchitecture存儲(chǔ)器I/O設(shè)備輸入設(shè)備鍵盤、鼠標(biāo)軟盤、硬盤、光驅(qū)(以文件的形式)掃描儀、視頻采集卡、電視卡、游戲桿、話筒……輸出設(shè)備顯示器、打印機(jī)軟盤、硬盤、CD/DVD-RW(以文件的形式)音箱……47精選課件pptI/O設(shè)備輸入設(shè)備4精選課件ppt內(nèi)存:程序運(yùn)行時(shí)申請(qǐng),程序結(jié)束時(shí)釋放,無法保存數(shù)據(jù),數(shù)據(jù)會(huì)隨著程序的結(jié)束而丟失。#include<stdio.h>structstudent{ intnum; charname[10]; floatscore[3];};voidmain(){structstudentstu[3];inti;printf("請(qǐng)輸入學(xué)生信息\n");for(i=0;i<3;i++)scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);for(i=0;i<3;i++)printf("%d%s%.2f%.2f%.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]); }48精選課件ppt內(nèi)存:程序運(yùn)行時(shí)申請(qǐng),程序結(jié)束時(shí)釋放,無法保存數(shù)據(jù),數(shù)據(jù)會(huì)隨如何在程序結(jié)束后依然保留數(shù)據(jù)?
以文件的形式放在外存上文件:存儲(chǔ)在外存上有名字的一組相關(guān)數(shù)據(jù)的集合49精選課件ppt如何在程序結(jié)束后依然保留數(shù)據(jù)?以文件的形式放在外存上文件:存文件的存放(Storage)可以建立若干文件目錄(directory\folder文件夾)在目錄里保存文件同一級(jí)目錄里保存的文件不能同名對(duì)使用者而言,只要知道文件的路徑(path,全目錄)和文件名,就能使用該文件C:\home\Sunner\main.c這都是托OS的福50精選課件ppt文件的存放(Storage)可以建立若干文件目錄(direc13.1二進(jìn)制文件和文本文件
二進(jìn)制文件是一種字節(jié)序列,沒有字符變換按照數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式(二進(jìn)制)存儲(chǔ)到文件如短整數(shù)123,在內(nèi)存占2個(gè)字節(jié),則文件中也占2個(gè)字節(jié)文本文件/ASCII碼文件是一種字符序列,文件中存儲(chǔ)每個(gè)字符的ASCII碼如整數(shù)123在文件中占3個(gè)字節(jié),分別存放這3個(gè)字符的ASCII碼如果存整數(shù)1234呢?51精選課件ppt13.1二進(jìn)制文件和文本文件二進(jìn)制文件如果存整數(shù)1234呢ASCII文件和二進(jìn)制文件的比較:ASCII文件便于對(duì)字符進(jìn)行逐個(gè)處理,也便于輸出字符。但一般占存儲(chǔ)空間較多,而且要花費(fèi)轉(zhuǎn)換時(shí)間。二進(jìn)制文件可以節(jié)省外存空間和轉(zhuǎn)換時(shí)間,但一個(gè)字節(jié)并不對(duì)應(yīng)一個(gè)字符,不能直接輸出字符形式。一般中間結(jié)果數(shù)據(jù)需要暫時(shí)保存在外存上,以后又需要輸入內(nèi)存的,常用二進(jìn)制文件保存。52精選課件pptASCII文件和二進(jìn)制文件的比較:9精選課件ppt文件的格式(FormatofFiles)數(shù)據(jù)必須按照存入的類型讀出,才能恢復(fù)其本來面貌公開的標(biāo)準(zhǔn)格式如bmp、tif、gif、jpg和mp3等類型的文件,有大量軟件能生成和使用這些類型的文件不公開或加密的文件格式如MicrosoftWord的doc格式就不公開,所以至今沒有Word以外的其它軟件能完美地讀出doc文件
53精選課件ppt文件的格式(FormatofFiles)數(shù)據(jù)必須按照存入所有有關(guān)文件的操作都離不開文件指針用文件指針代表一個(gè)文件,對(duì)文件的操作都是通過相應(yīng)文件的文件指針來完成文件指針是C為我們提供的一種文件類型的指針變量,它的具體定義方法是
FILE*fp;有了這樣的定義之后,fp就可以指向一個(gè)文件54精選課件ppt所有有關(guān)文件的操作都離不開文件指針11精選課件ppt文件指針()#include<stdio.h>FILE
*fp;typedef
struct{
shortlevel;/*緩沖區(qū)‘滿’或‘空’的程度*/
unsignedflags;/*文件狀態(tài)標(biāo)志*/
charfd;/*文件描述符*/
unsignedcharhold;/*如無緩沖區(qū)不讀字符*/
shortbsize;/*緩沖區(qū)的大小*/
unsignedchar*buffer;/*數(shù)據(jù)緩沖區(qū)的位置*/
unsignedchar*curp;/*指針當(dāng)前的指向*/
unsignedistemp;/*臨時(shí)文件指示器*/
shorttoken;/*用于有效性檢查*/}FILE;/*在stdio.h文件中定義*/對(duì)文件的操作都是通過各種函數(shù)來實(shí)現(xiàn)的55精選課件ppt文件指針()#include<stdio.h>typede13.2文件的打開和關(guān)閉文件的打開(fopen()函數(shù))FILE*fopen(const
char*,const
char*mode);FILE*fp=fopen("C:\\CONFIG.SYS","rw");是文件名包含路徑。如果不含路徑,表示打開當(dāng)前目錄下的文件mode是打開方式常用為"r"、"w"、"rw"和"a",分別表示只讀、只寫、讀寫和添加"rb"表示只讀二進(jìn)制文件返回值為指向此文件的指針,留待以后使用如果打開失敗,返回值為NULL56精選課件ppt13.2文件的打開和關(guān)閉文件的打開(fopen()函數(shù))13文件打開方式(mode):對(duì)應(yīng)二進(jìn)制文件對(duì)應(yīng)文本文件“r”
只讀必須是已存在的文件?!皐”
只寫不論該文件是否存在,都新建一個(gè)文件。“a”
追加向文本文件尾增加數(shù)據(jù),該文件必須存在“r+”
讀寫打開一個(gè)已存在的文件,用于讀寫?!皐+”讀寫建立一個(gè)新文件,可讀可寫?!癮+”
讀寫向文件尾追加數(shù)據(jù),也可讀?!皉b”
“wb”“ab”“rb+”“wb+”“ab+”57精選課件ppt文件打開方式(mode):對(duì)應(yīng)二進(jìn)制文件對(duì)應(yīng)文本文件“r”13.2文件的打開和關(guān)閉文件的關(guān)閉(fclose()函數(shù))intfclose(FILE*fp);使文件指針變量和文件脫鉤,釋放文件所占的緩沖區(qū)fclose函數(shù)的返回值當(dāng)順利地執(zhí)行了關(guān)閉操作,返回值為0;如果返回值為非零值,表示關(guān)閉時(shí)有錯(cuò)誤。一般只有驅(qū)動(dòng)器中無盤或盤空間不夠時(shí)才失敗,關(guān)閉失敗會(huì)引起數(shù)據(jù)丟失、文件的破壞和程序中的隨機(jī)錯(cuò)誤。58精選課件ppt13.2文件的打開和關(guān)閉文件的關(guān)閉(fclose()函數(shù))1例:文件的打開和關(guān)閉#include<stdio.h>voidmain(){ FILE*fp; if((fp=fopen("test.txt","r"))==NULL) { printf("Failuretoopendemo.txt!\n"); exit(0); } fclose(fp);}59精選課件ppt例:文件的打開和關(guān)閉16精選課件ppt13.3按字符讀寫文件字符讀寫intfgetc(FILE*fp);從fp讀出一個(gè)字符,將位置指針指向下一個(gè)字符若讀成功,則返回該字符,若讀到文件尾,則返回EOF(EOF是一個(gè)符號(hào)常量,在stdio.h中定義為-1)intfputc(intc,FILE*fp);向fp輸出字符c若寫入錯(cuò)誤,則返回EOF,否則返回c60精選課件ppt13.3按字符讀寫文件字符讀寫17精選課件ppt13.3按字符讀寫文件【例13.1】從鍵盤鍵入一串字符,轉(zhuǎn)存到磁盤文件上為什么要判斷文件打開是否成功呢?#include<stdio.h>#include<stdlib.h>voidmain(){ FILE*fp; charch; if((fp=fopen("demo.txt","w"))==NULL) { printf("Failuretoopendemo.txt!\n"); exit(0); } ch=getchar(); while(ch!='\n') { fputc(ch,fp); ch=getchar(); } fclose(fp);}61精選課件ppt13.3按字符讀寫文件【例13.1】從鍵盤鍵入一串字符,轉(zhuǎn)#include<stdio.h>#include<stdlib.h>voidmain(){ FILE*fp; charch; inti; if((fp=fopen("demo.bin","wb"))==NULL) { printf("Failuretoopendemo.bin!\n"); exit(0); } for(i=0;i<128;i++) fputc(i,fp); fclose(fp); if((fp=fopen("demo.bin","rb"))==NULL) {printf("Failuretoopendemo.bin!\n"); exit(0); } while((ch=fgetc(fp))!=EOF) putchar(ch); fclose(fp);}【例13.2】將0~127之間的ASCII字符寫到文件中,然后從文件中讀出并顯示到屏幕上函數(shù)feof()檢查是否到達(dá)文件尾,當(dāng)文件位置指針指向文件尾時(shí),返回非0值,否則返回0值62精選課件ppt#include<stdio.h>【例13.2】將0~【例13.3】修改例13.2,從文件中讀出字符時(shí),判斷是否為可打印字符,若是則顯示該字符,否則顯示其十進(jìn)制ASCII碼值while((ch=fgetc(fp))!=EOF)if(isprint(ch)) printf("%c\t",ch);else printf("%d\t",ch);63精選課件ppt【例13.3】修改例13.2,從文件中讀出字符時(shí),判斷是例:復(fù)制文件#include<stdlib.h>#include<stdio.h>voidmain(){ FILE*in,*out; charin],out]; printf("Enterthein:\n"); scanf("%s",infile); printf("Entertheout:\n"); scanf("%s",outfile); if((in=fopen(infile,"rb"))==NULL) { printf("cannotopeninfile\n"); exit(0); } if((out=fopen(outfile,"wb"))==NULL) { printf("cannotopenoutfile\n"); exit(0); } while(!feof(in)) fputc(fgetc(in),out); fclose(in); fclose(out);}64精選課件ppt例:復(fù)制文件#include<stdlib.h>21精選課例:復(fù)制文件,利用命令行參數(shù)輸入兩個(gè)文件名#include<stdlib.h>#include<stdio.h>main(intargc,char*argv[]){ FILE*in,*out; if(argc!=3) { printf("Youforgottoentera\n"); exit(0); } if((in=fopen(argv[1],"rb"))==NULL) { printf("cannotopeninfile\n"); exit(0); } if((out=fopen(argv[2],"wb"))==NULL) { printf("cannotopenoutfile\n"); exit(0); } while(!feof(in)) fputc(fgetc(in),out); fclose(in); fclose(out);}65精選課件ppt例:復(fù)制文件,利用命令行參數(shù)輸入兩個(gè)文件名#include13.5按數(shù)據(jù)塊讀寫文件按數(shù)據(jù)塊讀寫從fp所指的文件中讀取數(shù)據(jù)塊并存儲(chǔ)到buffer指向的內(nèi)存中buffer是待讀入數(shù)塊據(jù)的起始地址size是每個(gè)數(shù)據(jù)塊的大小(待讀入的每個(gè)數(shù)據(jù)塊的字節(jié)數(shù))count是最多允許讀取的數(shù)據(jù)塊個(gè)數(shù)(每個(gè)數(shù)據(jù)塊size個(gè)字節(jié))返回實(shí)際讀到的數(shù)據(jù)塊個(gè)數(shù)將buffer指向的內(nèi)存中的數(shù)據(jù)塊寫入fp所指的文件66精選課件ppt13.5按數(shù)據(jù)塊讀寫文件按數(shù)據(jù)塊讀寫23精選課件ppt使用舉例:若文件以二進(jìn)制形式打開:
fread(f,4,2,fp);
此函數(shù)從fp所指向的文件中讀入2個(gè)4個(gè)字節(jié)的數(shù)據(jù),存儲(chǔ)到指針f所指向的空間中。67精選課件ppt使用舉例:24精選課件ppt使用舉例:若有如下結(jié)構(gòu)類型:structstudent_type{charname[10];intnum;intage;charaddr[30];}stud[40];可以用fread和fwrite來進(jìn)行數(shù)據(jù)的操作:for(i=0;i<40;i++)
fread(&stud[i],sizeof(structstudent_type),1,fp);
for(i=0;i<40,i++)fwrite(&stud[i],sizeof(structstudent_type),1,fp);
fread(stud,sizeof(structstudent_type),40,fp);fwrite(stud,sizeof(structstudent_type),40,fp);68精選課件ppt使用舉例:fread(stud,sizeof(struct例從鍵盤輸入4個(gè)學(xué)生的有關(guān)數(shù)據(jù),然后把它們轉(zhuǎn)存到磁盤文件上去。#include<stdio.h>#defineSIZE4typedefstructstudent_type{ charname[10]; intnum; intage; charaddr[15];}STUDENT;voidmain(){ voidsave(STUDENTstud[]); STUDENTstud[SIZE];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(stud);}69精選課件ppt例從鍵盤輸入4個(gè)學(xué)生的有關(guān)數(shù)據(jù),然后把它們轉(zhuǎn)存到磁盤文件上voidsave(STUDENTstud[]){ FILE*fp; inti; if((fp=fopen("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("error\n"); fclose(fp);}70精選課件pptvoidsave(STUDENTstud[])27精選課例驗(yàn)證上面程序生成的stu_list文件是否存在,從文件中讀出數(shù)據(jù)并顯示在屏幕上。#include<stdio.h>#defineSIZE4structstudent{ charname[10]; intnum; intage; charaddr[15];};voidmain(){ structstudentstud; inti; FILE*fp; if((fp=fopen("stu_list","rb"))==NULL) { printf("打開文件錯(cuò)誤!\n");return; } for(i=0;i<SIZE;i++) { fread(&stud,sizeof(structstudent),1,fp); printf("%-10s%4d%4d%15s\n",,stud.num,stud.age,stud.addr); }fclose(fp);}71精選課件ppt例驗(yàn)證上面程序生成的stu_list文件是否存在,從文件中
【例13.7】在例12.7基礎(chǔ)上,計(jì)算每個(gè)學(xué)生的4門課程的平均分,將學(xué)生的各科成績(jī)及平均分輸出到文件student.txt中,然后再?gòu)奈募凶x出數(shù)據(jù)并顯示到屏幕上72精選課件ppt【例13.7】在例12.7基礎(chǔ)上,計(jì)算每個(gè)學(xué)生的4門課程的【例13.7】在例12.7基礎(chǔ)上,計(jì)算每個(gè)學(xué)生的4門課程的平均分,將學(xué)生的各科成績(jī)及平均分輸出到文件student.txt中,然后再?gòu)奈募凶x出數(shù)據(jù)并顯示到屏幕上73精選課件ppt【例13.7】在例12.7基礎(chǔ)上,計(jì)算每個(gè)學(xué)生的4門課程的【例13.7】在例12.7基礎(chǔ)上,計(jì)算每個(gè)學(xué)生的4門課程的平均分,將學(xué)生的各科成績(jī)及平均分輸出到文件student.txt中,然后再?gòu)奈募凶x出數(shù)據(jù)并顯示到屏幕上74精選課件ppt【例13.7】在例12.7基礎(chǔ)上,計(jì)算每個(gè)學(xué)生的4門課程的【例13.7】在例12.7基礎(chǔ)上,計(jì)算每個(gè)學(xué)生的4門課程的平均分,將學(xué)生的各科成績(jī)及平均分輸出到文件student.txt中,然后再?gòu)奈募凶x出數(shù)據(jù)并顯示到屏幕上75精選課件ppt【例13.7】在例12.7基礎(chǔ)上,計(jì)算每個(gè)學(xué)生的4門課程的【例13.7】在例12.7基礎(chǔ)上,計(jì)算每個(gè)學(xué)生的4門課程的平均分,將學(xué)生的各科成績(jī)及平均分輸出到文件student.txt中,然后再?gòu)奈募凶x出數(shù)據(jù)并顯示到屏幕上76精選課件ppt【例13.7】在例12.7基礎(chǔ)上,計(jì)算每個(gè)學(xué)生的4門課程的【例13.7】在例12.7基礎(chǔ)上,計(jì)算每個(gè)學(xué)生的4門課程的平均分,將學(xué)生的各科成績(jī)及平均分輸出到文件student.txt中,然后再?gòu)奈募凶x出數(shù)據(jù)并顯示到屏幕上77精選課件ppt【例13.7】在例12.7基礎(chǔ)上,計(jì)算每個(gè)學(xué)生的4門課程的13.3按字符讀寫文件字符串讀寫char*fgets(char*s,intn,FILE*fp);從fp所指的文件中讀取字符串并在字符串末尾添加'\0',然后存入s,最多讀n-1個(gè)字符當(dāng)讀到回車換行符、文件末尾或讀滿n-1個(gè)字符時(shí)函數(shù)返回該字符串的首地址intfputs(const
char*s,FILE*fp);將字符串寫入文件中若出現(xiàn)寫入錯(cuò)誤,則返回EOF,否則返回一個(gè)非負(fù)數(shù)78精選課件ppt13.3按字符讀寫文件字符串讀寫35精選課件ppt13.4按格式讀寫文件格式化讀寫intfscanf(FILE*fp,const
char*format,...);fscanf(fp,"%d,%f",&i,&t);第1個(gè)參數(shù)為文件指針,第2個(gè)參數(shù)為格式控制參數(shù),第3個(gè)參數(shù)為地址參數(shù)表列intfprintf(FILE*fp,const
char*format,...);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 心理輔導(dǎo)與教學(xué)質(zhì)量并重的教學(xué)模式探索
- 2025年鄉(xiāng)村振興戰(zhàn)略中職業(yè)技能培訓(xùn)的農(nóng)村勞動(dòng)力素質(zhì)提升策略研究
- 2025年中國(guó)臺(tái)式電腦捆鈔機(jī)行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年中國(guó)不銹鋼切削液行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年中國(guó)2-辛酮行業(yè)投資前景及策略咨詢研究報(bào)告
- 教育技術(shù)投資的風(fēng)險(xiǎn)評(píng)估與決策
- 少兒編程教育教育數(shù)字化轉(zhuǎn)型的挑戰(zhàn)與前景
- 江蘇省常州市2024-2025學(xué)年高二下學(xué)期4月期中物理試題(含答案)
- 2025年安徽省滁州市天長(zhǎng)市中考三模化學(xué)試題(含答案)
- 統(tǒng)編版2024-2025學(xué)年一年級(jí)語文下冊(cè)期末試卷(含答案)
- 鄉(xiāng)村醫(yī)生從業(yè)管理?xiàng)l例
- 北京第八十中學(xué)英語新初一分班試卷
- 酒店OTA學(xué)習(xí)三部曲(側(cè)重?cái)y程)
- 【園林測(cè)量】試題及答案
- 潮汕方言語音的內(nèi)部差異及其成因
- 人教版小學(xué)語文一年級(jí)到六年級(jí)課本古詩
- 2023年氣象服務(wù)行業(yè)市場(chǎng)突圍建議及需求分析報(bào)告
- 四年級(jí)下冊(cè)健康成長(zhǎng)教案
- 手太陰肺經(jīng)課件-
- 分包工程驗(yàn)收?qǐng)?bào)告
- 《汽車維修業(yè)開業(yè)條件》
評(píng)論
0/150
提交評(píng)論