C語(yǔ)言程序設(shè)計(jì)課件12 文件_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件12 文件_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件12 文件_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件12 文件_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件12 文件_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第十二章文件文件是程序設(shè)計(jì)中的一個(gè)重要概念。本章將討論C程序里的文件使用,并介紹文件讀寫函數(shù)的功能及各個(gè)參數(shù)的含義。通過本章學(xué)習(xí),使我們清楚的認(rèn)識(shí)C程序數(shù)據(jù)處理的方式,程序處理的數(shù)據(jù)從何而來,得到的結(jié)果送到哪里去?如何使用讀寫函數(shù)解決這方面的問題。本章要點(diǎn):文件的概念;文件的打開與關(guān)閉;文件讀寫函數(shù)的應(yīng)用;12.1文件概述文件是指有組織的存儲(chǔ)在外部介質(zhì)(內(nèi)存以外的存儲(chǔ)介質(zhì))上數(shù)據(jù)的集合。每一個(gè)文件必須有一個(gè)文件名,一個(gè)文件名由文件路徑、文件名主干和文件名后綴三部分組成。計(jì)算機(jī)系統(tǒng)都包括文件系統(tǒng),按文件名對(duì)文件進(jìn)行組織和存取管理。任何應(yīng)用軟件的設(shè)計(jì)及應(yīng)用,都離不開對(duì)數(shù)據(jù)的存儲(chǔ)與調(diào)用,在C語(yǔ)言應(yīng)用設(shè)計(jì)初期階段,對(duì)與數(shù)據(jù)管理正處于文件管理階段,因此C語(yǔ)言提供了強(qiáng)大的文件管理功能。在外部介質(zhì)上寫(存儲(chǔ))數(shù)據(jù),首先必須建立一個(gè)文件,然后向它寫入數(shù)據(jù)。要想獲取保存在外部介質(zhì)上的數(shù)據(jù),首先必須找到指定的文件,然后再讀取該文件中數(shù)據(jù)。在C語(yǔ)言程序中對(duì)文件名的應(yīng)用中,要注意以下幾個(gè)方面:1.用兩個(gè)反斜杠(\\)作為目錄、子目錄、文件之間的分隔,因?yàn)閱蝹€(gè)反斜杠(\)是轉(zhuǎn)義字符的起始符。如操作系統(tǒng)中的文件:d:\exam\test.txt表明文件test.txt存儲(chǔ)在d盤的exam文件夾中。在C語(yǔ)言程序使用中要寫成如下形式:d:\\exam\\test.txt2.文件名的命名,必須符合C語(yǔ)言標(biāo)識(shí)符的命名規(guī)則。文件按照內(nèi)容劃分,有數(shù)據(jù)文件、源程序文件、可執(zhí)行程序文件等,本章主要討論數(shù)據(jù)文件,根據(jù)文件中數(shù)據(jù)的組織形式,可分為ASCII文件(也稱字符文件)和二進(jìn)制文件。C語(yǔ)言把文件看作一個(gè)字節(jié)序列,即由一個(gè)一個(gè)字符(字節(jié))的數(shù)據(jù)順序組成,稱為“流(stream)”,以字節(jié)為單位存取,用程序控制輸入輸出的數(shù)據(jù)流的開始和結(jié)束,不受物理符號(hào)(如回車換行符)控制,我們將這種形式文件稱為流式文件。也就是說,C語(yǔ)言中文件并不是由記錄組成的。那么一個(gè)C語(yǔ)言文件就是一個(gè)字節(jié)流或二進(jìn)制流。C語(yǔ)言所使用的磁盤文件系統(tǒng)有兩種:一種稱為緩沖文件系統(tǒng),也稱標(biāo)準(zhǔn)文件系統(tǒng);一種稱為非緩沖文件系統(tǒng)。緩沖文件系統(tǒng)是指系統(tǒng)自動(dòng)地在內(nèi)存區(qū)為每一個(gè)正在使用的文件開辟一個(gè)緩沖區(qū)。首先從外部介質(zhì)向內(nèi)存讀入數(shù)據(jù)時(shí),一次從磁盤文件將一些數(shù)據(jù)輸入到內(nèi)存緩沖區(qū)(充滿緩沖區(qū)),然后再?gòu)木彌_區(qū)逐個(gè)地將數(shù)據(jù)送給接收程序變量,最后將文件數(shù)據(jù)輸出。由各個(gè)具體的C版本確定緩沖區(qū)的大小,由一般為512字節(jié)。非緩沖文件系統(tǒng)是指由用戶自己根據(jù)需要為每個(gè)文件設(shè)定緩沖區(qū),不由系統(tǒng)自動(dòng)設(shè)置。ANSIC只采用緩沖文件系統(tǒng),本章只介紹緩沖文件系統(tǒng)以及對(duì)它的讀寫。12.2文件的使用

在C語(yǔ)言中,對(duì)文件的讀寫都是調(diào)用庫(kù)函數(shù)實(shí)現(xiàn)的,沒有直接用于輸入輸出的關(guān)鍵字。ANSIC定義了標(biāo)準(zhǔn)輸入輸出函數(shù),進(jìn)行文件的讀寫操作。標(biāo)準(zhǔn)輸入輸出函數(shù)是通過操作FILE類型(stdio.h中定義的結(jié)構(gòu)類型)的指針(稱之為文件指針)實(shí)現(xiàn)對(duì)文件的存取。利用標(biāo)準(zhǔn)輸入輸出函數(shù)進(jìn)行文件處理的一般步驟為:1.首先打開文件,建立文件指針或文件描述符與外部文件的聯(lián)系。2.通過文件指針或文件描述符進(jìn)行讀/寫操作。3.關(guān)閉文件,切斷文件指針或文件描述符與外部文件的聯(lián)系。在程序開始運(yùn)行時(shí),系統(tǒng)會(huì)自動(dòng)打開以下三個(gè)標(biāo)準(zhǔn)流式文件:標(biāo)準(zhǔn)輸入文件(stdin),標(biāo)準(zhǔn)輸出文件(stdout),標(biāo)準(zhǔn)錯(cuò)誤文件(stderr),它們隱含指向終端設(shè)備。12.2.1文件的聲明

在緩沖文件系統(tǒng)中定義了一個(gè)“文件指針”,它是由系統(tǒng)定義的結(jié)構(gòu)體類型,并取名為FILE,所以我們也稱FILE類型指針。在TurboC中的stdio.h文件中對(duì)該結(jié)構(gòu)體類型的聲明為:typedefstruct{shortlevel;/*fill/emptylevelofbuffer*/unsignedflags;/*Filestatusflags*/charfd;/*Filedescriptor*/unsignedcharhold;/*Ungetccharifnobuffer*/shortbsize;/*Buffersize*/unsignedchar*buffer;/*Datatransferbuffer*/unsignedchar*curp;/*Currentactivepointer*/unsignedistemp;/*Temporaryfileindicator*/shorttoken;/*Usedforvaliditychecking*/}FILE;/*ThisistheFILEobject*/因這個(gè)文件類型在stdio.h文件中定義,所以首先要包含stdio.h文件,然后才能對(duì)文件進(jìn)行操作。我們通常用FILE類型來定義指針變量,通過它來訪問結(jié)構(gòu)體變量。需要多少個(gè)文件,就定義多少個(gè)變量,系統(tǒng)就會(huì)為這些變量開辟如上所述的結(jié)構(gòu)體變量。定義文件類型指針變量的一般格式為:FILE*變量名;例如:FILE*mp,*np,*tp;表示定義了mp、np、tp三個(gè)指針變量,都是指向FILE類型結(jié)構(gòu)體數(shù)據(jù)的指針變量。12.2.2文件的打開與關(guān)閉在對(duì)文件進(jìn)行讀寫操作包含這么三個(gè)步驟,首先打開文件,然后讀寫,使用結(jié)束關(guān)閉文件。ANSIC定義了標(biāo)準(zhǔn)輸入輸出函數(shù)庫(kù),用函數(shù)fopen()來打開文件,用fclose()函數(shù)來關(guān)閉文件。1.fopen()函數(shù)fopen()函數(shù)調(diào)用形式為:fopen(“文件名”,“文件操作方式”);fopen()函數(shù)功能:以指定的“文件操作方式”打開“文件名”所指向的文件。例如:(假設(shè)在操作系統(tǒng)中存在文件d:\exam\test.txt)fopen(“d:\\exam\\test.txt”,“r”);表示以“r”(只讀方式,即只能讀取文件數(shù)據(jù),不能向文件寫數(shù)據(jù))方式打開文件test.txt。說明:(1)文件名要把文件的相關(guān)信息準(zhǔn)確描述,即包含文件路徑、文件名稱和文件后綴。當(dāng)打開的文件在當(dāng)前目錄下是,文件路徑可以省略。(2)要理解每種文件操作方式的含義。如“r”打開一個(gè)文件時(shí),該文件必須已經(jīng)存在,且只能從該文件讀取數(shù)據(jù)。說明:(1)r或rb或r+或rb+或r+b操作方式只能對(duì)已經(jīng)存在的文件進(jìn)行操作,不能創(chuàng)建新文件。w或wb或w+或wb+或w+b操作方式創(chuàng)建新文件時(shí),如果文件已經(jīng)存在,將覆蓋已有數(shù)據(jù)。a或ab或a+或ab+或a+b操作方式要先檢查文件是否存在,若存在,則打開文件,若不存在則新建文件。(2)用以上方式打開二進(jìn)制文件或文本文件是ANSIC的規(guī)定,但目前有些C編譯器可能不完全提供這些功能,如有的不能用r+、w+、a+方式,有的只能用r、w、a方式等,使用C編譯器時(shí)要注意其這方面的規(guī)定。fopen()函數(shù)返回值:當(dāng)fopen()函數(shù)執(zhí)行成功,返回一個(gè)FILE類型的指針值;當(dāng)執(zhí)行失?。ú荒軐?shí)現(xiàn)打開文件任務(wù))時(shí),返回一個(gè)NULL值。不能打開文件的原因可能是磁盤故障、磁盤已滿無法建立文件、用“r”方式打開文件不存在等,我們?cè)谑褂玫倪^程中,為了檢測(cè)文件是否正常打開,通常會(huì)利用其返回值,使用下面方法打開文件。FILE*mp;mp=fopen(“d:\\exam\\test.txt”,“r”);if(mp==NULL){printf(“Failedtoopenthefile\n”);exit(0);}如果執(zhí)行fopen()函數(shù)成功,則將文件的起始地址賦值給指針變量mp;如果打開文件失敗,則將返回值NULL賦值給mp,輸出錯(cuò)誤信息提示“打開文件失敗”,然后執(zhí)行exit(0)函數(shù)。exit函數(shù)的作用是關(guān)閉所有文件,終止執(zhí)行的程序,返回操作系統(tǒng)。待對(duì)程序進(jìn)行檢查,修正錯(cuò)誤后,再運(yùn)行程序。2.fclose()函數(shù)在完成一個(gè)文件的使用后,應(yīng)該關(guān)閉它,防止文件被誤用或數(shù)據(jù)丟失,同時(shí)是及時(shí)釋放內(nèi)存,減少系統(tǒng)資源的占用。fclose()函數(shù)調(diào)用形式為:fclose(文件指針變量);fclose()函數(shù)功能:關(guān)閉文件指針變量所指向的文件,同時(shí)自動(dòng)釋放分配給此文件的緩沖區(qū)。fclose()函數(shù)返回值:如果執(zhí)行關(guān)閉文件操作成功,返回值為0;關(guān)閉失敗,則返回值為EOF(-1)。例如:關(guān)閉已打開的文件d:\exam\test.txt)FILE*mp;mp=fopen(“d:\\exam\\test.txt”,“r”);...fclose(mp);關(guān)閉mp所指向的文件,同時(shí)mp不在指向該文件。12.2.3文件的寫/讀打開文件的目的就是要向文件寫或讀其中的數(shù)據(jù)。根據(jù)寫/讀內(nèi)容形式的不同,分別定義了不同的函數(shù)進(jìn)行操作。fputc()和fgetc()函數(shù)是對(duì)單個(gè)字符進(jìn)行操作,fputs()和fgets()函數(shù)是對(duì)字符串進(jìn)行操作,fprintf()和fscanf()函數(shù)是進(jìn)行格式化操作,fread()和fwrite()函數(shù)是對(duì)數(shù)據(jù)塊進(jìn)行操作。1.fputc()函數(shù)一般調(diào)用形式為:fputc(ch,mp);參數(shù):ch是要寫入文件的字符,可以是字符常量,也可以是字符變量,很多地方將變量ch定義為整型變量,因?yàn)檎妥兞靠梢再x值為字符常量或變量;mp是FILE類型的數(shù)據(jù)文件指針變量。功能:將字符ch的值寫到mp所指向的文件中。返回值:如果執(zhí)行成功,返回值就是所寫的字符;如果執(zhí)行失敗,返回值就是EOF(-1)。例如:ex1201利用fputc()函數(shù)向磁盤文件d:\exam\test.txt寫入HOWAREYOU!#include<stdio.h>intmain(void){FILE*mp;charch;if((mp=fopen("d:\\exam\\test.txt","w"))==NULL){printf("Failedtoopenthisfile.\n");exit(0);}while((ch=getchar())!='\n')fputc(ch,mp);fclose(mp);return0;}在程序運(yùn)行輸入窗口內(nèi)輸入:HOWAREYOU!返回編輯窗口后,到d:\exam文件下打開test.txt文件,可以看到文件的內(nèi)容為“HOWAREYOU!”。說明:(1)文件指針變量mp實(shí)際指向的是文件的FILE結(jié)構(gòu)體,當(dāng)“fputc(ch,mp);”語(yǔ)句每執(zhí)行成功一次,數(shù)據(jù)文件指針就會(huì)自增1,指向下一個(gè)字符,然后在向磁盤文件寫入該字符。(2)我們所輸入的字符并沒有立即給變量ch,而是當(dāng)輸入回車鍵之后,先送到緩沖區(qū)中,然后ch從緩沖區(qū)讀數(shù)據(jù),直到遇到回車為止。因鍵盤為標(biāo)準(zhǔn)輸入設(shè)備,可直接使用,無需執(zhí)行打開操作。(3)文件test.txt的路徑d:\exam\test.txt,在程序中要寫成d:\\exam\\test.txt。2.fgetc()函數(shù)一般調(diào)用形式為:fgetc(mp);參數(shù):mp是FILE類型的數(shù)據(jù)文件指針變量。功能:從mp所指向的文件中讀取一個(gè)字符。返回值:如果執(zhí)行成功,返回值就是讀取的字符;如果執(zhí)行時(shí)遇到文件結(jié)束符,返回值就是EOF(-1)。當(dāng)函數(shù)讀取字符遇到結(jié)束符時(shí),函數(shù)的返回值就為-1。例如:ex1202利用fgetc()函數(shù)讀取磁盤文件d:\exam\test.txt中的內(nèi)容。#include<stdio.h>intmain(void){FILE*mp;

charch;if((mp=fopen("d:\\exam\\test.txt","r"))==NULL){printf("Failedtoopenthisfile.\n");exit(0);}while((ch=fgetc(mp))!=EOF) putchar(ch);fclose(mp);return0;}程序運(yùn)行的結(jié)果為:HOWAREYOU!說明:(1)文件指針變量mp實(shí)際指向的是文件的FILE結(jié)構(gòu)體,當(dāng)“fgetc(mp)”

函數(shù)調(diào)用每執(zhí)行成功一次,數(shù)據(jù)文件指針就會(huì)自增1,指向下一個(gè)字符,然后在向磁盤文件讀取該字符。(2)因?yàn)槲覀冎皇亲x取test.txt文件中的內(nèi)容,所以用“只讀”(“r”)方式打開文件,為了避免誤操作修改文件的內(nèi)容,一定不要寫成“w”操作方式。(3)在while循環(huán)中,每次從test.txt文件中讀取一個(gè)字符,賦值給變量ch,在顯示器上顯示該字符,當(dāng)讀取字符遇到文件結(jié)束標(biāo)志時(shí),fgetc(mp)的返回值為EOF(即-1),循環(huán)結(jié)束。因顯示器為標(biāo)準(zhǔn)輸出設(shè)備,可直接使用,無需執(zhí)行打開操作。3.fputs()函數(shù)一般調(diào)用形式為:fputs(str,mp);參數(shù):str是字符串或字符數(shù)組;mp是FILE類型的數(shù)據(jù)文件指針變量。功能:將str字符指針?biāo)赶虻淖址ɑ蜃址麛?shù)組中的所有字符、字符串常量),寫到mp所指向的文件。其中字符串的結(jié)束符’\0’不寫入。返回值:如果執(zhí)行成功,返回值非負(fù)值;如果執(zhí)行失敗,返回值就是EOF(-1)。4.fgets()函數(shù)一般調(diào)用形式為:fgets(str,n,mp);參數(shù):str是用于存放讀取的字符串的字符數(shù)組(或字符指針指向字符數(shù)組);n是一個(gè)整型數(shù)據(jù),表示方入str中字符的個(gè)數(shù),其中包括n-1個(gè)字符和自動(dòng)添加的‘\0’。mp是FILE類型的數(shù)據(jù)文件指針變量。功能:從mp所指向的文件中讀取n-1個(gè)字符,并在最后自動(dòng)添加‘\0’,將其方入str中。如果讀入字符的個(gè)數(shù)不到n-1個(gè)就遇到文件結(jié)束符EOF或換行符‘\n’,則結(jié)束讀入,同時(shí)將換行符‘\n’讀入到str中。返回值:如果執(zhí)行成功,返回值為str的首地址;如果執(zhí)行失?。ǔ鲥e(cuò)或讀到文件尾),返回值就是NULL。5.fprintf()函數(shù)一般調(diào)用形式為:fprintf(文件指針,格式字符串,輸出列表項(xiàng));fprintf()函數(shù)與printf()函數(shù)都是輸出函數(shù),只不過輸出的位置不同,printf()函數(shù)是將數(shù)據(jù)輸出到顯示器,而fprintf()函數(shù)是將數(shù)據(jù)輸出到磁盤文件。參數(shù):格式字符串可參照printf()函數(shù)的要求。功能:按照格式字符串的格式,將輸出列表項(xiàng)中的內(nèi)容輸出到文件指針?biāo)赶虻奈募?.fscanf()函數(shù)一般調(diào)用形式為:fscanf(文件指針,格式字符串,輸入列表項(xiàng));fscanf()函數(shù)與scanf()函數(shù)都是輸入函數(shù),只不過獲取數(shù)據(jù)的位置不同,scanf()函數(shù)是從鍵盤獲取數(shù)據(jù),而fscanf()函數(shù)是從磁盤文件獲取數(shù)據(jù)。參數(shù):格式字符串可參照scanf()函數(shù)的要求。功能:按照格式字符串的格式,將文件指針?biāo)赶虻奈募械臄?shù)據(jù)賦值給輸入列表項(xiàng)。7.fwrite()函數(shù)一般調(diào)用形式為:fwrite(buf,size,count,mp);參數(shù):buf是一個(gè)指針,指向?qū)⒁敵鰯?shù)據(jù)的存儲(chǔ)區(qū)的起始地址;size是指每次寫的字節(jié)數(shù);count是指寫入的次數(shù);mp是FILE類型的數(shù)據(jù)文件指針變量。功能:從buf所指向的數(shù)據(jù)存儲(chǔ)區(qū)獲取數(shù)據(jù),向mp所指向的文件寫入數(shù)據(jù),每次寫入size個(gè)字節(jié),寫入count次。返回值:如果執(zhí)行成功,返回值為count的值;如果執(zhí)行寫入的次數(shù)小于count次,那么返回實(shí)際的次數(shù);如果函數(shù)調(diào)用失敗,返回值就是0。8.fread()函數(shù)一般調(diào)用形式為:fread(buf,size,count,mp);參數(shù):buf是一個(gè)指針,指向?qū)⒁x入數(shù)據(jù)的存儲(chǔ)區(qū)的起始地址;size是指每次讀取的字節(jié)數(shù);count是指讀取的次數(shù);mp是FILE類型的數(shù)據(jù)文件指針變量。功能:從mp所指向的文件讀取數(shù)據(jù),每次讀取size個(gè)字節(jié),讀取count次,將讀取的數(shù)據(jù)存儲(chǔ)到buf所指向的數(shù)據(jù)存儲(chǔ)區(qū)。返回值:如果執(zhí)行成功,返回值為count的值;如果執(zhí)行寫入的次數(shù)小于count次,那么返回實(shí)際的次數(shù);如果函數(shù)調(diào)用失敗,返回值就是0。9.putw()函數(shù)putw()函數(shù)為非標(biāo)準(zhǔn)C所提供函數(shù),也就是說部分C語(yǔ)言編譯系統(tǒng)提供此函數(shù)。一般調(diào)用形式為:putw(i,mp);參數(shù):i表示一個(gè)整型變量或常量;mp是FILE類型的數(shù)據(jù)文件指針變量。功能:從mp所指向的磁盤文件寫入一個(gè)整數(shù)i。返回值:如果執(zhí)行成功,返回值為i的值;如果執(zhí)行失敗,返回值就是EOF。10.getw()函數(shù)getw(()函數(shù)為非標(biāo)準(zhǔn)C所提供函數(shù),也就是說部分C語(yǔ)言編譯系統(tǒng)提供此函數(shù)。一般調(diào)用形式為:getw(mp);參數(shù):mp是FILE類型的數(shù)據(jù)文件指針變量。功能:從mp所指向的磁盤文件讀取一個(gè)整數(shù)到內(nèi)存。返回值:如果執(zhí)行成功,返回值為i的值;如果執(zhí)行失敗,返回值就是EOF。12.3隨機(jī)文件的讀/寫

我們上面所講的函數(shù)都是順序讀寫一個(gè)文件,每完成一個(gè)字符的讀寫,文件指針就指向下一個(gè)字符。向文件讀寫字符的位置是由文件指針指向的位置決定的,下面我們介紹幾個(gè)關(guān)于文件指針位置定位的函數(shù),可以利用它們實(shí)現(xiàn)隨機(jī)文件的讀/寫。1.fseek()函數(shù)一般調(diào)用形式為:fseek(文件類型指針,位移量,起始點(diǎn));參數(shù):文件類型指針是一個(gè)FILE類型的數(shù)據(jù)文件指針變量;位移量是一個(gè)長(zhǎng)整型數(shù)據(jù),如果為正值,表示從“起始點(diǎn)”開始向文件尾方向移動(dòng)的字節(jié)數(shù),如果為負(fù)值,表示從“起始點(diǎn)”開始向文件頭方向移動(dòng)的字節(jié)數(shù);起始點(diǎn)是指移動(dòng)的起始位置,可以是數(shù)字或宏名代表,在stdio.h文件中定義,其含義見表12-2。功能:將位置指針指向,從起始點(diǎn)開始,移動(dòng)到位移量所標(biāo)識(shí)的位置。返回值:如果執(zhí)行成功,返回值為0;如果執(zhí)行失敗,返回值就是非0值。表12-2數(shù)值宏名含義0SEEK_SET文件頭1SEEK_CUR當(dāng)前位置2SEEK_END文件尾2.ftell()函數(shù)一般調(diào)用形式為:ftell(文件類型指針);參數(shù):文件類型指針是一個(gè)FILE類型的數(shù)據(jù)文件指針變量。功能:位置指針當(dāng)前指向的位置。返回值:如果執(zhí)行成功,返回值為位置指針的值;如果出錯(cuò)(如文件不存在),返回值就是-1。3.rewind()函數(shù)一般調(diào)用形式為:rewind(文件類型指針);參數(shù):文件類型指針是一個(gè)FILE類型的數(shù)據(jù)文件指針變量。功能:使位置指針當(dāng)前指向文件頭。返回值:無返回值。4.feof()函數(shù)一般調(diào)用形式為:feof(文件類型指針);參數(shù):文件類型指針是一個(gè)FILE類型的數(shù)據(jù)文件指針變量。功能:判斷文件指針是否指向文件尾。返回值:如果文件指針指向文件尾部,返回值為1;如果文件指針未指向文件尾部,返回值為0。12.4應(yīng)用程序舉例例ex1209:利用鍵盤向磁盤文件d:\exam\test3.txt輸入一篇英文文章,計(jì)算其中英文字母的個(gè)數(shù)及單詞的個(gè)數(shù)。程序設(shè)計(jì)分析:(1)向磁盤文件寫入內(nèi)容,我們調(diào)用寫入函數(shù)即可,注意如何控制輸入結(jié)束的算法。假如我們用puts()函數(shù),可以通過計(jì)算最后輸入字符串的長(zhǎng)度來控制其結(jié)束。(2)計(jì)算英文字母?jìng)€(gè)數(shù),設(shè)置一個(gè)計(jì)數(shù)器,通過與大寫和小寫字母進(jìn)行比較,符合要求,計(jì)數(shù)器加1。(3)計(jì)算單詞的個(gè)數(shù),通過判斷遇到單詞結(jié)束符的方法計(jì)算單詞的個(gè)數(shù),也就是說,當(dāng)我們?cè)谖恼轮袕挠龅阶帜搁_始,到遇到空格、逗號(hào)、句號(hào)三個(gè)字符的時(shí)候,判定為一個(gè)單詞。(4)在讀取文件中內(nèi)容的時(shí)候,我們以遇到文件結(jié)束符EOF作為循環(huán)的結(jié)束的條件。程序:#include<stdio.h>#include<stdlib.h>#include<string.h>intmain(){FILE*mp;charch;charstr[5000];intbiaoshi=1; /*標(biāo)點(diǎn)符號(hào)標(biāo)記*/intcount1=0; /*單詞計(jì)數(shù)器*/intcount2=0; /*字母計(jì)數(shù)器*/if((mp=fopen("d:\\exam\\test3.txt","w"))==NULL)/*以“w”方式打開磁盤文件*/{printf("W:Failedtoopenthisfile.\n");exit(0);}

while(strlen(gets(str))>0)/*從鍵盤輸入字母到磁盤文件*/{fputs(str,mp);}fclose(mp);if((mp=fopen("d:\\exam\\test3.txt","r"))==NULL) /*以“r”方式打開磁盤文件*/{printf("R:Failedtoopenthisfile.\n");exit(0);}while((ch=fgetc(mp))!=EOF) /*從文件中逐個(gè)讀取字符直到文件尾*/{if(ch==''||ch==','||ch=='\n'||ch=='.') /*空格、逗號(hào)、換行、句號(hào)*/biaoshi++; else if(biaoshi){biaoshi=0;count1++;}/*因標(biāo)識(shí)初始值為1,即遇到第一字母后就先記一個(gè)單詞

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論