www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 工業(yè)控制 > 電子設(shè)計(jì)自動(dòng)化
[導(dǎo)讀]作者:王姍姍,華清遠(yuǎn)見嵌入式學(xué)院講師。 在標(biāo)準(zhǔn)IO中,對于文件的讀寫無非三種方式: (1) 每次一個(gè)字符的I / O。 (2) 每次一行的I / O。 (3) 直接I / O。 似乎這些函數(shù)看起來很簡單,但只有理解了這些函數(shù),你才知道該

作者:王姍姍,華清遠(yuǎn)見嵌入式學(xué)院講師。

在標(biāo)準(zhǔn)IO中,對于文件的讀寫無非三種方式:

(1) 每次一個(gè)字符的I / O。

(2) 每次一行的I / O。

(3) 直接I / O。

似乎這些函數(shù)看起來很簡單,但只有理解了這些函數(shù),你才知道該如何使用,例如怎樣來判斷讀取的文件是否結(jié)束,怎樣來統(tǒng)計(jì)文件的行數(shù),等等。

下面先來回顧下讀取文件的三種方式,然后再舉例看下怎樣使用。

一次讀或?qū)懸粋€(gè)字符,使用getc、fgetc或getchar。如果流是帶緩存的,則標(biāo)準(zhǔn)I / O函數(shù)處理所有緩存。三個(gè)函數(shù)原型如下:

#include <stdio.h>

int getc(FILE *fp) ;

int fgetc(FILE *fp) ;

int getchar(void);

三個(gè)函數(shù)的返回:若成功則為下一個(gè)字符,若已處文件尾端或出錯(cuò)則為E O F。強(qiáng)調(diào)的是不管是出錯(cuò)還是到達(dá)文件尾端,這三個(gè)函數(shù)都返回同樣的值。為了區(qū)分這兩種不同的情況,必須調(diào)用ferror()或feof()。

一次讀或?qū)懸恍?,使用f g e t s和gets。兩個(gè)函數(shù)原型如下:

#include <stdio.h>

Char *gets(char *s) ;

Char *fgets(char *s,int size,FILE *steam)

兩個(gè)函數(shù)返回:若成功則為buf,若已處文件尾端或出錯(cuò)則為null。這兩個(gè)函數(shù)都指定了緩存地址,讀入的行將送入其中。gets()從標(biāo)準(zhǔn)輸入讀,而fgets()則從指定的流讀。

對于fgets(),必須指定緩存的長度為n。此函數(shù)一直讀到下一個(gè)新行符為止,但是不超過n-1個(gè)字符,讀入的字符被送入緩存,該緩存以null字符結(jié)尾。如若該行,包括最后一個(gè)新行符的字符數(shù)超過n-1,則只返回一個(gè)不完整的行,而且緩存總是以null字符結(jié)尾。對fgets()的下一次調(diào)用會(huì)繼續(xù)讀該行。

直接I / O使用的是fread。每次I / O操作讀某種數(shù)量的對象,而每個(gè)對象具有指定的長度。這個(gè)函數(shù)常用于從二進(jìn)制文件中讀一個(gè)結(jié)構(gòu)。原型如下:

int fread(void * ptr,int objsize,int objnum,FILE *fp);

這個(gè)函數(shù)返回:讀的對象數(shù)。fputs()在遇到null字節(jié)時(shí)就停止,而在結(jié)構(gòu)中可能含有null字節(jié),所以不能使用每次一行函數(shù)實(shí)現(xiàn)這種要求,而fread能使我們一次讀整個(gè)結(jié)構(gòu)。

下面看下如何利用上面提到的標(biāo)準(zhǔn)IO讀函數(shù)來判斷你讀取的文件是否結(jié)束以及如何來統(tǒng)計(jì)文件的行數(shù)。

1、判斷文件結(jié)束有三種方式:

a) 當(dāng)用fgetc(src)返回的int值為EOF時(shí),讀到文件的末尾

b) 當(dāng)用fgets(p,1024,src)返回的指針為NULL時(shí),讀到文件的末尾

c) 當(dāng)用fread(s,1,20,src)返回的個(gè)數(shù)小于20時(shí),讀到文件的末尾

實(shí)現(xiàn)起來簡單明了,就不再細(xì)說。

2、統(tǒng)計(jì)文件的行數(shù)

a) 當(dāng)用fgetc(src)返回的int值為’n’時(shí)行數(shù)加一

b) 當(dāng)用fgets(p,1024,src)返回的指針不為NULL時(shí),你的緩沖即提供的p[1024]已經(jīng)讀到字符,這個(gè)時(shí)候?qū)嶋H上有兩種情況,一種你讀進(jìn)來的字符長度小于1024個(gè),這個(gè)時(shí)候一行結(jié)束,行數(shù)加一,另一種比較復(fù)雜,由于受自己定義的緩沖的限制,一次只能讀進(jìn)來1023個(gè),如果恰好這個(gè)時(shí)候你剛好讀完一行,那p[]1022]里存放的一定’n’,如果不是,那你的一行還一定沒有結(jié)束了。

程序如下:

Int n;

A) While(fgetc(src)==’n’)

N++;

B) while(fgets(p,1024,src)!=NULL)

{

If(strlen(p)<1024||p[1022]==’n’)

N++;

}
“本文由華清遠(yuǎn)見http://www.embedu.org/index.htm提供”



來源:華清遠(yuǎn)見0次

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

為了提升設(shè)計(jì)效率和運(yùn)行安全性 ,對DL/T 834—2023《火力發(fā)電廠汽輪機(jī)防進(jìn)水和冷蒸汽導(dǎo)則》與DL/T 834—2003 《火力發(fā)電廠汽輪機(jī)防進(jìn)水和冷蒸汽導(dǎo)則》的設(shè)計(jì)、運(yùn)行和檢驗(yàn)及維護(hù)要求進(jìn)行了對比分析 , 總...

關(guān)鍵字: 標(biāo)準(zhǔn) 疏水 冷蒸汽 發(fā)電廠

電磁兼容(EMC)是指在同一電磁環(huán)境中,不同設(shè)備或系統(tǒng)能夠正常工作且互不干擾的狀態(tài)。在現(xiàn)代電子和通信領(lǐng)域,EMC是一個(gè)至關(guān)重要的概念,它不僅影響設(shè)備的性能,還關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和安全性。為了確保設(shè)備的EMC,各國都制...

關(guān)鍵字: 電磁兼容 EMC 標(biāo)準(zhǔn)

北京——2024年10月29日 亞馬遜云科技日前宣布,通過與光環(huán)新網(wǎng)與西云數(shù)據(jù)的緊密合作,在亞馬遜云科技(北京)區(qū)域和(寧夏)區(qū)域推出Amazon Lambda SnapStart功能,將基于Java Lambda函數(shù)的...

關(guān)鍵字: 函數(shù) 數(shù)據(jù)處理

北京2024年10月29日 /美通社/ -- 亞馬遜云科技日前宣布,通過與光環(huán)新網(wǎng)與西云數(shù)據(jù)的緊密合作,在亞馬遜云科技(北京)區(qū)域和(寧夏)區(qū)域推出Amazon Lambda SnapStart功能,將基于Java La...

關(guān)鍵字: START 亞馬遜 PS 函數(shù)

無線充電技術(shù),作為現(xiàn)代科技領(lǐng)域的一項(xiàng)創(chuàng)新,正逐步改變著我們的生活方式。從智能手機(jī)到電動(dòng)汽車,無線充電的應(yīng)用場景日益廣泛,為用戶提供了前所未有的便捷性。然而,盡管無線充電技術(shù)發(fā)展迅速,其在標(biāo)準(zhǔn)和能效方面仍面臨諸多瓶頸,這些...

關(guān)鍵字: 無線充電 能效 標(biāo)準(zhǔn)

關(guān)于數(shù)據(jù)分析與可視化,以下介紹Pandas讀取數(shù)據(jù)以及保存數(shù)據(jù)的方法,畢竟我們很多時(shí)候需要讀取各種形式的數(shù)據(jù),以及將我們需要將所做的統(tǒng)計(jì)分析保存成特定的格式。

關(guān)鍵字: 函數(shù) Panda

深圳2024年8月15日 /美通社/ -- 近日,知名量化交易平臺水母量化正式推出了突破性的輪動(dòng)交易策略回測功能,目前已進(jìn)入公測階段。該功能實(shí)現(xiàn)了從策略設(shè)計(jì)、歷史回測到實(shí)盤自動(dòng)交易一體化流程,幫用戶解決了策略驗(yàn)證難、交易...

關(guān)鍵字: 編程 仿真 函數(shù) 開源

隨著無人機(jī)的普及,越來越多的人開始使用無人機(jī)進(jìn)行各種飛行任務(wù),但是不當(dāng)?shù)氖褂脮?huì)給公共安全和社會(huì)秩序帶來潛在的風(fēng)險(xiǎn),因此對于無人機(jī)使用的規(guī)定也變得越來越嚴(yán)格。本文將介紹無人機(jī)使用的標(biāo)準(zhǔn)和規(guī)定,以幫助大家正確使用無人機(jī)。

關(guān)鍵字: 無人機(jī) 標(biāo)準(zhǔn) UAV

智能家居作為新興領(lǐng)域,逐漸走入了人們的生活。智能家居系統(tǒng)是利用先進(jìn)的計(jì)算機(jī)技術(shù)、網(wǎng)絡(luò)通訊技術(shù)、智能云端控制、綜合布線技術(shù)、醫(yī)療電子技術(shù)依照人體工程學(xué)原理,融合個(gè)性需求,將與家居生活有關(guān)的各個(gè)子系統(tǒng)如安防、燈光控制、窗簾控...

關(guān)鍵字: 智能家居 標(biāo)準(zhǔn)

Python由荷蘭數(shù)學(xué)和計(jì)算機(jī)科學(xué)研究學(xué)會(huì)的吉多·范羅蘇姆于1990年代初設(shè)計(jì),作為一門叫做ABC語言的替代品。 Python提供了高效的高級數(shù)據(jù)結(jié)構(gòu),還能簡單有效地面向?qū)ο缶幊獭?/p> 關(guān)鍵字: python 函數(shù) 對象編程

關(guān)閉