乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      C語言fgetc和fputc函數(shù)用法詳解(以字符形式讀寫文件)

       悅光陰 2021-04-25

      文章來源:http://c./view/2068.html

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

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

      字符讀取函數(shù) fgetc

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

      int fgetc (FILE *fp);

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

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

      EOF 不絕對(duì)是 -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ù)后,該指針會(huì)向后移動(dòng)一個(gè)字節(jié),所以可以連續(xù)多次使用 fgetc() 讀取多個(gè)字符。

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

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

      #include<stdio.h>

      int main(){

        FILE *fp;

        char ch;

        //如果文件不存在,給出提示并退出

        if( (fp=fopen("D:\\demo.txt","rt")) == NULL ){

          puts("Fail to open file!");

          exit(0);

        }

        //每次讀取一個(gè)字節(jié),直到讀取完畢

        while( (ch=fgetc(fp)) != EOF ){

          putchar(ch);

        }

        putchar('\n'); //輸出換行符

        fclose(fp);

        return 0;

      }

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

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

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

      對(duì) 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 ){

          puts("Fail to open file!");

          exit(0);

        }

        //每次讀取一個(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è)字符。fputc() 的用法為:

      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)部位置指針向后移動(dòng)一個(gè)字節(jié)。

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

      #include<stdio.h>

      int main(){

        FILE *fp;

        char ch;

        //判斷文件是否成功打開

        if( (fp=fopen("D:\\demo.txt","wt+")) == NULL ){

          puts("Fail to open file!");

          exit(0);

        }

        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é)束讀取。


        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多