feof(文件流指針)
成都創(chuàng)新互聯(lián)企業(yè)建站,10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),專注于網(wǎng)站建設(shè)技術(shù),精于網(wǎng)頁(yè)設(shè)計(jì),有多年建站和網(wǎng)站代運(yùn)營(yíng)經(jīng)驗(yàn),設(shè)計(jì)師為客戶打造網(wǎng)絡(luò)企業(yè)風(fēng)格,提供周到的建站售前咨詢和貼心的售后服務(wù)。對(duì)于成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)中不同領(lǐng)域進(jìn)行深入了解和探索,創(chuàng)新互聯(lián)在網(wǎng)站建設(shè)中充分了解客戶行業(yè)的需求,以靈動(dòng)的思維在網(wǎng)頁(yè)中充分展現(xiàn),通過對(duì)客戶行業(yè)精準(zhǔn)市場(chǎng)調(diào)研,為客戶提供的解決方案。
,不到結(jié)尾返回0,否則返回1
就一個(gè)判斷狀態(tài)的函數(shù)
file
*fp=fopen。。。。
打開成功才能調(diào)用該函數(shù)
這個(gè)狀態(tài)檢測(cè)是當(dāng)文件讀取函數(shù)發(fā)生讀失敗才會(huì)出現(xiàn)
返回值0 1
0代表沒到文件尾
1代表到文件尾了
while(!feof(in))是說如果沒到文件尾就繼續(xù) 若到文件尾了 結(jié)束循環(huán)
feof是一個(gè)c語(yǔ)言函數(shù),既可用以判斷二進(jìn)制文件又可用以判斷文本文件。feof(fp)有兩個(gè)返回值:如果遇到文件結(jié)束,函數(shù)feof(fp)的值為1,否則為0。
EOF是文件結(jié)束標(biāo)志的文件。在文本文件中,數(shù)據(jù)是以字符的ASCⅡ代碼值的形式存放,ASCⅡ代碼的范圍是0到255,不可能出現(xiàn)-1,因此可以用EOF作為文件結(jié)束標(biāo)志。
當(dāng)把數(shù)據(jù)以二進(jìn)制形式存放到文件中時(shí),就會(huì)有-1值的出現(xiàn),因此不能采用EOF作為二進(jìn)制文件的結(jié)束標(biāo)志。為解決這一個(gè)問題,ASCI C提供一個(gè)feof函數(shù),用來判斷文件是否結(jié)束。
擴(kuò)展資料:
feof的正確寫法:
在VC里,只有當(dāng)文件位置指針(fp-_ptr)到了文件末尾,然后再發(fā)生讀/寫操作時(shí),標(biāo)志位(fp-_flag)才會(huì)被置為含有_IOEOF。然后再調(diào)用feof(),才會(huì)得到文件結(jié)束的信息。
因此,如果運(yùn)行如下程序:
char c;
while(!feof(fp))
{
c = fgetc(fp);
printf("%X/n", c);
}
會(huì)發(fā)現(xiàn)多輸出了一個(gè)FF,原因就是在讀完最后一個(gè)字符后,fp-flag仍然沒有被置為_IOEOF,因而feof()仍然沒有探測(cè)到文件結(jié)尾。直到再次調(diào)用fgetc()執(zhí)行讀操作,feof()才能探測(cè)到文件結(jié)尾。這樣就多輸出了一個(gè)-1(即FF)。
正確的寫法應(yīng)該是:
char c;
c = fgetc(fp);
while(!feof(fp))
{
printf("%X/n", c);?
c = fgetc(fp);
}
參考資料來源:百度百科-feof
feof是C語(yǔ)言標(biāo)準(zhǔn)庫(kù)函數(shù),其原型在stdio.h中,其功能是檢測(cè)流上的文件結(jié)束符,如果文件結(jié)束,則返回非0值,否則返回0(即,文件結(jié)束:返回非0值,文件未結(jié)束,返回0值),文件結(jié)束符只能被clearerr()清除。(這里的檢測(cè)流上的文件結(jié)束符就相當(dāng)于聲卡檢測(cè)電流信號(hào)的一個(gè)過程)
int feof(FILE *stream);
參數(shù)
流 :FILE結(jié)構(gòu)的指針
注意:feof判斷文件結(jié)束是通過讀取函數(shù)fread/fscanf等返回錯(cuò)誤來識(shí)別的,故而判斷文件是否結(jié)束應(yīng)該是在讀取函數(shù)之后進(jìn)行判斷。比如,在while循環(huán)讀取一個(gè)文件時(shí),如果是在讀取函數(shù)之前進(jìn)行判斷,則如果文件最后一行是空白行,可能會(huì)造成內(nèi)存錯(cuò)誤。
擴(kuò)展資料
相關(guān)函數(shù)
getc()
功能:函數(shù)從流中返回一個(gè)字符值。
語(yǔ)法:int getc(FILE * stream)
返回值:整數(shù)值。
函數(shù)種類:“stdio.h”
內(nèi)容說明:此函數(shù)和fgetc函數(shù)相似,但它是以一個(gè)宏來實(shí)現(xiàn)的。另外它將不止一次地計(jì)算流參數(shù)咖,這對(duì)通常的宏的規(guī)則來說是一個(gè)例外。getc是一個(gè)已經(jīng)高度優(yōu)化的函數(shù),所以該函數(shù)是進(jìn)行單個(gè)字符讀操作的最好的函數(shù)。
參考:如fputc();fgetc();putc();fopen()。
fputs()
功能:將字符串中的內(nèi)容寫到指定的流中。
語(yǔ)法: int fputs(const char *s,F(xiàn)ILE * stream)
返回值:整數(shù)值。
函數(shù)種類:“stdio.h”
內(nèi)容說明:函數(shù)將字符串指針s所指向的字符串中的內(nèi)容寫到流stream中。標(biāo)志結(jié)束的空字符(NULL)不寫。函數(shù)也不另外增加一個(gè)換行符。只是輸出字符串中的所有字符。 函數(shù)操作成功時(shí)返回值為0,否則返回非0值。
如果流是以文本形式打開的,就會(huì)對(duì)有些字符進(jìn)行翻譯操作。這意味著字符串可能會(huì)與文件內(nèi)容之間沒有一一對(duì)應(yīng)的映射關(guān)系。然而,當(dāng)文件以二進(jìn)制打開時(shí),不發(fā)生字符翻譯,在字符串與文件內(nèi)容之間存在一一對(duì)應(yīng)的映射關(guān)系。
參考資料來源:百度百科-fgetc
參考資料來源:百度百科-feof