程序設計第八章對文件輸入和輸出上課_第1頁
程序設計第八章對文件輸入和輸出上課_第2頁
程序設計第八章對文件輸入和輸出上課_第3頁
程序設計第八章對文件輸入和輸出上課_第4頁
程序設計第八章對文件輸入和輸出上課_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

基本要求掌握基本的標準設備輸入/輸出格式控制方法;掌握文本文件的讀/寫操作;考試不要用二進制方式向文件讀/寫操作文件的簡單應用fopen()函數(shù)來實現(xiàn)打開文件fclose函數(shù)函數(shù)來實現(xiàn)關閉文件

fgets函數(shù):從文件中讀入字符串fputs函數(shù):把字符串輸出到文件中fprintf函數(shù):按格式將內存中的數(shù)據(jù)轉換成對應的字符,并以ASCII形式輸出到文本文件中。文件:

在外部介質上數(shù)據(jù)的集合,有一個標識名以供區(qū)別。操作系統(tǒng)是以文件為單位對數(shù)據(jù)進行管理的.例:D:\CC\temp\file1.dat流(stream):數(shù)據(jù)從運行環(huán)境到程序,或從程序流至運行環(huán)境的傳送通道。8.1

C文件的概念文件的分類1 文本文件(ASCII碼文件):由字符組成的文件,以字符為單位存取;它的每一個字節(jié)放一個字符的ASCII碼,存放一段字符后就“換行”其內容可直接顯示8.1

C文件的概念8.1

C文件的概念2)二進制文件:由二進制數(shù)據(jù)組成,以字節(jié)為單位存取二進制文件在傳送時均采用二進制流其內容不可直接顯示二進制文件比文本文件節(jié)省外存空間和轉換時間C語言中對文件的創(chuàng)建、讀寫都是用庫函數(shù)來實現(xiàn)C語言中的文件屬于流式文件,即:把文件中的數(shù)據(jù)看作一連串的字符(或字節(jié)),而不考慮記錄的格式和界限文件緩沖區(qū)計算機系統(tǒng)專門為輸入/輸出設備開辟的一個臨時存放信息的區(qū)域。目的:提高系統(tǒng)的處理效率。8.1

C文件的概念文件程序數(shù)據(jù)區(qū)輸出文件緩沖區(qū)輸入文件緩沖區(qū)8.2文件類型指針結構類型名FILE:存放文件的有關信息,通常在stdio.h中如下定義數(shù)據(jù)類型FILE:typedef

struct{

shortlevel;unsignedflags;charfd;/*緩沖區(qū)“滿”或“空”的程度*//*文件狀態(tài)標志*//*文件描述符*/unsignedcharhold;

/*如無緩沖區(qū)不

字符*/shortbsize;unsignedchar*buffer;unsignedar*curp;unsignedistemp;/*緩沖區(qū)的大小*//*數(shù)據(jù)緩沖區(qū)的位置*//*指針,當前的指向*//*臨時文件,指示器*/shorttoken;}FILE;/*用于有效性檢查*/結構體通過文件指針變量

文件信息定義文件類型的指針變量:FILE

*fp;當一個程序開始運行時,三個事先定義的變量被初始化。FILE

*stdin;FILE

*stdout;FILE

*stderr;輸入流的文件指針,通常指鍵盤標準輸出流的文件指針,通常指屏幕輸出流的文件指針,通常指終端出錯8.2文件類型指針8.3

文件的打開和關閉對文件讀寫之前:打開文件;對文件進行讀寫;在使用結束:關閉文件。打開文件要有三件事通知系統(tǒng):打算

的文件名;怎樣使用那個文件;到什么地方去找該文件的有關信息。打開文件作用:為文件建立相應的文件信息區(qū)和文件緩沖區(qū)用fopen()函數(shù)來實現(xiàn)打開文件fopen函數(shù)的調用方式為:FILE

*fp;fp=fopen(文件名,文件存取方式);例:FILE

*fp;fp=fopen(“test.dat”,“w”);fp=fopen(“D:\temp

test.dat”,

“r”);8.3.1

文件的打開文件存取方式:“r”

(只讀read)為輸入打開一個文本文件“w”

(只寫write)為輸出打開一個文本文件“a”

(追加append)向文本文件尾增加數(shù)據(jù)“rb”

(只讀read

binary)為輸入打開一個二進制文件“wb”

(只寫write

binary)為輸出打開一個二進制文件“ab”“r+”“w+”(追加append

binary)向二進制文件尾增加數(shù)據(jù)

(讀寫)為讀/寫打開一個文本文件(讀寫)為讀/寫建立一個新的文本文件“a+”

(讀寫)為讀/寫打開一個文本文件“rb+”“wb+”“ab+”(讀寫)為讀/寫打開一個二進制文件(讀寫)為讀/寫建立一個新的二進制文件(讀寫)為讀/寫打開一個二進制文件)fopen函數(shù)的返回值有兩個:為空(NULL),表示出錯(如,打開一個并不存在的文件;磁盤出故障;磁盤已滿無法建立新文件等)打開文件失??;此時將帶回一個空指針。為非空,表示打開文件成功。8.3.1

文件的打開一種常用的打開文件的方法:if((fp=fopen(“file1”,

“r”))==NULL){

printf(“Can

not

open

this

file\n”);exit(0);}關閉所有文件,終止正在執(zhí)行的程序一些C編譯系統(tǒng)可能不完全提供所有的文件存取模式(只能用“r”、“w”、“a”),有的C版本不用“r+”、“w+”、“a+”而用“rw”、“wr”、“ar”等。8.3.1

文件的打開用fclose函數(shù)來關閉文件文件處理即告結束,并

所有與之有關的資源調用fclose函數(shù):fclose(文件指針);例如:fclose(fp);如果已經(jīng)對該文件進行了寫操作,在文件關閉前把緩沖區(qū)中的數(shù)據(jù)自動寫回到該文件中,

緩沖區(qū)。fclose函數(shù)返回值:當成功地執(zhí)行了關閉操作,則返回值是0;返回值非0,表示關閉文件時發(fā)生了錯誤。8.3.2

文件的關閉8.4

文件的讀寫fgetc和fputcfgetc從文件中讀出一個字符函數(shù)返回值:讀成功,帶回所讀的字符,失敗則返回文件結束標志它們的定義形式為:例:FILE

*fp1,*fp2;int

fgetc(fp);8.4

文件的讀寫fputc向文件中寫入一個字符函數(shù)返回值:讀成功,帶回所讀的字符,失敗則返回文件結束標志它們的定義形式為:例:int

fputc(c,f)char

c;FILE

*f;fgets和fputsfgets函數(shù):從文件中讀入字符串,調用形式如下:

fgets(str,n,fp);從fp所指文件中讀入n-1個字符放入str為起始地址的空間內;如果在未讀滿n-1個字符時,已讀到一個換行符或一個EOF,則結束本次讀操作。讀入結束后,系統(tǒng)將自動在最后加‘\0’,并返回str的值。失敗則返回NULL存放字符串的起始地址int

類型變量

文件指針8.4

文件的讀寫fputs函數(shù):把字符串輸出到文件中調用形式如下:fputs(str,fp);str可以是字符串常量、指向字符串的指針、存放字符串的字符數(shù)組名;字符串中最后的‘\0’并不輸出,也不自動加‘\n’;輸出成功,函數(shù)返回值為0,否則為非0。待輸出的字符串文件指針8.4

文件的讀寫fscanf和fprintffscanf函數(shù)只能從文本文件中按格式輸入調用形式:fscanf(文件指針,格式字符串,指針列表)例:fscanf(stdin,“%d%d”,&a,&b);scanf(“%d%d”,&a,&b);fprintf函數(shù)按格式將內存中的數(shù)據(jù)轉換成對應的字符,并以ASCII形式輸出到文本文件中。調用形式:fprintf(文件指針,格式字符串,輸出列表)例:fprintf(stdout,

%d

%d”,x,y);printf(“

%d

%d”,x,y);8.4

文件的讀寫rewind(fp):使fp的位置指針重新返回文件的開頭,沒有返回值。f

l:獲得文件當前位置指針的位置調用形式:long

t;t=f

l(fp);調用正確時,返回相對文件開頭的字節(jié)數(shù);出錯時,返回-1L。文件結束檢測feof(fp):測試所指向的文件當前狀態(tài)是否“文件結束”(返回值為1,否則返回值為0)。EOF標志只能判斷文本文件;feof(fp)可用于二進制和文本文件8.5

文件的定位函數(shù)ferror(fp):檢查當調用輸入輸出函數(shù)時是否出錯。若返回值為0,說明未出錯;否則出錯;同一文件的每一次輸入輸出調用,均產(chǎn)生一個新的ferror函數(shù)值。clearerr(fp):使文件錯誤標志和文件結束標志置為0。只要出現(xiàn)錯誤標志,就一直保留,直到對同一文件調用clearerr函數(shù)或rewind函數(shù),或任何其他一個輸入輸出函數(shù)8.6

文件的出錯檢測#include

<stdio.h>#include<stdlib.h>#include<string.h>int

main(){FILE

*fp;char

str[3][10],temp[10];int

i,

j,k,

n=3;printf

("Enter

strings:\n");for(i=0;i<n;i++)gets(str[i]); //由鍵盤出入字符串for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if

(strcmp(str[k],str[j])>0)k=j;if(k!=i){strcpy(temp,str[i]);strcpy(str[i],str[k]);strcpy(str[k],temp);}}書上例10.3if

((fp=fopen("ex10-8.txt","w+"))==NULL){printf("Cann't

open

file!");exit(0);}printf("\nThe

new

sequence:\n");for(i=0;i<n;i++){fputs(str[i],fp);fputs("\n",fp);printf("%s\n",str[i]);}在向文件寫數(shù)據(jù)時,只輸出字符串中的有效字符,不輸出字符串結束標志‘\0’若無此句,則文件前后兩次輸出的字符串之間無分隔,連成一片在屏幕上顯示/*

printf("%s\n",str[i]);

*/}printf(“%d\n”,i);

//以下從文件中讀回字符串,rewind(fp);

//fp的位置指針重新返回文件的開頭i=0;while(fgets(str[i],10,fp)!=NULL){printf("%s",str[i]);i++;}fclose(fp);return

0;}fgets函數(shù)遇到”\n”就結束字符串輸入,”\n”作為最后一個字符也讀入到字符數(shù)組#include

<stdio.h>#include<stdlib.h>#include<math.h>voidmain(){

FILE

*f,*f2;char

c,

*str,st[30],line;int

i; float

r;if

((f=fopen("ex10-3.txt","w"))==NULL){printf("Cann't

open

file!");

exit(0);}c='a';

i=5;

r=2.14;str="I'm

learning

C

language.";fprintf(f,"%4d",i);fprintf(f,"%4d

%6.2f\n",i+11,sqrt(9));fprintf(f,"%s\n",str);fprintf(f,"\n");fprintf(f,"i=%4d

r=%6.2f

c=%c\n",i,r,c);fclose(f);例:用格式化的方式讀寫文本文件st[24]='\0';

printf("%s",st);printf("\n");printf("\n");st[2]='\0';

printf("%s",st);printf("%4d",i);st[4]='\0';

printf("%s",st);printf("%6.2f",r)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論