【C標準庫】詳解feof函數與EOF

創作不易,多多支援!

再說此函數之前,先來說一下EOF是什麼

EOF,為End Of File的縮寫,通常在文本的最後存在此字元表示資料結束。
在C語言中,或更精確地說成C標準函式庫中表示文件結束符。這種以EOF作為文件結束標誌的文件,必須是文本文件。在文本文件中,數據都是以字元的ASCII程式碼值的形式存放。我們知道,ASCII程式碼值的範圍是0~255,不可能出現-1,因此可以用EOF作為文件結束標誌

  • 一般結尾都有一個隱藏字元」EOF」,當程式讀取它的時候,就會知道文件已經到達結尾

可以理解為EOF是文本文件的結束標識,

注意:此時的text.txt文件內容為空

相信看到這裡,我們基本了解了EOF!

feof

頭文件:stdio.h

它是什麼?

是檢測流上的文件結束符的函數,如果文件結束,則返回非0值,否則返回0

一般文件操作結束後,需要使用feof來判定是不是到達了文件末尾(eof)而結束的。

聲明:
int feof(FILE *stream);
參數:

stream — 這是指向 FILE 對象的指針,該 FILE 對象標識了流。

返回值:

如果碰到eof而結束返回非0值,否則返回0。

操作實例:
  • 注意:此時你的項目工程裡面必須有一個text.txt的文件!
#include<stdio.h>
int main()
{
	int ch = 0;
	FILE* pf = fopen("text.txt", "r");
	if (pf == NULL)
	{
		perror("open file text.txt");
		return 0;
	}
	while ((ch = fgetc(pf)) != EOF)
	{
		putc(ch,stdout);
	}
	printf("\n");
	if (ferror(pf))
	{
		printf("讀取文件:text.txt時發生錯誤\n");
	}
	else if (feof(pf))
	{
		printf("已到達文件結束處end of file\n");
	}
	fclose(pf);
	pf = NULL;
	return 0;
}

牢記:在文件讀取的過程中,不能用feof函數的返回值直接用來判斷文件的是否結束。而是應用於當文件讀取結束的時候,判斷是讀取失敗而結束,還是遇到文件尾結束!


以上程式碼均在vs2022環境下編譯

Tags: