我目前正在讓自己進入C中的fileusage。 我找到了解釋從文件中讀取字符串的代碼。然而,我真的好奇這是如何機械地工作。filePointer在while循環中自動進行?
while (!feof(fPointer)){
fgets(singleLine, 150, fPointer);
puts(singleLine);
}
filepointer在循環結束時如何知道要進一步行?不應該在while循環結束時增加文件指針?
乾杯
我目前正在讓自己進入C中的fileusage。 我找到了解釋從文件中讀取字符串的代碼。然而,我真的好奇這是如何機械地工作。filePointer在while循環中自動進行?
while (!feof(fPointer)){
fgets(singleLine, 150, fPointer);
puts(singleLine);
}
filepointer在循環結束時如何知道要進一步行?不應該在while循環結束時增加文件指針?
乾杯
約一個打開的文件甲FILE
對象存儲信息,包括「當前positition」。每個讀/寫操作通過讀取/寫入多少字節來增加當前位置。這就是爲什麼你可以繼續調用fgets
(或任何其他輸入函數)在一個循環中,並獲取塊,塊大塊。
同樣,您可以多次調用printf
(或任何其他輸出函數)來產生輸出,並且它們不會相互覆蓋。
你可以使用ftell
和fseek
(受到一些限制,例如,標準C不要求ftell
回到實際字節的文本文件偏移,只是一些「幻數」可以設置當前文件位置傳遞給fseek
(但我從來沒有在真正的實現中看到過))。
(你fPointer
只是指向一個FILE
對象不應該增加此指針,這隻會指向隨機內存。)
最後,while (!feof(fp))
是錯誤的,因爲feof
查詢「文件結束」的位存儲在FILE
對象中。它不預測下一次讀取是否會由於到達文件末尾而失敗。輸入函數到達文件結尾後,「文件結束」位僅設置爲真。這種類型的循環將在文件結束後再次運行,然後處理垃圾(或從先前的迭代中過時)數據。
您需要了解更多關於文件搜索和指針移動的信息。在讀取了一定數量的字符後,'fgets'函數實際上將文件指針移動到下一行。在你的情況'150' –
是不是'feof()'在'while'? – Cherubim
對不起,我會編輯它。 所以基本上命令fgets自動增加文件指針? –