fgets 是讀取檔案中的一行,當讀檔案過程中發生錯誤或者讀到檔案尾時,返回null,所以不能使用fgets==null來判斷是否到了檔案尾,需要結合feof(null) 才能確定是否到了檔案尾
while(!feof(fp))
fgets(temp,100,fp);
operation(temp);
這種判斷是否到了檔案尾的方式在存在錯誤的,因為fgets函式是遇到回車『\r』符返回的,所以在讀到最後一行時,它的檔案指標並沒有指向檔案尾,而是指向』\r』處,,feof 依然返回0(檔案還沒結束 ),所以這時operations還是會執行
應該修改為這種形式
while(1)
fgets(temp,100,fp);
if(feof(fp))
break;
operation(temp); c語言 判斷檔案結束問題 feof
最近做開發的時候用到c語言檔案的讀寫函式fread 採用while feof fp 來控制迴圈,結果發現每次讀取資料的時候總會把最後乙個資料單元讀取兩次,很是不解。後來查詢資料發現,原來fread 在讀到檔案最後乙個位元組時,feof fp 還是為0值,此時while feof fp 的控制條件依然...
判斷檔案結束有兩種方法 EOF和feof
判斷檔案結束有兩種方法 eof和feof 檢視stdio.h可以看到如下定義 由此可以看出,這兩種方式的原理是不同的。有人說eof只能用於文字檔案,其實不然,還要看定義的變數的型別。下面這段程式對文字檔案和二進位制檔案都可以 如果讀到了ff,由於c定義為int型,所以實際上c 0x000000ff,...
判斷檔案結束有兩種方法 EOF和feof
判斷檔案結束有兩種方法 eof和feof 檢視stdio.h可以看到如下定義 cpp view plain copy print?define eof 1 define ioeof 0x0010 define feof stream stream flag ioeo 由此可以看出,這兩種方式的原理是...