亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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)容是否為空,換句話(huà)說(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ù)特性讀寫(xiě)文件

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ù),如果大于的話(huà),就說(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è)就稱(chēng)作為文件錯(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)文章

  • C++利用PCL點(diǎn)云庫(kù)操作txt文件詳解

    C++利用PCL點(diǎn)云庫(kù)操作txt文件詳解

    這篇文章主要為大家詳細(xì)介紹了C++如何利用PCL點(diǎn)云庫(kù)操作txt文件,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2024-01-01
  • VSCode與Keil聯(lián)合開(kāi)發(fā)STM32的流程

    VSCode與Keil聯(lián)合開(kāi)發(fā)STM32的流程

    這篇文章主要介紹了VSCode與Keil聯(lián)合開(kāi)發(fā)STM32的流程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C語(yǔ)言中結(jié)構(gòu)體、聯(lián)合體的成員內(nèi)存對(duì)齊情況

    C語(yǔ)言中結(jié)構(gòu)體、聯(lián)合體的成員內(nèi)存對(duì)齊情況

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中結(jié)構(gòu)體、聯(lián)合體的成員內(nèi)存對(duì)齊情況的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • C++與Lua協(xié)程交互的示例詳解

    C++與Lua協(xié)程交互的示例詳解

    Lua 語(yǔ)言不支持真正的多線程,即不支持共享內(nèi)存的搶占式線程,在執(zhí)行協(xié)程體的 Lua 腳本時(shí),Lua 同樣可以調(diào)用 C++ 的函數(shù),本文給大家介紹了C++ 與 Lua 的協(xié)程交互,需要的朋友可以參考下
    2024-02-02
  • Microsoft Visual C++ 6.0開(kāi)發(fā)環(huán)境搭建教程

    Microsoft Visual C++ 6.0開(kāi)發(fā)環(huán)境搭建教程

    這篇文章主要為大家詳細(xì)介紹了Microsoft Visual C++ 6.0開(kāi)發(fā)環(huán)境搭建教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • C++多繼承同名隱藏實(shí)例詳細(xì)介紹

    C++多繼承同名隱藏實(shí)例詳細(xì)介紹

    多繼承可以看作是單繼承的擴(kuò)展。所謂多繼承是指派生類(lèi)具有多個(gè)基類(lèi),派生類(lèi)..本文將對(duì)C++多繼承同名隱藏實(shí)例進(jìn)行分析
    2012-11-11
  • 如何為Qt視圖中的文字實(shí)現(xiàn)彩虹漸變效果

    如何為Qt視圖中的文字實(shí)現(xiàn)彩虹漸變效果

    這篇文章主要給大家介紹了關(guān)于如何為Qt視圖中的文字實(shí)現(xiàn)彩虹漸變效果的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Qt具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • C語(yǔ)言的動(dòng)態(tài)內(nèi)存管理你了解嗎

    C語(yǔ)言的動(dòng)態(tài)內(nèi)存管理你了解嗎

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言的動(dòng)態(tài)內(nèi)存管理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • C++ 封裝 DLL 供 C# 調(diào)用詳細(xì)介紹

    C++ 封裝 DLL 供 C# 調(diào)用詳細(xì)介紹

    這篇文章主要介紹了C++ 封裝 DLL 供 C# 調(diào)用(以C# 調(diào)用C++ 二次封裝的VLC播放庫(kù)為介質(zhì),支持回調(diào)函數(shù)的封裝),需要的朋友可以參考下面我文章的具體內(nèi)容
    2021-09-09
  • C基礎(chǔ) mariadb處理的簡(jiǎn)單實(shí)例

    C基礎(chǔ) mariadb處理的簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)?lái)一篇C基礎(chǔ) mariadb處理的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06

最新評(píng)論