C 語言中的檔案結尾(EOF)
在 C 語言中表達 EOF 的話題將是本文的重點。
C 語言中的 End of File
(EOF)
當不再有任何資料可以從資料來源讀取時,稱為 End of File
的情況發生在計算機的作業系統中。資料來源通常被稱為檔案
或流
。
當顯示 End of the File (EOF)
訊息時,輸入已完成。
輸入內容後,我們可以同時按下 Ctrl 和 Z 鍵來終止文字。這表明檔案已經結束,沒有什麼要讀的了。
在 C 語言中到達檔案末尾時,getc()
函式返回 EOF
。如果不成功,getc()
也將返回 end-of-file (EOF)
。
因此,僅將 getc()
提供的值與 EOF
進行比較以確定檔案是否已到達其末尾是不夠的。C 提供了 feof()
函式來解決這個問題。
僅當到達檔案末尾時,此函式才會返回大於零的值;否則,它將返回 0
。
C 語言中對檔案的操作
大多數程式都是為了儲存從程式中檢索到的資訊而開發的。其中一種方法是將獲得的資訊儲存在檔案中。
以下是可以對檔案執行的各種操作的列表。
建立檔案
使用 fopen
程式並指定諸如 a
、a+
、w
和 w++
之類的特徵,可以建立一個新檔案。
開啟檔案
每當開啟檔案時,都會使用 fopen
功能和適當的訪問模式。以下是一些最常用的檔案訪問模式。
-
按
a
將搜尋檔案。如果檔案被成功開啟,fopen()
函式將其載入到記憶體中並建立一個指標,該指標連結到正在從中讀取的字元。如果該檔案尚不存在,則會生成一個新檔案。如果無法開啟檔案,則返回
Null
。 -
字母
w
搜尋檔案。如果檔案已經存在,檔案的內容將被重寫。如果該檔案尚不存在,則會生成一個新檔案。如果檔案無法開啟,將返回
Null
。
為了執行需要在檔案上完成的活動,使用稱為 檔案指標
的專用指標,其宣告如下所示:
FILE *fp;
因此,可以使用以下命令開啟檔案:
fp = fopen("Shanii.txt", "w");
這裡,Shanii.txt
是我們要開啟的檔案,第二個引數是檔案模式。
讀取檔案
fscanf
和 fgets
函式用於對檔案執行讀取操作。這兩種方法都執行與 scanf
和 gets
相同的操作,但它們考慮了一個稱為檔案指標
的額外引數。
你可以選擇逐個字元或逐行讀取檔案,具體取決於你希望如何組織資訊。以下是讀取檔案所需的程式碼示例。
FILE* fp;
fp = fopen("shanii.txt", "r");
fscanf(fp, "%s %s %s %d", str1, str2, str3, &year);
寫一個檔案
用於讀取檔案的函式 fprintf
和 fputs
也可以用於寫入檔案,其過程與讀取檔案非常相似。寫入檔案時使用的命令如下所示:
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;
}
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