C說話 以字符情勢讀寫文件詳解及示例代碼。本站提示廣大學習愛好者:(C說話 以字符情勢讀寫文件詳解及示例代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話 以字符情勢讀寫文件詳解及示例代碼正文
在C說話中,讀寫文件比擬靈巧,既可以每次讀寫一個字符,也能夠讀寫一個字符串,乃至是隨意率性字節的數據(數據塊)。本節引見以字符情勢讀寫文件。
以字符情勢讀寫文件時,每次可以從文件中讀取一個字符,或許向文件中寫入一個字符。重要應用兩個函數:fgetc()和fputc()。
字符讀取函數 fgetc
fgetc 是 file get char 的縮寫,意思是從指定的文件中讀取一個字符。它的原型為:
int fgetc (FILE *fp);
fp 為文件指針。fgetc() 讀取勝利時前往讀取到的字符,讀取到文件末尾或讀取掉敗時前往EOF。
EOF 是 end of file 的縮寫,表現文件末尾,是在 stdio.h 中界說的宏,它的值是一個正數,常常是 -1。前往值類型之所認為 int,就是為了包容這個正數(char不克不及是正數)。
EOF 不停對是 -1,也能夠是其他正數,這要看編譯器的完成。
fgetc() 應用舉例:
char ch; FILE *fp = fopen("D:\\demo.txt", "r+"); ch = fgetc(fp);
表現從D:\\demo.txt文件中讀取一個字符,並保留到變量ch中。
在文件外部有一個地位指針,用來指向以後讀寫到的地位,也就是讀寫到第幾個字節。在文件翻開時,該指針老是指向文件的第一個字節。應用fgetc 函數後,該指針會向後挪動一個字節,所以可以持續屢次應用fgetc讀取多個字符。
留意:這個文件外部的地位指針與C說話中的指針不是一回事。地位指針僅僅是一個標記,表現文件讀寫到的地位,也就是讀寫到第幾個字節,它不表現地址。文件每讀寫一次,地位指針就會挪動一次,它不須要你在法式中界說和賦值,而是由體系主動設置,對用戶是通明的。
【示例】在屏幕上顯示 D:\\demo.txt 文件的內容。
#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); } //每次讀取一個字節,直到讀取終了 while( (ch=fgetc(fp)) != EOF ){ putchar(ch); } putchar('\n'); //輸入換行符 fclose(fp); return 0; }
在D盤下創立demo.txt文件,輸出隨意率性內容並保留,運轉法式,就會看到適才輸出的內容全體都顯示在屏幕上。
該法式的功效是從文件中逐一讀取字符,在屏幕上顯示,直到讀取終了。
法式第14行是症結,while 輪回的前提為(ch=fgetc(fp)) != EOF。fget() 每次從地位指針地點的地位讀取一個字符,並保留到變量 ch,地位指針向後挪動一個字節。當文件指針挪動到文件末尾時,fget() 就沒法讀取字符了,因而前往 EOF,表現文件讀取停止了。
對EOF的解釋
EOF 原來表現文件末尾,意味著讀取停止,然則許多函數在讀掏出錯時也前往 EOF,那末當前往EOF時,究竟是文件讀取終了了照樣讀掏出錯了?我們可以借助 stdio.h 中的兩個函數來斷定,分離是 feof() 和 ferror()。
feof() 函數用來斷定文件外部指針能否指向了文件末尾,它的原型是:
int feof ( FILE * fp );
當指向文件末尾時前往非零值,不然前往零值。
ferror() 函數用來斷定文件操作能否失足,它的原型是:
int ferror ( FILE *fp );
失足時前往非零值,不然前往零值。
須要解釋的是,文件失足長短常少見的情形,下面的示例根本可以或許包管將文件內的數據讀取終了。假如尋求完善,也能夠加上斷定並給出提醒:
#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); } //每次讀取一個字節,直到讀取終了 while( (ch=fgetc(fp)) != EOF ){ putchar(ch); } putchar('\n'); //輸入換行符 if(ferror(fp)){ puts("讀掏出錯"); }else{ puts("讀取勝利"); } fclose(fp); return 0; }
如許,不論是失足照樣正常讀取,都可以或許做到心中稀有。
字符寫入函數fputc
fputc 是 file output char 的所以,意思是向指定的文件中寫入一個字符。挪用的情勢為:
int fputc ( int ch, FILE *fp );
ch 為要寫入的字符,fp 為文件指針。fputc() 寫入勝利時前往寫入的字符,掉敗時前往EOF,前往值類型為 int 也是為了包容這個正數。例如:
fputc('a', fp);
或許:
char ch = 'a';
fputc(ch, fp);
表現把字符 'a' 寫入fp所指向的文件中。
兩點解釋
1) 被寫入的文件可以用寫、讀寫、追加方法翻開,用寫或讀寫方法翻開一個已存在的文件時將消除原本的文件內容,並將寫入的字符放在文件開首。如需保存原有文件內容,並把寫入的字符放在文件末尾,就必需以追加方法翻開文件。不論以何種方法翻開,被寫入的文件若不存在時則創立該文件。
2) 每寫入一個字符,文件外部地位指針向後挪動一個字節。
【示例】從鍵盤輸出一行字符,寫入文件。
#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"); //每次從鍵盤讀取一個字符並寫入文件 while ( (ch=getchar()) != '\n' ){ fputc(ch,fp); } fclose(fp); return 0; }
運轉法式,輸出一行字符並按回車鍵停止,翻開D盤下的demo.txt文件,便可以看到適才輸出的內容。
法式每次從鍵盤讀取一個字符並寫入文件,直到按下回車鍵,while 前提不成立,停止讀取。
以上就是對C 說話 以字符情勢讀寫文件的基本材料,後續持續添加相干材料,感謝年夜家對本站的支撐!