C 語言中的檔案結尾(EOF)

Muhammad Zeeshan 2023年10月12日
  1. C 語言中的 End of File(EOF)
  2. C 語言中對檔案的操作
  3. C 語言中的 EOF 示例
C 語言中的檔案結尾(EOF)

在 C 語言中表達 EOF 的話題將是本文的重點。

C 語言中的 End of File(EOF)

當不再有任何資料可以從資料來源讀取時,稱為 End of File 的情況發生在計算機的作業系統中。資料來源通常被稱為檔案

當顯示 End of the File (EOF) 訊息時,輸入已完成。

輸入內容後,我們可以同時按下 CtrlZ 鍵來終止文字。這表明檔案已經結束,沒有什麼要讀的了。

在 C 語言中到達檔案末尾時,getc() 函式返回 EOF。如果不成功,getc() 也將返回 end-of-file (EOF)

因此,僅將 getc() 提供的值與 EOF 進行比較以確定檔案是否已到達其末尾是不夠的。C 提供了 feof() 函式來解決這個問題。

僅當到達檔案末尾時,此函式才會返回大於零的值;否則,它將返回 0

C 語言中對檔案的操作

大多數程式都是為了儲存從程式中檢索到的資訊而開發的。其中一種方法是將獲得的資訊儲存在檔案中。

以下是可以對檔案執行的各種操作的列表。

建立檔案

使用 fopen 程式並指定諸如 aa+ww++ 之類的特徵,可以建立一個新檔案。

開啟檔案

每當開啟檔案時,都會使用 fopen 功能和適當的訪問模式。以下是一些最常用的檔案訪問模式。

  1. a 將搜尋檔案。如果檔案被成功開啟,fopen() 函式將其載入到記憶體中並建立一個指標,該指標連結到正在從中讀取的字元。

    如果該檔案尚不存在,則會生成一個新檔案。如果無法開啟檔案,則返回 Null

  2. 字母 w 搜尋檔案。如果檔案已經存在,檔案的內容將被重寫。

    如果該檔案尚不存在,則會生成一個新檔案。如果檔案無法開啟,將返回 Null

為了執行需要在檔案上完成的活動,使用稱為 檔案指標 的專用指標,其宣告如下所示:

FILE *fp;

因此,可以使用以下命令開啟檔案:

fp = fopen("Shanii.txt", "w");

這裡,Shanii.txt 是我們要開啟的檔案,第二個引數是檔案模式。

讀取檔案

fscanffgets 函式用於對檔案執行讀取操作。這兩種方法都執行與 scanfgets 相同的操作,但它們考慮了一個稱為檔案指標的額外引數。

你可以選擇逐個字元或逐行讀取檔案,具體取決於你希望如何組織資訊。以下是讀取檔案所需的程式碼示例。

FILE* fp;
fp = fopen("shanii.txt", "r");
fscanf(fp, "%s %s %s %d", str1, str2, str3, &year);

寫一個檔案

用於讀取檔案的函式 fprintffputs 也可以用於寫入檔案,其過程與讀取檔案非常相似。寫入檔案時使用的命令如下所示:

FILE *fp;
fp = fopen("shanii.txt", "w");
fprintf(fp, "%s %s %s %d", "I", "am", "Zeeshan", 2000);

關閉檔案

在成功完成所有操作後,你必須始終關閉檔案。你必須使用 fclose 函式才能成功關閉檔案。

關閉檔案的程式碼如下所示:

FILE *fp;
fp = fopen("fileName.txt", "w");
fprintf(fp, "%s %s %s %d", "I", "am", "Zeeshan", 2000);
fclose(fp);

C 語言中的 EOF 示例

例如,檢視以下 C 程式碼以在螢幕上顯示名為 shanii.txt 的文字檔案的內容。

getc() 的值首先與 EOF 進行比較。

int charac = getc(filepointer);

while (charac != EOF) {
  putchar(charac);
  charac = getc(filepointer);
}

然後,使用 feof() 執行第二次檢查。此檢查確保程式僅在到達檔案末尾時輸出 Program has reached End-of-file

if (feof(filepointer)) {
  printf("\n Program has reached End-of-file");
}

否則程式將顯示 There was a problem

原始碼:

#include <stdio.h>

int main() {
  FILE *filepointer = fopen("shanii.txt", "r");
  int charac = getc(filepointer);

  while (charac != EOF) {
    putchar(charac);
    charac = getc(filepointer);
  }

  if (feof(filepointer)) {
    printf("\n Program has reached End-of-file");
  } else {
    printf("\n There was a problem");
  }
  fclose(filepointer);
  getchar();
  return 0;
}
Muhammad Zeeshan avatar Muhammad Zeeshan avatar

I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.

LinkedIn