以字元形式讀寫檔案時,每次可以從檔案中讀取乙個字元,或者向檔案中寫入乙個字元。主要使用兩個函式,分別是 fgetc() 和 fputc()。
fgetc 是 file get char 的縮寫,意思是從指定的檔案中讀取乙個字元。fgetc() 的用法為:
int fgetc (file *fp)
;
fp 為檔案指標。fgetc() 讀取成功時返回讀取到的字元,讀取到檔案末尾或讀取失敗時返回eof。
eof 是 end of file 的縮寫,表示檔案末尾,是在 stdio.h 中定義的巨集,它的值是乙個負數,往往是 -1。fgetc() 的返回值型別之所以為 int,就是為了容納這個負數(char不能是負數)。
eof 不絕對是 -1,也可以是其他負數,這要看編譯器的實現。
fgetc() 的用法舉例:
char ch;
file *fp =
fopen
("d:\\demo.txt"
,"r+");
ch =
fgetc
(fp)
;
表示從d:\demo.txt檔案中讀取乙個字元,並儲存到變數 ch 中。
在檔案內部有乙個位置指標,用來指向當前讀寫到的位置,也就是讀寫到第幾個位元組。在檔案開啟時,該指標總是指向檔案的第乙個位元組。使用 fgetc() 函式後,該指標會向後移動乙個位元組,所以可以連續多次使用 fgetc() 讀取多個字元。
注意:這個檔案內部的位置指標與c語言中的指標不是一回事。位置指標僅僅是乙個標誌,表示檔案讀寫到的位置,也就是讀寫到第幾個位元組,它不表示位址。檔案每讀寫一次,位置指標就會移動一次,它不需要你在程式中定義和賦值,而是由系統自動設定,對使用者是隱藏的。
【示例】在螢幕上顯示 d:\demo.txt 檔案的內容。
#include
intmain()
//每次讀取乙個位元組,直到讀取完畢
while
((ch=
fgetc
(fp))!=
eof)
putchar
('\n');
//輸出換行符
fclose
(fp)
;return0;
}
在d盤下建立 demo.txt 檔案,輸入任意內容並儲存,執行程式,就會看到剛才輸入的內容全部都顯示在螢幕上。
該程式的功能是從檔案中逐個讀取字元,在螢幕上顯示,直到讀取完畢。
程式第 13 行是關鍵,while 迴圈的條件為(ch=fgetc(fp)) != eof。fget() 每次從位置指標所在的位置讀取乙個字元,並儲存到變數 ch,位置指標向後移動乙個位元組。當檔案指標移動到檔案末尾時,fget() 就無法讀取字元了,於是返回 eof,表示檔案讀取結束了。
eof 本來表示檔案末尾,意味著讀取結束,但是很多函式在讀取出錯時也返回 eof,那麼當返回 eof 時,到底是檔案讀取完畢了還是讀取出錯了?我們可以借助 stdio.h 中的兩個函式來判斷,分別是 feof() 和 ferror()。
feof() 函式用來判斷檔案內部指標是否指向了檔案末尾,它的原型是:
int feof ( file * fp )
;
當指向檔案末尾時返回非零值,否則返回零值。
ferror() 函式用來判斷檔案操作是否出錯,它的原型是:
int ferror ( file *fp )
;
出錯時返回非零值,否則返回零值。
#include
intmain()
//每次讀取乙個位元組,直到讀取完畢
while
((ch=
fgetc
(fp))!=
eof)
putchar
('\n');
//輸出換行符if(
ferror
(fp)
)else
fclose
(fp)
;return0;
}
這樣,不管是出錯還是正常讀取,都能夠做到心中有數。
fputc 是 file output char 的所以,意思是向指定的檔案中寫入乙個字元。fputc() 的用法為:
int fputc (
int ch, file *fp )
;
ch 為要寫入的字元,fp 為檔案指標。fputc() 寫入成功時返回寫入的字元,失敗時返回 eof,返回值型別為 int 也是為了容納這個負數。例如:
fputc
('a'
, fp)
;
或者:
char ch =
'a';
fputc
(ch, fp)
;
表示把字元 『a』 寫入fp所指向的檔案中。
兩點說明
1 .被寫入的檔案可以用寫、讀寫、追加方式開啟,用寫或讀寫方式開啟乙個已存在的檔案時將清除原有的檔案內容,並將寫入的字元放在檔案開頭。如需保留原有檔案內容,並把寫入的字元放在檔案末尾,就必須以追加方式開啟檔案。不管以何種方式開啟,被寫入的檔案若不存在時則建立該檔案。
2 . 每寫入乙個字元,檔案內部位置指標向後移動乙個位元組。
示例 從鍵盤輸入一行字元,寫入檔案。
#include
intmain()
printf
("input a string:\n");
//每次從鍵盤讀取乙個字元並寫入檔案
while
((ch=
getchar()
)!='\n'
)fclose
(fp)
;return0;
}
執行程式,輸入一行字元並按回車鍵結束,開啟d盤下的 demo.txt 檔案,就可以看到剛才輸入的內容。
程式每次從鍵盤讀取乙個字元並寫入檔案,直到按下回車鍵,while 條件不成立,結束讀取。
C語言利用fgetc和fputc函式實現檔案的複製
分析 使用指定函式實現指定功能。所以這裡問題就簡單化,我們弄明白fgetc和fputc兩個函式如何使用即可。函式原型 函式介紹 int fgetc file stream 從指定的流 stream 獲取下乙個字元 乙個無符號字元 並把位置識別符號往前移動。函式成功讀取時返回讀取的字元,若到檔案末尾或...
fputc和fgetc的使用
int fputc int ch,file stream 向檔案中寫字元 int fgetc file stream 從檔案中讀字元 注意 1 fputc 函式的引數是 int ch,但是傳入的時候需直接傳入字元 2 fgetc的返回值是int 一定不要弄錯了。如果換成char會容易誤判 首先明白三...
C中fgetc 和fputc簡單用法介紹
fgetc 從流中讀取字元 fputc 把字元寫入指定檔案中int fgetc file stream 注 這個函式的返回值,是返回讀取的乙個位元組,如果讀到了檔案末尾或者讀取檔案失敗時會返回eof。int fputc int c,file stream 注 這個函式的返回值,返回的時寫入問價的字元...