在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 }
