梗概:為什么C語言讀取文件到結構體時為什么整天多讀一行?一切都是【!feof(fp)】的錯!!!
while (!feof(fp)) { fgets(buffer, 256, fp); j++; }
像這樣的代碼,是很多C語言學者經常犯的錯誤!!
feof()這個函數是用來判斷指針是否已經到達文件尾部的。
若fp已經指向文件末尾,則feof(fp)函數值為“真”,即返回非零值;否則返回0。
對呀!那有什么問題的呢?
其實feof() 這個函數是當讀到文件結束符就返回 true 值,而非到文件最后一個字符,所以當讀完文件最后一個字符時,如果后面還有換行或者空格的時候, 他會繼續循環。所以就會多把最后循環一次。解決的方法其實很簡單!!只需要把fgets放到while哪里判斷就OK了!!
while (fgets(buffer, 256, fp)) { j++; }
怎樣?簡單粗暴吧??