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

C語言 以字符形式讀寫文件詳解及示例代碼

 更新時(shí)間:2016年08月24日 17:51:33   投稿:lqh  
本文主要介紹C語言 以字符形式讀寫文件,這里整理了讀寫文件的一些資料并附示例代碼,供大家學(xué)習(xí)參考,有需要的小伙伴可以參考下

在C語言中,讀寫文件比較靈活,既可以每次讀寫一個(gè)字符,也可以讀寫一個(gè)字符串,甚至是任意字節(jié)的數(shù)據(jù)(數(shù)據(jù)塊)。本節(jié)介紹以字符形式讀寫文件。

以字符形式讀寫文件時(shí),每次可以從文件中讀取一個(gè)字符,或者向文件中寫入一個(gè)字符。主要使用兩個(gè)函數(shù):fgetc()和fputc()。

字符讀取函數(shù) fgetc

fgetc 是 file get char 的縮寫,意思是從指定的文件中讀取一個(gè)字符。它的原型為:

int fgetc (FILE *fp);

fp 為文件指針。fgetc() 讀取成功時(shí)返回讀取到的字符,讀取到文件末尾或讀取失敗時(shí)返回EOF。

EOF 是 end of file 的縮寫,表示文件末尾,是在 stdio.h 中定義的宏,它的值是一個(gè)負(fù)數(shù),往往是 -1。返回值類型之所以為 int,就是為了容納這個(gè)負(fù)數(shù)(char不能是負(fù)數(shù))。

EOF 不絕對是 -1,也可以是其他負(fù)數(shù),這要看編譯器的實(shí)現(xiàn)。

fgetc() 使用舉例:

char ch;
FILE *fp = fopen("D:\\demo.txt", "r+");
ch = fgetc(fp);

表示從D:\\demo.txt文件中讀取一個(gè)字符,并保存到變量ch中。

在文件內(nèi)部有一個(gè)位置指針,用來指向當(dāng)前讀寫到的位置,也就是讀寫到第幾個(gè)字節(jié)。在文件打開時(shí),該指針總是指向文件的第一個(gè)字節(jié)。使用fgetc 函數(shù)后,該指針會向后移動一個(gè)字節(jié),所以可以連續(xù)多次使用fgetc讀取多個(gè)字符。

注意:這個(gè)文件內(nèi)部的位置指針與C語言中的指針不是一回事。位置指針僅僅是一個(gè)標(biāo)志,表示文件讀寫到的位置,也就是讀寫到第幾個(gè)字節(jié),它不表示地址。文件每讀寫一次,位置指針就會移動一次,它不需要你在程序中定義和賦值,而是由系統(tǒng)自動設(shè)置,對用戶是透明的。

【示例】在屏幕上顯示 D:\\demo.txt 文件的內(nèi)容。

#include<stdio.h>
int main(){
 FILE *fp;
 char ch;
 
 //如果文件不存在,給出提示并退出
 if( (fp=fopen("D:\\demo.txt","rt")) == NULL ){
  printf("Cannot open file, press any key to exit!");
  getch();
  exit(1);
 }
 //每次讀取一個(gè)字節(jié),直到讀取完畢
 while( (ch=fgetc(fp)) != EOF ){
  putchar(ch);
 }
 putchar('\n'); //輸出換行符
 fclose(fp);
 return 0;
}

在D盤下創(chuàng)建demo.txt文件,輸入任意內(nèi)容并保存,運(yùn)行程序,就會看到剛才輸入的內(nèi)容全部都顯示在屏幕上。

該程序的功能是從文件中逐個(gè)讀取字符,在屏幕上顯示,直到讀取完畢。

程序第14行是關(guān)鍵,while 循環(huán)的條件為(ch=fgetc(fp)) != EOF。fget() 每次從位置指針?biāo)诘奈恢米x取一個(gè)字符,并保存到變量 ch,位置指針向后移動一個(gè)字節(jié)。當(dāng)文件指針移動到文件末尾時(shí),fget() 就無法讀取字符了,于是返回 EOF,表示文件讀取結(jié)束了。

對EOF的說明

EOF 本來表示文件末尾,意味著讀取結(jié)束,但是很多函數(shù)在讀取出錯(cuò)時(shí)也返回 EOF,那么當(dāng)返回EOF時(shí),到底是文件讀取完畢了還是讀取出錯(cuò)了?我們可以借助 stdio.h 中的兩個(gè)函數(shù)來判斷,分別是 feof() 和 ferror()。

feof() 函數(shù)用來判斷文件內(nèi)部指針是否指向了文件末尾,它的原型是:

int feof ( FILE * fp );

當(dāng)指向文件末尾時(shí)返回非零值,否則返回零值。

ferror() 函數(shù)用來判斷文件操作是否出錯(cuò),它的原型是:

int ferror ( FILE *fp );

出錯(cuò)時(shí)返回非零值,否則返回零值。

需要說明的是,文件出錯(cuò)是非常少見的情況,上面的示例基本能夠保證將文件內(nèi)的數(shù)據(jù)讀取完畢。如果追求完美,也可以加上判斷并給出提示:

#include<stdio.h>
int main(){
 FILE *fp;
 char ch;
 
 //如果文件不存在,給出提示并退出
 if( (fp=fopen("D:\\demo.txt","rt")) == NULL ){
  printf("Cannot open file, press any key to exit!");
  getch();
  exit(1);
 }
 //每次讀取一個(gè)字節(jié),直到讀取完畢
 while( (ch=fgetc(fp)) != EOF ){
  putchar(ch);
 }
 putchar('\n'); //輸出換行符
 if(ferror(fp)){
  puts("讀取出錯(cuò)");
 }else{
  puts("讀取成功");
 }
 fclose(fp);
 return 0;
}

這樣,不管是出錯(cuò)還是正常讀取,都能夠做到心中有數(shù)。

字符寫入函數(shù)fputc

fputc 是 file output char 的所以,意思是向指定的文件中寫入一個(gè)字符。調(diào)用的形式為:

int fputc ( int ch, FILE *fp );

ch 為要寫入的字符,fp 為文件指針。fputc() 寫入成功時(shí)返回寫入的字符,失敗時(shí)返回EOF,返回值類型為 int 也是為了容納這個(gè)負(fù)數(shù)。例如:

fputc('a', fp);

或者:

char ch = 'a';
fputc(ch, fp);

表示把字符 'a' 寫入fp所指向的文件中。

兩點(diǎn)說明

1) 被寫入的文件可以用寫、讀寫、追加方式打開,用寫或讀寫方式打開一個(gè)已存在的文件時(shí)將清除原有的文件內(nèi)容,并將寫入的字符放在文件開頭。如需保留原有文件內(nèi)容,并把寫入的字符放在文件末尾,就必須以追加方式打開文件。不管以何種方式打開,被寫入的文件若不存在時(shí)則創(chuàng)建該文件。

2) 每寫入一個(gè)字符,文件內(nèi)部位置指針向后移動一個(gè)字節(jié)。

【示例】從鍵盤輸入一行字符,寫入文件。

#include<stdio.h>
int main(){
 FILE *fp;
 char ch;
 //判斷文件是否成功打開
 if( (fp=fopen("D:\\demo.txt","wt+")) == NULL ){
  printf("Cannot open file, press any key to exit!\n");
  getch();
  exit(1);
 }
 printf("Input a string:\n");
 //每次從鍵盤讀取一個(gè)字符并寫入文件
 while ( (ch=getchar()) != '\n' ){
  fputc(ch,fp);
 }
 fclose(fp);
 return 0;
}

運(yùn)行程序,輸入一行字符并按回車鍵結(jié)束,打開D盤下的demo.txt文件,就可以看到剛才輸入的內(nèi)容。

程序每次從鍵盤讀取一個(gè)字符并寫入文件,直到按下回車鍵,while 條件不成立,結(jié)束讀取。

以上就是對C 語言 以字符形式讀寫文件的基礎(chǔ)資料,后續(xù)繼續(xù)添加相關(guān)資料,謝謝大家對本站的支持!

相關(guān)文章

  • C語言數(shù)據(jù)結(jié)構(gòu)之單向鏈表詳解

    C語言數(shù)據(jù)結(jié)構(gòu)之單向鏈表詳解

    單向鏈表(單鏈表)是鏈表的一種,其特點(diǎn)是鏈表的鏈接方向是單向的,對鏈表的訪問要通過順序讀取從頭部開始。本文將為大家詳細(xì)講講單向鏈表的實(shí)現(xiàn)與使用,需要的可以參考一下
    2022-08-08
  • 深入理解C語言指針

    深入理解C語言指針

    關(guān)于指針,其是C語言的重點(diǎn),C語言學(xué)的好壞,其實(shí)就是指針學(xué)的好壞。其實(shí)指針并不復(fù)雜,學(xué)習(xí)指針,要正確的理解指針
    2020-02-02
  • C++之string類對象的容量操作詳解

    C++之string類對象的容量操作詳解

    通過在網(wǎng)站上的資料搜集,得到了很多關(guān)于string類對象的容量操作,通過對這些資料的整理和加入一些自己的代碼,希望能夠給你帶來幫助
    2021-08-08
  • 最大對稱字符串的算法

    最大對稱字符串的算法

    題目:輸入一個(gè)字符串,輸出該字符串中對稱的子字符串的最大長度。比如輸入字符串“google”,由于該字符串里最長的對稱子字符串是“goog”,因此輸出4。
    2013-03-03
  • websocket++簡單使用及實(shí)例分析

    websocket++簡單使用及實(shí)例分析

    下面小編就為大家?guī)硪黄獁ebsocket++簡單使用及實(shí)例分析。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-05-05
  • 計(jì)時(shí)器的time_t和clock_t 的兩種實(shí)現(xiàn)方法(推薦)

    計(jì)時(shí)器的time_t和clock_t 的兩種實(shí)現(xiàn)方法(推薦)

    下面小編就為大家?guī)硪黄?jì)時(shí)器的time_t和clock_t 的兩種實(shí)現(xiàn)方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-10-10
  • C++之openFrameworks框架介紹

    C++之openFrameworks框架介紹

    本章我們將介紹一個(gè)非常好用的跨平臺的 C++開源框架 openFrameworks。它是一個(gè)開源的跨平臺的C++工具包,方便開發(fā)者創(chuàng)建出一個(gè)更簡單和直觀的框架,擅長開發(fā)圖像和動畫,感興趣的同學(xué)可以參考一下
    2023-05-05
  • typedef和#define用法區(qū)別總結(jié)

    typedef和#define用法區(qū)別總結(jié)

    在C還是C++代碼中,typedef都使用的很多,在C代碼中尤其多,typedef與#define有些相似,其實(shí)是不同的,特別是在一些復(fù)雜的用法上,下面這篇文章主要給大家介紹了關(guān)于typedef和#define用法區(qū)別總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • C語言使用鏈表實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

    C語言使用鏈表實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言使用鏈表實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • C++特殊成員詳解

    C++特殊成員詳解

    這篇文章主要為大家介紹了C++特殊成員,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助,希望能夠給你帶來幫助
    2021-11-11

最新評論

育儿| 长丰县| 渝北区| 楚雄市| 台北县| 舟山市| 蓬莱市| 大姚县| 乐昌市| 桦川县| 昌平区| 阆中市| 峡江县| 普兰店市| 封丘县| 山东省| 沽源县| 留坝县| 镇远县| 潮州市| 平定县| 汨罗市| 财经| 娄底市| 玉龙| 沂水县| 平山县| 沁阳市| 于田县| 敦化市| 白玉县| 静海县| 博白县| 垣曲县| 广昌县| 比如县| 东丰县| 龙川县| 阿克苏市| 应城市| 德江县|