C 庫 - clearerr() 函式



C 庫的 clearerr(FILE *stream) 函式清除給定流的檔案結束和錯誤指示符。當您希望在發生錯誤或 EOF 條件後重置檔案流的狀態時,這很有用。

語法

以下是 C 庫 clearerr() 函式的語法:

void clearerr(FILE *stream);

引數

此函式僅接受一個引數:

  • stream: 指向 FILE 物件的指標,指定要清除其錯誤指示符和 EOF 標誌的流。此 FILE 物件應由諸如 fopen 之類的函式事先開啟。

返回值

clearerr 函式不返回值。它是一個 void 函式,這意味著它執行其操作而不提供直接反饋。

示例 1:清除 EOF 標誌

此示例讀取檔案內容直到到達 EOF,然後使用 clearerr 清除 EOF 標誌,並確認 EOF 標誌已被清除。

以下是 C 庫 clearerr(FILE *stream) 函式的示例。

#include <stdio.h>

int main() {
   FILE *file = fopen("example.txt", "r");
   if (file == NULL) {
       perror("Failed to open file");
       return 1;
   }

   char ch;
   while ((ch = fgetc(file)) != EOF) {
       putchar(ch);
   }

   if (feof(file)) {
       printf("\nEOF reached.\n");
   }

   clearerr(file); // Clear the EOF flag

   if (feof(file)) {
       printf("EOF still set.\n");
   } else {
       printf("EOF cleared.\n");
   }

   fclose(file);
   return 0;
}

輸出

以上程式碼產生以下結果:

<contents of example.txt>
EOF reached.
EOF cleared.

示例 2:重置流狀態以重新讀取

此示例讀取檔案內容直到到達 EOF,使用 clearerr 清除 EOF 標誌,將檔案倒回開頭,並重新讀取檔案內容以表明流狀態已成功重置。

#include <stdio.h>

int main() {
   FILE *file = fopen("example.txt", "r");
   if (file == NULL) {
       perror("Failed to open file");
       return 1;
   }

   char ch;
   while ((ch = fgetc(file)) != EOF) {
       putchar(ch);
   }

   if (feof(file)) {
       printf("\nEOF reached.\n");
   }

   clearerr(file); // Clear the EOF flag
   rewind(file);   // Reset file position to the beginning

   printf("Re-reading the file:\n");
   while ((ch = fgetc(file)) != EOF) {
       putchar(ch);
   }

   fclose(file);
   return 0;
}

輸出

執行以上程式碼後,我們得到以下結果:

<contents of example.txt>
EOF reached.
Re-reading the file:
<contents of example.txt>
廣告