999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

C語言程序中如何正確使用feof函數(shù)

2015-09-21 09:03:06張吳波史旅華湖北汽車工業(yè)學院電子信息工程學院十堰442002
現(xiàn)代計算機 2015年10期
關鍵詞:程序

張吳波,史旅華(湖北汽車工業(yè)學院電子信息工程學院,十堰 442002)

C語言程序中如何正確使用feof函數(shù)

張吳波,史旅華
(湖北汽車工業(yè)學院電子信息工程學院,十堰 442002)

0 引言

文件是存儲在外部介質(zhì) (如磁盤)上的數(shù)據(jù)的集合,這些數(shù)據(jù)能長期保留,可以隨時存取。在C語言程序設計中經(jīng)常需要將處理的數(shù)據(jù)保存在文件中,并從文件中讀取數(shù)據(jù)。C語言提供了許多的標準函數(shù)進行文件的操作,在筆者多年的《C語言程序設計》講授中,發(fā)現(xiàn)學生對文件的操作不熟悉,讀寫文件經(jīng)常出錯,從文件中讀取數(shù)據(jù)時尤為突出。

1 文件讀取與文件結構體

C語言中對文件進行讀取操作時,先打開文件。C語言提供了fopen()函數(shù)來打開文件,其返回值是一個FILE類型的文件指針。然后再通過C語言提供的文件讀取函數(shù),例如fgetc()、fgets()、fscanf()、fread()等函數(shù),從文件中將數(shù)據(jù)讀取到程序的內(nèi)存空間。

理解文件讀取函數(shù)是如何從文件中讀取數(shù)據(jù),對正確地從文件中讀取數(shù)據(jù)非常重要。由于磁盤是慢速設備,如果每向磁盤寫入一個字節(jié)或讀出一個字節(jié)的數(shù)據(jù),都要啟動磁盤操作,將會大大降低系統(tǒng)的效率,而且還會對磁盤驅(qū)動器的使用壽命帶來不利影響。因此,在文件系統(tǒng)中往往使用緩沖技術,即系統(tǒng)在內(nèi)存中為每個正在使用的文件開辟一個緩沖區(qū),利用緩沖區(qū)完成文件讀寫操作。打開文件是在文件與程序之間建立起聯(lián)系,程序把所要操作的文件的有關信息,如文件名、文件操作方式等通知給系統(tǒng);系統(tǒng)根據(jù)文件的有關信息為該文件分配相應的文件緩沖區(qū)[1]。

FILE是在stdio.h中定義的結構體類型,它包含了與文件操作有關的信息,如文件對應的內(nèi)存緩沖區(qū)地址、讀寫位置、操作方式、文件結束標志等。當打開一個文件時,系統(tǒng)自動為每個文件開辟一個“文件信息區(qū)”,用于存放上述信息。C程序用不同的FILE結構管理每個文件。在VC 6.0中,F(xiàn)ILE結構體的定義如下:

其中成員base表示文件緩沖區(qū)的起始位置,成員_ptr是文件位置指針,指示文件當前的讀寫位置。從文件中讀取數(shù)據(jù)后,它就向后移動相應的字節(jié)。_flag表示文件當前的狀態(tài),其中的不同二進制位代表文件中不同的狀態(tài),例如文件是否結束、文件讀取是否出錯等[2]。

2 feof函數(shù)工作機制

由于文件中可能存放多個數(shù)據(jù),因此在使用這些函數(shù)從文件讀取數(shù)據(jù)時,一般都使用循環(huán)的方式。那么在循環(huán)中如何確定文件讀取已經(jīng)結束呢?C語言提供了feof()函數(shù),用于判斷文件是否結束:如果文件讀取結束,函數(shù)返回1(真),否則返回0(假)。因此在讀取文件時,經(jīng)常使用該函數(shù)判斷[3]。

但是廣大C語言初學者經(jīng)常會碰到如下的情況,而對編寫讀取文件的程序產(chǎn)生困惑。例如:程序pro1.c讀取該文件的內(nèi)容,并顯示在屏幕上。

在文件data.txt的內(nèi)容為ABCDEFGH和內(nèi)容為ABCDEFG時,程序運行結果截然不同,如圖1所示。

圖1 pro1.c程序運行結果

從上面的運行結果發(fā)現(xiàn),在第一種情況下,程序多輸出了一次。為什么會這樣呢,這是由于feof()函數(shù)給出返回值的規(guī)則造成的。在VC 6.0中,feof()函數(shù)根據(jù)文件結束標志返回結果,如果文件結束標志被置為1,則返回1,否則返回0。那么文件結束標志什么時候被置為1呢?在讀取文件時,即使文件位置指針 (fp->_ptr)指向了文件末尾(雖然文件中的數(shù)據(jù)都已經(jīng)被讀出),文件結束標志仍為0,只有再發(fā)生讀操作,它才被置為1[4]。

上述的pro1.c程序中,當data.txt文件中的數(shù)據(jù)為ABCDEFGH時,文件結束標志的變化過程如圖2所示。

圖2 _ptr指針移動與文件結束標志變化

從上面的示意圖可以看出,當?shù)诙巫x取時,fgets()恰好從文件讀取4個字符,而文件位置指針_ptr雖然已經(jīng)指向了文件末尾,因為此時不再從文件中讀取數(shù)據(jù),文件結束標志仍然為0,所以feof()函數(shù)返回值為0。因此程序會執(zhí)行第三次循環(huán),再調(diào)用fgets()函數(shù)從文件中讀取數(shù)據(jù)時,系統(tǒng)才將文件結束標志置為1,并改變_ptr指向,再使用feof函數(shù)判斷時,函數(shù)返回1。

3 正確使用feof函數(shù)

從上面的分析可以看出,使用feof()函數(shù)判斷文件是否結束時,可能會發(fā)生這樣的情況:實際文件中的最后一個數(shù)據(jù)已經(jīng)讀取完畢,但feof()函數(shù)仍返回0,如果根據(jù)feof()函數(shù)的返回值判斷,此時會導致多讀一次文件而產(chǎn)生錯誤的結果。那么如何正確使用feof()函數(shù),以避免產(chǎn)生錯誤呢?這個錯誤產(chǎn)生的根本原因是因為feof()函數(shù)使用的時機不對,一般的使用方法可以按照圖3所表示的流程使用。

上面的方法對于使用fgetc()函數(shù)、fscanf()函數(shù)、fread()函數(shù)可以正確地進行文件的讀取。但是對于fgets()函數(shù),由于最后一次從文件中讀取的字符個數(shù)可能會比參數(shù)指定的讀取字符個數(shù)少,而此時文件結束標志會置為1。按照按照上面的流程,則會漏掉對最后讀取數(shù)據(jù)的處理。在這種情況下,如果使用feof()函數(shù)作為循環(huán)的結束條件時,須結合文件讀取函數(shù)的返回值進行判斷。

圖3 使用feof函數(shù)一般的流程

將pro1.c程序修改如下:

或者修改如下:

上面修改后的程序,當 data.txt中的內(nèi)容為ABCDEFGH或者為ABCDEFG時,都能正確地讀取、顯示文件中的數(shù)據(jù)。其中第二個修改的程序是在循環(huán)體中結合fgets()函數(shù)的返回值,判斷循環(huán)是否結束。

4 結語

在《C語言程序設計》中,從文件中讀取數(shù)據(jù)是一個重點和難點。很多學生在使用文件編程時,經(jīng)常出現(xiàn)錯誤。尤其是循環(huán)讀取數(shù)據(jù)時,使用feof()函數(shù)判斷文件讀取是否結束,更為突出。究其原因是因為學生對C語言中文件讀寫機制不熟悉,對feof()函數(shù)返回結果的規(guī)則不了解。而這些知識點在許多教材和參考書中又很少提及,因此導致學生在具體應用時出現(xiàn)了錯誤。

本文分析了feof()函數(shù)的工作機制和文件結束標志在文件讀取過程中的修改過程。然后結合二者,提出了正確使用feof()函數(shù)的方法。可以幫助學生加深對文件讀取的理解,掌握對文件讀取操作的正確方法。

[1]史旅華,張吳波.C語言程序設計教程[M].人民郵電出版社,2014.8

[2]黃瑛.C語言教材中對feof函數(shù)的常見誤解與誤用[J].科技文匯,2012.5

[3]王銳.C語言存取文本文件技術探索[J].科技創(chuàng)新淪壇[J],2010.24

[4]林智勇.C語言案例教學之文件讀寫[J].現(xiàn)代計算機,2014.6

C Programming;File;FILE Struct;feof Function

How to Use the feof Function Correctly in C Language

ZHANG Wu-bo,SHI Lv-hua
(School of Electrical&Information Engineering,Hubei University of Automotive Techonlogy,Shiyan 442002)

1007-1423(2015)10-0053-04

10.3969/j.issn.1007-1423.2015.10.015

張吳波(1977-),男,湖南邵陽人,講師,研究方向為軟件開發(fā)

2015-02-26

2015-03-12

針對在C語言課程中學生從文件中讀取數(shù)據(jù)時經(jīng)常出錯的現(xiàn)象,分析FILE結構體的意義和從文件中讀取數(shù)據(jù)的工作機制。然后結合具體程序,指出在應用feof函數(shù)判斷文件結束時的錯誤,并分析feof函數(shù)的工作機制,提出一種正確使用feof函數(shù)進行文件讀取的方法。

C語言程序設計;文件;FILE結構體;feof函數(shù)

史旅華(1963-),男,浙江寧波人,副教授,研究方向為圖形圖像處理研究

Focuses on the phenomenon that problem has happened when students read data from file using C language.Analyzes the importance of the FILE struct,and analyzes the process of reading data from file in C.According to some specific examples,points out the mistakes of using feof function to judge the end of reading data.Points out the process of judging end of file with feof function.At last proposes a way that how to correctly use the feof function to read data from file.

猜你喜歡
程序
給Windows添加程序快速切換欄
電腦愛好者(2020年6期)2020-05-26 09:27:33
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
基于VMM的程序行為異常檢測
偵查實驗批準程序初探
我國刑事速裁程序的構建
創(chuàng)衛(wèi)暗訪程序有待改進
恐怖犯罪刑事訴訟程序的完善
主站蜘蛛池模板: 成人午夜久久| 再看日本中文字幕在线观看| 亚洲成人黄色在线| 色噜噜久久| 国产第八页| 五月激情婷婷综合| 99精品视频播放| 一级毛片免费不卡在线视频| 福利一区在线| 国产极品美女在线| 在线免费观看AV| 欧美成人A视频| 免费在线看黄网址| 一级一毛片a级毛片| 青青久在线视频免费观看| 99精品欧美一区| 久久精品亚洲热综合一区二区| 亚洲福利片无码最新在线播放| 成人精品区| 欧美日韩一区二区三区在线视频| 福利小视频在线播放| 日韩大乳视频中文字幕| 一本大道香蕉高清久久| 亚洲婷婷在线视频| 3p叠罗汉国产精品久久| 99热这里都是国产精品| 午夜视频在线观看免费网站| 日本人妻一区二区三区不卡影院 | 中文字幕亚洲综久久2021| 99re视频在线| 天堂亚洲网| 国产精品手机在线播放| 精品超清无码视频在线观看| 十八禁美女裸体网站| 精品国产成人av免费| 免费看美女自慰的网站| 午夜国产小视频| 国产91精选在线观看| 欧美一级专区免费大片| 国产精品视频a| 日韩欧美中文在线| 亚洲无码高清免费视频亚洲| 九色视频在线免费观看| 免费又爽又刺激高潮网址| 亚洲欧洲国产成人综合不卡| 久久99国产综合精品女同| 91亚洲视频下载| 亚洲成a人片| 国产三级a| 国产a网站| 亚洲天堂777| 中文纯内无码H| 国产福利免费视频| 久久亚洲综合伊人| 国产九九精品视频| 国产精品粉嫩| 国产免费人成视频网| 亚洲欧美精品日韩欧美| 日韩在线永久免费播放| 久久狠狠色噜噜狠狠狠狠97视色| 欧美全免费aaaaaa特黄在线| 国产成人亚洲精品蜜芽影院| 欧美日韩免费在线视频| 精品国产香蕉在线播出| 99在线视频精品| 国产区在线观看视频| 高清无码不卡视频| 亚洲AV无码乱码在线观看代蜜桃 | 亚洲首页在线观看| 国产精品污污在线观看网站| 国产h视频免费观看| 99热这里只有精品免费| 国产黄色爱视频| 国产h视频免费观看| 天堂成人av| 国产精品久线在线观看| 国产无码网站在线观看| 欧美一区二区福利视频| 国产情侣一区二区三区| 亚洲午夜综合网| 亚洲日韩欧美在线观看| 国产成人免费视频精品一区二区|