c 語言文本文件判斷是否到達結尾的問題


在c語言中,判斷文件結尾有兩種方法,第一種是使用feof()函數,feof(fp)用於測試fp所指向的文件的當前狀態是否為“文件結束”。如果是,函數則返回的是非0值(真),否則為0(假),要注意的是,feof()是先讀文件在判斷是不是到達文件結束,所以當使用feof()作為循環判斷條件的話,就需要注意一種情況,就是當文件為空的時候,它也會讀取一次文件內容然后再跳出循環,所以有可能會讀取到一些不可知的內容出來。

EOF是文本文件結束的標志。在文本文件中,數據是以字符的ASCⅡ代碼值的形式存放,ASCII代碼值的范圍是0~255,EOF的16進制代碼為0xFF(十進制為-1),因此可以用EOF作為文件結束標志。但是如果文件格式為二進制文件,就不適合用EOF來判斷文件到達結尾了,因為有可能文件中也存在一個數據為0xFF,這樣當讀取到這個數據是,就無法判斷是到達文件結尾,還是讀取到的是文件的內容了。

這里需要解決的就是feof()作為循環條件遇到空文件時的情況,網上找了好多,但是都沒有實現,然后自己受到了點啟發。想到了一個笨辦法,這里貼下代碼

 1 void read(void)
 2 {
 3     int ch;
 4     FILE *fp;
 5     if((fp=fopen("txt.txt","rt"))==NULL)
 6     {
 7         printf("讀取信息失敗,請重試");
 8         getchar();
 9         exit(1);
10     }
11     ch=fgetc(fp);                    //首先從文件中讀取,判斷是不是文件結束符EOF
12     if(ch==EOF)
13     {
14         printf("什么都沒有");
15         fclose(fp);
16         return;                        //如果是直接關閉文件退出
17     }
18     rewind(fp);                      //這步很重要,如果判斷不是,讓文件內部的指針重新指向文件開頭  
19     while(!feof(fp))    
20     {
21             ...                              //正常讀取文件內容  
22     }           

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM