最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言中feof函數(shù)和ferror函數(shù)示例詳解

 更新時(shí)間:2024年09月05日 11:46:17   作者:埋頭編程~  
在C語(yǔ)言中feof函數(shù)用于檢查文件流的結(jié)束標(biāo)志,判斷文件在讀取時(shí)是否已經(jīng)到達(dá)了文件的末尾,這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中feof函數(shù)和ferror函數(shù)的相關(guān)資料,需要的朋友可以參考下

前言

或許我們?cè)诰W(wǎng)絡(luò)上看過(guò)有關(guān)于feof函數(shù),都說(shuō)這個(gè)函數(shù)是檢查文件是否已經(jīng)讀取結(jié)束了。但事實(shí)卻并非如此,要想知道更多的細(xì)節(jié),那就往下看看吧!

1. feof

謹(jǐn)記:在讀取文件的過(guò)程中,feof的返回值不是用于判斷文件是否讀取結(jié)束。

feof函數(shù)是判斷文件在讀取的過(guò)程中給是否是遇到了文件結(jié)束標(biāo)志(EOF)。但是文件讀取結(jié)束的原因不僅僅是因?yàn)橛龅搅宋募Y(jié)束標(biāo)志,還可能是因?yàn)橛龅搅烁鞣N文件在讀取過(guò)程中發(fā)生的錯(cuò)誤所導(dǎo)致文件讀取提前結(jié)束的。

很多人誤用這個(gè)函數(shù)來(lái)判斷文件內(nèi)容是否為空,換句話說(shuō),就是判斷這個(gè)文件是否為空文件!

feof函數(shù)作用:當(dāng)文件讀取結(jié)束時(shí),判斷文件讀取結(jié)束的原因是否是:遇到了文件結(jié)束結(jié)束標(biāo)志

1.1 feof函數(shù)原型

在文件光標(biāo)處遇到文件末尾標(biāo)記時(shí),feof函數(shù)返回一個(gè)非0值,否則返回0值。

1.2 正確利用函數(shù)特性讀寫文件

1.2.1 針對(duì)文本文件

對(duì)于文本文件來(lái)說(shuō),文件讀取結(jié)束時(shí)可能會(huì)返回EOF(fgetc),或者返回NULL(fgets)

  • fgetc判斷是否為EOF
  • fgets判斷返回值是否為NULL

1.2.2 針對(duì)二進(jìn)制文件

對(duì)于二進(jìn)制文件來(lái)說(shuō),判斷的方法就比較單一了。用fread函數(shù)。

fread函數(shù)判斷其規(guī)定讀取的個(gè)數(shù)(也就是fread的返回值)是否大于實(shí)際讀取的個(gè)數(shù),如果大于的話,就說(shuō)明文件讀取結(jié)束了。

1.3 feof函數(shù)的原理

feof()原理函數(shù):并不是通過(guò)讀取到文件的EOF來(lái)評(píng)判,這個(gè)文件是否為空。對(duì)feof()來(lái)說(shuō),它的工作原理是,站在光標(biāo)所在位置,向后看看還有沒(méi)有字符。如果有,返回0;如果沒(méi)有,返回非0。它并不會(huì)讀取相關(guān)信息,只是查看光標(biāo)后是否還有內(nèi)容。

1.4 feof函數(shù)實(shí)例演示

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
	int c; // 注意:int,?char,要求處理EOF
	FILE* fp = fopen("test.txt", "r");
	if (!fp) {
		perror("File opening failed");
		return EXIT_FAILURE;
	}

	//fgetc 當(dāng)讀取失敗的時(shí)候或者遇到?件結(jié)束的時(shí)候,都會(huì)返回EOF
	while ((c = fgetc(fp)) != EOF) // 標(biāo)準(zhǔn)C I/O讀取?件循環(huán)
	{
		putchar(c);
	}

	printf("\n");

	//判斷是什么原因結(jié)束的
	if (ferror(fp))
		puts("I/O error when reading");
	else if (feof(fp))
		puts("End of file reached successfully");
	fclose(fp);
	fp = NULL;
	return 0;
}

2. ferror

在講解feof函數(shù)的實(shí)例演示時(shí),在例子中出現(xiàn)了一個(gè)ferror,那這個(gè)函數(shù)又是干嘛的?我們就來(lái)探討一下。

還記得,在講標(biāo)準(zhǔn)流時(shí),提到過(guò)stderr標(biāo)準(zhǔn)錯(cuò)誤流,這是一個(gè)根據(jù)系統(tǒng)遇到錯(cuò)誤,而通過(guò)器編譯器內(nèi)部提早定義的宏自動(dòng)對(duì)應(yīng)上錯(cuò)誤信息。

那么在文件緩沖系統(tǒng)中,自然也有這么一個(gè)設(shè)定。可是它這個(gè)就沒(méi)有那么智能了。我們把這個(gè)就稱作為文件錯(cuò)誤標(biāo)志。

ferror函數(shù)作用:在文件讀取結(jié)束時(shí),檢查是否是因?yàn)橛龅搅宋募e(cuò)誤標(biāo)志。

2.1 ferror函數(shù)原型

ferror的返回值為非0值時(shí),就說(shuō)明遇到了文件錯(cuò)誤標(biāo)志了,否則返回0 。

這個(gè)例子就不過(guò)多展示了,大家可以結(jié)合前面的例子進(jìn)行分析。 

總結(jié)

到此這篇關(guān)于C語(yǔ)言中feof函數(shù)和ferror函數(shù)的文章就介紹到這了,更多相關(guān)C語(yǔ)言 feof函數(shù)和ferror函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

西乡县| 棋牌| 安溪县| 金沙县| 宁强县| 新闻| 天镇县| 霍山县| 泗水县| 厦门市| 洛川县| 大渡口区| 尼勒克县| 黑山县| 葵青区| 来宾市| 青阳县| 县级市| 上林县| 敦煌市| 安顺市| 崇信县| 吉安县| 元谋县| 葫芦岛市| 丹巴县| 瓮安县| 阿城市| 吉水县| 广昌县| 扬州市| 边坝县| 那曲县| 潍坊市| 米易县| 福州市| 黄石市| 常宁市| 平远县| 玛沁县| 潼关县|