C語(yǔ)言實(shí)現(xiàn)文件讀寫(xiě)
關(guān)于C語(yǔ)言的文件讀寫(xiě),我將介紹下面這幾種方式:
- 字符的讀寫(xiě):使用 fgetc() 函數(shù) 和 fputc() 函數(shù);
- 字符串的讀寫(xiě):使用 fgets() 函數(shù)和 fputs() 函數(shù);
- 格式化的讀寫(xiě)(主要用于文本文件):使用 fscanf() 函數(shù)和 fprintf() 函數(shù)。
字符讀寫(xiě):
1. fputc()函數(shù)
fputc(c,fp); //用于將一個(gè)字符寫(xiě)入文件
其中,fp為文件指針變量;c為要寫(xiě)入的字符,可以是字符常量或字符型變量。函數(shù)返回值:如果執(zhí)行成功,返回寫(xiě)入的字符;否則,返回EOF。
int main() { FILE *fp; //定義文件指針 char ch; //字符指針 fp=fopen("C://Users//Administrator//Desktop//tcc//trans//in.txt","w"); //打開(kāi)文件,寫(xiě)入模式 if(fp==NULL) //若fopen()函數(shù)返回NULL則打開(kāi)文件失敗 { printf("文件打開(kāi)失敗\n"); } else { printf("請(qǐng)輸入內(nèi)容(以回車(chē)結(jié)束):\n"); while((ch = getchar()) != '\n') //讀取字符進(jìn)行寫(xiě)入,讀取到“\n”結(jié)束 { fputc(ch,fp); } } fclose(fp); //關(guān)閉文件 return 0; }
由于沒(méi)有寫(xiě)循環(huán),目前只能輸入一行文本內(nèi)容。
2. fgetc()函數(shù)
c=fgetc(fp); //用來(lái)從指定的文本文件中讀取一個(gè)字符。
其中,fp為文件指針,c為要寫(xiě)入的字符。該函數(shù)的功能是從指定的文件中讀取一個(gè)字符,并賦值給字符型變量c。
函數(shù)返回值:讀取成功,返回讀取字符;讀取錯(cuò)誤或遇到結(jié)束標(biāo)志EOF,返回EOF。
int main() { FILE *fp; //定義文件指針 char ch; //字符指針 fp=fopen("C://Users//Administrator//Desktop//tcc//trans//in.txt","r"); //打開(kāi)文件,只讀模式 if(fp==NULL) //若fopen()函數(shù)返回NULL則打開(kāi)文件失敗 { printf("文件打開(kāi)失敗\n"); } else { while((ch=fgetc(fp))!=EOF) //讀取文件字符,直到返回fgetc()函數(shù)返回EOF { putchar(ch); //在顯示窗口輸出字符 } putchar('\n'); //輸出回車(chē) } fclose(fp); return 0; }
字符串讀寫(xiě):
1. fputs()函數(shù)
fputs(s,fp); //用來(lái)將一個(gè)字符串寫(xiě)入指定的文本文件。
其中,fp為文件指針,s可以是字符數(shù)組名,字符型指針變量或字符串常量。該函數(shù)的功能是將字符串s寫(xiě)入由fp指向的文件中,字符串末尾的‘\0'字符不允寫(xiě)入。
函數(shù)返回值:執(zhí)行成功,返回所寫(xiě)的最后一個(gè)字符;否則,返回EOF。
int main() { FILE *fp; //定義文件指針 char s[][100]={"a 一","b 地","c 現(xiàn)","cd 三","about 關(guān)于"}; //將字符串存入數(shù)組 int i; fp=fopen("C://Users//Administrator//Desktop//tcc//trans//in.txt","w"); //打開(kāi)文件,寫(xiě)入模式 if(fp==NULL) //若fopen()函數(shù)返回NULL則打開(kāi)文件失敗 { printf("文件打開(kāi)失敗\n"); } else { for(i=0;i<5;i++) //注意數(shù)組從0開(kāi)始 { fputs(s[i],fp); //在文件中寫(xiě)入數(shù)組中的字符串 fputs("\n",fp); //在文件中寫(xiě)入回車(chē) } } fclose(fp); //關(guān)閉文件 return 0; }
運(yùn)行結(jié)果:
2. fgets()函數(shù)
fgets(s,n,fp); //用于從指定的文件中讀一個(gè)字符串到字符數(shù)組中。
其中,s可以是字符型數(shù)組名或字符串指針;n是指定讀入的字符個(gè)數(shù);fp為文件指針。n是一個(gè)正整數(shù),表示從文件中最多讀取n-1個(gè)字符,并將字符串指針s定位在讀入的字符串首地址。
fgets()函數(shù)從文件中讀取字符直到遇到回車(chē)符或EOF為止,函數(shù)會(huì)在最后一個(gè)字符后加上字符串結(jié)束標(biāo)志'\0';若有EOF,則不予保留。
函數(shù)返回值:該函數(shù)如果執(zhí)行成功,返回讀取字符串;如果失敗,則返回空指針NULL,這時(shí),s中的內(nèi)容不確定。
int main() { FILE *fp; //定義文件指針 char s[5][100]; int i; fp=fopen("C://Users//Administrator//Desktop//tcc//trans//in.txt","r"); //打開(kāi)文件,只讀模式 if(fp==NULL) //若fopen()函數(shù)返回NULL則打開(kāi)文件失敗 { printf("文件打開(kāi)失敗\n"); } else { for(i=0;i<5;i++) { fgets(s[i],100,fp); //讀取字符串存入數(shù)組 printf("%s",s[i]); //輸出字符串 } } fclose(fp); return 0; }
運(yùn)行結(jié)果:
格式化讀寫(xiě):
1. fprintf()函數(shù)
fprintf(fp,format, arg1, arg2,….,argn);
fprintf()用來(lái)將輸出項(xiàng)按指定的格式寫(xiě)入指定的文本文件中,其中格式化規(guī)定與printf()函數(shù)功能相似,所不同的只是fprintf()函數(shù)是將輸出的內(nèi)容寫(xiě)入文件中,而printf()函數(shù)則是在屏幕輸出。
其中,fp為文件指針,format為指定的格式控制字符串;arg1~argn為輸出項(xiàng),可以是字符、 字符串或各種類(lèi)型的數(shù)值。該函數(shù)的功能是按格式控制字符串format給定的格式,將輸出項(xiàng)arg1,arg2,……,argn的值寫(xiě)入fp所指向的文件中。
函數(shù)返回值:如果函數(shù)執(zhí)行成功,返回實(shí)際寫(xiě)入文件的字符個(gè)數(shù);若出現(xiàn)錯(cuò)誤,返回負(fù)數(shù)。
具體格式:
fprintf(fp,"%s",s[i]); //在文件中寫(xiě)入數(shù)組中的字符串
2. fscanf()函數(shù)
fscanf(fp,format,arg1,arg2,…..,argn);
fscanf()用來(lái)按規(guī)定的格式從指定的文本文件中讀取數(shù)據(jù)。它與scanf()函數(shù)的功能相似,都是按規(guī)定的格式讀數(shù)據(jù)的函數(shù),只是fscanf()函數(shù)讀的對(duì)象不是鍵盤(pán)區(qū),而是文件。
其中,fp為文件指針,format為指定的格式控制字符串;arg1~argn為輸入項(xiàng)的地址。該函數(shù)的功能是從文件指針fp所指的文本文件中讀取數(shù)據(jù),按格式控制字符串format給定的格式賦予輸入項(xiàng)arg1,arg2,……,argn中。
函數(shù)返回值:如果該函數(shù)執(zhí)行成功,返回讀取項(xiàng)目個(gè)數(shù);如果遇到文件末尾,返回EOF;如果賦值失敗,返回0.
具體格式:
fscanf(fp,"%s",s[i]); //讀取字符串存入數(shù)組
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言深入探究sizeof與整型數(shù)據(jù)存儲(chǔ)及數(shù)據(jù)類(lèi)型取值范圍
在main函數(shù)中,sizeof是可以正常工作的,但是在自定義函數(shù)中就不可以了。所以本文將為大家詳細(xì)講解一下關(guān)鍵字sizeof、整型數(shù)據(jù)存儲(chǔ)深入、數(shù)據(jù)類(lèi)型取值范圍深入2022-07-07基于C語(yǔ)言實(shí)現(xiàn)UDP客戶(hù)端
UDP是一種面向無(wú)連接的傳輸層協(xié)議,廣泛應(yīng)用于實(shí)時(shí)性要求較高的場(chǎng)景,本文將介紹如何使用C語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的UDP客戶(hù)端程序,有需要的可以參考下2024-10-10C語(yǔ)言開(kāi)發(fā)之歸并排序詳解及實(shí)例
這篇文章主要介紹了 C語(yǔ)言開(kāi)發(fā)之歸并排序詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-03-03C++ txt 文件讀取,并寫(xiě)入結(jié)構(gòu)體中的操作
這篇文章主要介紹了C++ txt 文件讀取,并寫(xiě)入結(jié)構(gòu)體中的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12C++語(yǔ)言編寫(xiě)寫(xiě)日志類(lèi)
這篇文章主要介紹了C++語(yǔ)言編寫(xiě)寫(xiě)日志類(lèi)的相關(guān)資料,支持寫(xiě)日志級(jí)別設(shè)置、支持多線程、支持可變形參表寫(xiě)日志,需要的朋友可以參考下2015-12-12C++中形參和實(shí)參的區(qū)別及說(shuō)明
這篇文章主要介紹了C++中形參和實(shí)參的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02C++ vector及實(shí)現(xiàn)自定義vector以及allocator和iterator方式
這篇文章主要介紹了C++ vector及實(shí)現(xiàn)自定義vector以及allocator和iterator方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08OpenMP task construct 實(shí)現(xiàn)原理及源碼示例解析
這篇文章主要為大家介紹了OpenMP task construct 實(shí)現(xiàn)原理及源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03C語(yǔ)言實(shí)現(xiàn)自動(dòng)存取款機(jī)模擬系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)自動(dòng)存取款機(jī)模擬系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05