C語言文件輸入和輸出操作的學(xué)習(xí)心得(三)

概述

C語言文件輸入和輸出操作的學(xué)習(xí)心得(二)已經(jīng)詳細介紹了C語言文件輸入的操作,但未介紹如何讀取文件的操作。本文針主要通過比較兩種文件讀出的方法向大家介紹C語言文件輸出的一些基本操作,并向大家提供兩個實例以供參考琅翻。

fgetc()

相關(guān)函數(shù):open, fread, fscanf, getc
頭文件:include<stdio.h>
原型:int fgetc(FILE * stream);
【說明】
fgetc()從參數(shù)stream 所指的文件中讀取一個字符. 若讀到文件尾而無數(shù)據(jù)時便返回EOF诺祸。此函數(shù)與前文提及到的getchar()類似。
【返回值】
fgetc()會返回讀取到的字符, 若返回EOF 則表示到了文件尾

stdout

stdout(standardoutput)標(biāo)準輸出获询,不是一個函數(shù),而是一個由C語言的頭文件已經(jīng)定好并且可以直接使用的文件指針拐袜。只是方便操作輸出吉嚣,比如傳給一個函數(shù)等等。這時函數(shù)的輸出就不是輸出到文件蹬铺,而是傳進來的stdout文件指針尝哆,即標(biāo)準輸出。

實例1
#include <stdio.h>

int main()
{
  FILE *pFile;
  char c;
  pFile = fopen("test.txt", "r");

   if(pFile == NULL)//文件指針為空時的措施
   {
       printf("can not open the file");
       fclose(pFile);
       return 0;
   }
    while(c!=EOF)
    {
        c = fgetc(pFile);//獲取文件的字符
        fputc(c,stdout);//顯示讀取的單個字符
    }
    fclose(pFile);//關(guān)閉文件
  return 0;
}

【說明】
細心的讀者會發(fā)現(xiàn)以上這個實例甜攀,和前文(二)的實例相似度很高秋泄。不同之處在于fopen()函數(shù)中的模式換成了讀取模式(r);fputc()函數(shù)中,文件流的參數(shù)換成了stdout规阀。把讀取到的字符放進標(biāo)準輸出以后恒序,系統(tǒng)會把這些字符打印出來,從而起到了讀取的功能谁撼。

fgets()

相關(guān)函數(shù):open, fread, fscanf, getc
頭文件:include<stdio.h>
原型:har * fgets(char * s, int size, FILE * stream);
【參數(shù)】
s:字符型指針歧胁,指向用來存儲字符的數(shù)組
size:存儲數(shù)據(jù)的大小
stream:數(shù)據(jù)的來源文件
【說明】
fgets()用來從參數(shù)stream 所指的文件內(nèi)讀入字符并存到參數(shù)s 所指的內(nèi)存空間, 直到出現(xiàn)換行字符、讀到文件尾或是已讀了size-1 個字符為止, 最后會加上NULL 作為字符串結(jié)束.
【返回值】
fgets()若成功則返回s 指針, 返回NULL 則表示有錯誤發(fā)生

fputs()

相關(guān)函數(shù):fopen, fwrite, fscanf, fputc, putc
頭文件:#include <stdio.h>
原型:int fputs(const char * s, FILE * stream);
【說明】
fputs()用來將參數(shù)s 所指的字符串寫入到參數(shù)stream 所指的文件內(nèi).

【返回值】
若成功則返回寫出的字符個數(shù), 返回EOF 則表示有錯誤發(fā)生.

feof()

相關(guān)函數(shù):fopen, fgetc, fgets, fread

頭文件:#include <stdio.h>
原型:int feof(FILE * stream);
【說明】
feof()用來偵測是否讀取到了文件尾, 尾數(shù)stream 為fopen()所返回之文件指針. 如果已到文件尾則返回非零值, 其他情況返回0.
【返回值】
返回非零值代表已到達文件尾.

實例2
#include <stdio.h>

int main()
{
  FILE *pFile;
  char c[32];//定義一個長度為32的字符數(shù)組
  pFile = fopen("test.txt", "r");

   if(pFile == NULL)//文件指針為空時的措施
   {
       printf("can not open the file");
       fclose(pFile);
       return 0;
   }
    while(!feof(pFile))
    {
        fgets(c,32,pFile);//一次從文件中讀取32個字節(jié)
        fputs(c,stdout);//一次顯示32個字節(jié)
    }
    fclose(pFile);//關(guān)閉文件
  return 0;
}

【說明】
實例2和實例1的形式相似厉碟。采用feof()函數(shù)判別文件是否結(jié)束喊巍,讀取文件和輸出文件分別采用fgets()函數(shù)和fputs()函數(shù),其特點是一次可從文件中讀取32字節(jié)箍鼓。事實上崭参,一次讀取多少位數(shù)據(jù)可以根據(jù)開發(fā)者的需要改變size和存儲數(shù)據(jù)。

二者比較

實例1和實例2雖然形式相似袄秩,但是它們之間最大的區(qū)別是程序的效率阵翎,這種效率區(qū)別尤其在讀取大量數(shù)據(jù)時能夠體現(xiàn)。
實例1采用fgetc()函數(shù)之剧,每次只能讀取1個字符郭卫,一次循環(huán)只能讀取1個字符。實例2采用fgets()函數(shù)背稼,每次能讀取32個字符贰军,一次循環(huán)能夠讀取32個字符。假如一個txt文件有3200個字節(jié),采用fgetc()需要執(zhí)行3200次循環(huán)词疼,而采用fgets()只需執(zhí)行1000次循環(huán)俯树。舉一個例子,如果將一個字符比作一個水滴贰盗,一個字符串比作一個水杯许饿,一個文本文件比作一桶水。我們要用最短時間抽干這桶水舵盈,是用杯子快還是一滴一滴流快呢陋率?
那么是不是我們把儲存字符的數(shù)組定義得越大越好呢?其實也未必秽晚,因為定義一個數(shù)組的實質(zhì)是在內(nèi)存劃分一塊區(qū)域用來儲存數(shù)據(jù)瓦糟。在內(nèi)存有限的時候我們分配內(nèi)存時必須謹慎,不然會出現(xiàn)很多意想不到的bug赴蝇。定義存儲數(shù)組的長度需要根據(jù)效率以及內(nèi)存空間選擇一個折中的值菩浙。
其實,實現(xiàn)讀取文件的實例還有很多句伶,本文只提供其中兩個實例作為參考劲蜻。如有其他實例,歡迎各位朋友前來交流考余。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末斋竞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子秃殉,更是在濱河造成了極大的恐慌,老刑警劉巖浸剩,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钾军,死亡現(xiàn)場離奇詭異,居然都是意外死亡绢要,警方通過查閱死者的電腦和手機吏恭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來重罪,“玉大人樱哼,你說我怎么就攤上這事〗伺洌” “怎么了搅幅?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長呼胚。 經(jīng)常有香客問我茄唐,道長,這世上最難降的妖魔是什么蝇更? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任沪编,我火速辦了婚禮呼盆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蚁廓。我一直安慰自己访圃,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布相嵌。 她就那樣靜靜地躺著腿时,像睡著了一般。 火紅的嫁衣襯著肌膚如雪平绩。 梳的紋絲不亂的頭發(fā)上圈匆,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機與錄音捏雌,去河邊找鬼跃赚。 笑死,一個胖子當(dāng)著我的面吹牛性湿,可吹牛的內(nèi)容都是我干的纬傲。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼肤频,長吁一口氣:“原來是場噩夢啊……” “哼叹括!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起宵荒,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤汁雷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后报咳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侠讯,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年暑刃,在試婚紗的時候發(fā)現(xiàn)自己被綠了厢漩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡岩臣,死狀恐怖溜嗜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情架谎,我是刑警寧澤炸宵,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站狐树,受9級特大地震影響焙压,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一涯曲、第九天 我趴在偏房一處隱蔽的房頂上張望野哭。 院中可真熱鬧,春花似錦幻件、人聲如沸拨黔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽篱蝇。三九已至,卻和暖如春徽曲,著一層夾襖步出監(jiān)牢的瞬間零截,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工秃臣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留涧衙,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓奥此,卻偏偏與公主長得像弧哎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子稚虎,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容

  • C/C++輸入輸出流總結(jié) 前兩天寫C++實習(xí)作業(yè)撤嫩,突然發(fā)現(xiàn)I/O是那么的陌生,打了好長時間的文件都沒有打開蠢终,今天終...
    LuckTime閱讀 1,738評論 0 6
  • 錯誤報告 perror函數(shù)簡化向用戶報告特定錯誤的過程序攘。它的原型定義于studio.h,如下: 如果message...
    d9fc24a0c9a9閱讀 1,571評論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)寻拂,斷路器两踏,智...
    卡卡羅2017閱讀 134,711評論 18 139
  • 夜是個安靜的啞巴 只懂得傾聽別人的秘密 猶記那晚風(fēng)輕云淡 害羞借你的籃球 那天的風(fēng)吹遠了 操場上只有微光些許 三三...
    courage9869閱讀 276評論 0 0
  • 【0515今日話題】 說說你擅長的三個技能。(來自貓友大晶) 01入睡快兜喻,睡眠質(zhì)量好。 02耐...
    面包不打烊閱讀 246評論 2 1