




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
9.1概述“文件”一般是指存儲(chǔ)在外部存儲(chǔ)器中的一組相關(guān)數(shù)據(jù)的集合。路徑分為絕對(duì)路徑與相對(duì)路徑:絕對(duì)路徑:文件從根目錄開始,按照一級(jí)一級(jí)的順序指到文件為止。例如:“D:\C語言\第9章\例9.1\file1.txt”。相對(duì)路徑:相對(duì)于當(dāng)前的文件位置而言。例如:若file1與當(dāng)前程序的“main.c”文件存放在同一文件夾下,可以使用“file1.txt”這樣相對(duì)于程序位置的路徑。9.1概述C語言中,為終端提供了標(biāo)準(zhǔn)輸入文件(stdin)和標(biāo)準(zhǔn)輸出文件(stdout)。鍵盤稱為標(biāo)準(zhǔn)輸入文件,scanf()、getchar()函數(shù)從stdin文件獲取輸入數(shù)據(jù);顯示器稱為標(biāo)準(zhǔn)輸出文件,printf()、putchar()函數(shù)向stdout文件輸出數(shù)據(jù)。9.1概述文本文件/ASCII碼文件字符序列存儲(chǔ)每個(gè)字符的ASCII碼如:127在文件中占3個(gè)字節(jié),分別存放這3個(gè)字符的ASCII碼,即49,50,55二進(jìn)制文件字節(jié)序列,沒有字符變換按照數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式存儲(chǔ)如整數(shù)127,在內(nèi)存占2個(gè)字節(jié),為0000000001111111,則文件中存儲(chǔ)為0000000001111111,占2個(gè)字節(jié)
根據(jù)文件中數(shù)據(jù)的存儲(chǔ)形式不同,文件分為兩種:9.1概述
整數(shù)“202147”在不同文件中的存儲(chǔ)形式:0000000000000011000101011010001120214700000000000000110001010110100011001100100011000000110010001100010011010010100111文本文件二進(jìn)制文件202147內(nèi)存9.2文件打開與關(guān)閉文件打開FILE*fopen(char*filename,char*mode);參數(shù):*filename為文件名;*mode為打開方式,文件的打開方式可以為只讀、只寫、讀寫等;返回值:文件的相關(guān)信息,包括文件名、當(dāng)前位置指針、緩沖區(qū)狀況等,若打開文件出錯(cuò),則返回NULL;功能:以mode形式,打開名為filename文件。9.2文件打開與關(guān)閉文件的打開方式打開方式含義"r"以只讀的形式打開文本文件"w"以寫入的形式打開文本文件"a"以追加的形式打開文本文件"+"與上面字符串組合,表示以讀和寫方式打開文件"t"以文本形式打開,此方式為文件打開的默認(rèn)方式,可以省略不寫"b"以二進(jìn)制形式打開9.2文件打開與關(guān)閉文件的打開方式例如:FILE*fp;fp=fopen("abc.txt","a+");表示以讀寫形式打開當(dāng)前文件夾下的"abc.txt"文件,原文件內(nèi)容不刪除,并在文件末尾進(jìn)行添加。fp=fopen("abc.bin","wb+");表示新建名為"abc.bin"的二進(jìn)制文件,該文件可進(jìn)行讀和寫操作。9.2文件打開與關(guān)閉文件關(guān)閉intfclose(FILE*fp);參數(shù):
*fp為程序前面獲取到的文件指針。返回值:當(dāng)文件正常關(guān)閉時(shí),函數(shù)返回值為0;若關(guān)閉文件出錯(cuò),則返回非零值;功能:關(guān)閉fp指向的文件。注意:對(duì)于以“w”方式打開的文件,fclose會(huì)在關(guān)閉該文件之前沖刷緩沖區(qū)。設(shè)計(jì)程序,實(shí)現(xiàn)文件的打開與關(guān)閉。
例9-19.3文件的讀寫讀/寫字符函數(shù)——讀intfgetc(FILE*fp);參數(shù):*fp為已打開文件的文件指針;返回值:在文件中的讀取到的字符,如果讀取字符出錯(cuò)(已讀取到文件末尾),則返回一個(gè)文件結(jié)束標(biāo)志EOF。功能:從fp指向的文件中讀取一個(gè)字符。
例如: charch; ch=fgetc(fp);9.3文件的讀寫EOF與feof()函數(shù)EOF為在stdio.h中定義的常量,值為-1,用來表示文件內(nèi)容的結(jié)束。feof()函數(shù)來判斷文件位置指針是否已指向末尾,若已指向末尾,則函數(shù)返回值為非零值;否則返回0值。EOF不可以代替feof()函數(shù),EOF包含了文件出錯(cuò)的情況,不可以完全用來作為判斷文件結(jié)束的依據(jù)。9.3文件的讀寫位置指針用來指向當(dāng)前讀寫的位置。
每次文件打開時(shí),該指針總指向文件的第一個(gè)字節(jié)。使用fgetc()函數(shù)后,該指針會(huì)自動(dòng)向后移動(dòng)一個(gè)字節(jié),所以可以通過連續(xù)多次使用fgetc()函數(shù),讀取多個(gè)字符,無需手動(dòng)更改位置指針。設(shè)計(jì)程序,實(shí)現(xiàn)輸出文件中的字符。
例9-29.3文件的讀寫讀/寫字符函數(shù)——寫intfputc(intc,F(xiàn)ILE*fp);參數(shù):*fp表示已打開的文件指針,c表示需要輸出的字符,可以為變量或常量;返回值:當(dāng)輸出成功時(shí),返回值為輸出值,若出錯(cuò),則返回EOF;功能:把變量c的值寫到fp所指向的文件中。
例如: charch='a'; fputc(ch,fp);設(shè)計(jì)程序,實(shí)現(xiàn)通過鍵盤向文件中輸入一串字符,直到輸入“#”時(shí)停止。
例9-39.3文件的讀寫讀/寫字符串函數(shù)——讀char*fgets(char*s,intn,FILE*fp);參數(shù):*fp表示文件指針,n表示可以存儲(chǔ)的字符長度,將讀取到的內(nèi)容存放到字符指針*s中;返回值:若讀取成功,則返回字符數(shù)組首地址;讀取失敗時(shí)則返回NULL;
如果開始讀取時(shí)文件位置指針已經(jīng)指向了文件末尾,那么將讀取不到任何字符,也將返回NULL。9.3文件的讀寫讀/寫字符串函數(shù)——讀abcdefg\09.3文件的讀寫讀/寫字符串函數(shù)——讀例如:#defineN11charstr[N];FILE*fp=fopen("file1.txt","r");fgets(str,N,fp);fgets()最多只能讀取一行數(shù)據(jù),不能跨行。9.3文件的讀寫讀/寫字符串函數(shù)——寫intfputs(char*s,F(xiàn)ILE*fp);參數(shù):*fp表示文件指針,*s表示需要輸出的字符串;返回值:若參數(shù)輸出成功,為非負(fù)值;否則返回EOF。功能:將s所指向的字符串輸出到fp指向的文件中。例如:char*str="IloveChina!";FILE*fp=fopen("file1.txt","a+");fputs(str,fp);設(shè)計(jì)程序,實(shí)現(xiàn)從鍵盤輸入一個(gè)字符串,添加在文件的下一行。
例9-49.3文件的讀寫格式化讀/寫函數(shù)——讀intfscanf(FILE*fp,char*format,[argument...]);參數(shù):*fp為文件指針,*format為格式控制字符串,argument為輸入列表(可選);返回值:已輸入的數(shù)據(jù)個(gè)數(shù);功能:從文件中按照指定的格式,將數(shù)據(jù)存放到內(nèi)存中。例如: fscanf(fp,"%d",&a);
fscanf(stdin,"%d",&a); =scanf("%d",&a);9.3文件的讀寫格式化讀/寫函數(shù)——寫intfprintf(FILE*fp,char*format,[argument...]);參數(shù):*fp為文件指針,*format為格式控制字符串,argument為輸出列表(可選);返回值:輸出的數(shù)據(jù)個(gè)數(shù);功能:將變量按照指定格式輸出到文件中。例如: fprintf(fp,"%d",a);
fprintf(stdout,"%d",a);
=printf("%d",a);設(shè)計(jì)程序,實(shí)現(xiàn)從鍵盤輸入3名學(xué)生的信息,包括姓名、數(shù)學(xué)、英語、物理三門課程成績,并計(jì)算每個(gè)學(xué)生的平均分,輸出到文件中,再從文件中讀取,在顯示到屏幕上。
例9-59.3文件的讀寫讀/寫數(shù)據(jù)塊函數(shù)——讀unsignedintfread(void*ptr,unsignedintsize,unsignedintnmemb,F(xiàn)ILE*fp);參數(shù):*ptr為數(shù)據(jù)的存放地址,size為讀取數(shù)據(jù)塊的字節(jié)數(shù);nmemb為讀取數(shù)據(jù)項(xiàng)的個(gè)數(shù);*fp為文件指針;返回值:所讀數(shù)據(jù)項(xiàng)個(gè)數(shù);功能:從文件中讀取nmemb個(gè)長度為size的數(shù)據(jù)項(xiàng),并存入內(nèi)存中。適用于:將文件中的一串連續(xù)的數(shù)據(jù),依次讀取到一個(gè)數(shù)組中9.3文件的讀寫讀/寫數(shù)據(jù)塊函數(shù)——讀例如:內(nèi)存中有結(jié)構(gòu)體數(shù)組stu,其中包含10個(gè)元素,每個(gè)元素都用來存放學(xué)生的信息,文件中存儲(chǔ)著10個(gè)學(xué)生對(duì)應(yīng)的數(shù)據(jù),要將文件中的數(shù)據(jù)讀取到數(shù)組stu中,可使用如下形式:fread(stu,sizeof(str),10,fp);ORfor(i=0;i<10;i++) fread(&str[i],sizeof(str),1,fp);9.3文件的讀寫讀/寫數(shù)據(jù)塊函數(shù):unsignedintfwrite(void*ptr,unsignedintsize,unsignedintnmemb,F(xiàn)ILE*fp);參數(shù):ptr為輸出數(shù)據(jù)的首地址,size是輸出數(shù)據(jù)塊的字節(jié)數(shù);nmemb為寫入數(shù)據(jù)項(xiàng)的個(gè)數(shù);*fp為文件指針。返回值:寫入文件的數(shù)據(jù)項(xiàng)個(gè)數(shù)。功能:將ptr所指向的連續(xù)nmemb個(gè)size大小的數(shù)據(jù)輸出到文件中。設(shè)計(jì)程序,實(shí)現(xiàn)從鍵盤輸入5個(gè)學(xué)生的姓名、學(xué)號(hào)、年齡、家庭住址,并存儲(chǔ)到文件中。
例9-6設(shè)計(jì)程序,實(shí)現(xiàn)將例題9.6中文件的數(shù)據(jù)讀出,輸出在屏幕上。
例9-79.3文件定位fseek()函數(shù)intfseek(FILE*fp,longintoffset,intfrom);參數(shù):fp為文件指針;offse為移動(dòng)的字節(jié)數(shù),可為負(fù)值,表示從當(dāng)前位置反方向偏移;from為從哪里開始移動(dòng),可選擇文件首、當(dāng)前位置、文件尾三種。返回值:成功返回當(dāng)前位置;否則返回-1;功能:將文件的位置指針按照from要求移動(dòng)offset個(gè)字節(jié)。9.3文件定位from的值及其所表示的位置from值from的常量含義0SEEK_SET相對(duì)的偏移量的參照位置為文件首1SEEK_CUR相對(duì)的偏移量的參照位置為位置指針的當(dāng)前位置2SEEK_END相對(duì)的偏移量的參照位置為文件尾fseek(fp,10L,SEEK_SET);將位置指針移動(dòng)到離文件首部10個(gè)字節(jié)處fseek(fp,10L,1);將位置指針移動(dòng)到距離當(dāng)前位置10個(gè)字節(jié)處fseek(fp,-10L,SEEK_END);將位置指針從文件尾向前移動(dòng)10個(gè)字節(jié)移動(dòng)到文件首:fseek(fp,0L,SEEK_SET);移動(dòng)到文件尾:fseek(fp,0L,SEEK_END);9.3文件定位rewind
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45996-2025科技評(píng)估指標(biāo)體系構(gòu)建通用要求
- 常用股東退股協(xié)議書
- 基本安全消防知識(shí)培訓(xùn)課件
- 初三化學(xué)金屬材料與冶煉測試試卷及答案
- 中小企業(yè)質(zhì)量成本核算與控制的深度剖析與實(shí)踐策略
- ^(31)P-MRS在肝細(xì)胞癌研究中的應(yīng)用與價(jià)值探究
- 初三道德與法治愛國敬業(yè)精神試卷及答案
- 八年級(jí)數(shù)學(xué)二元一次方程組單元試卷及答案
- 基坑開挖安全知識(shí)培訓(xùn)課件
- 2025心理健康服務(wù)產(chǎn)業(yè)鏈、市場供需現(xiàn)狀及行業(yè)未來發(fā)展趨勢分析報(bào)告
- 2025年食品安全培訓(xùn)考試試題及答案
- 2025年長江證券港股通開通測試題及答案
- 2025西安亮麗電力集團(tuán)有限責(zé)任公司招聘10人筆試備考題庫及1套完整答案詳解
- 成都銀行總行招聘考試真題2024
- 基孔肯雅熱培訓(xùn)測試題含答案
- 小額貸款公司貸款五級(jí)分類辦法
- 2025公衛(wèi)執(zhí)業(yè)醫(yī)師考試試題(附答案)
- 醫(yī)院藥品質(zhì)量管理課件
- 2025年上海市中考招生考試數(shù)學(xué)真題試卷(真題+答案)
- 2025年廣東省中考英語試題卷(含答案解析)
- 腎病綜合征患者飲食與液體平衡管理:核心原則、臨床策略與患者教育
評(píng)論
0/150
提交評(píng)論