版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
9.1概述“文件”一般是指存儲在外部存儲器中的一組相關(guān)數(shù)據(jù)的集合。路徑分為絕對路徑與相對路徑:絕對路徑:文件從根目錄開始,按照一級一級的順序指到文件為止。例如:“D:\C語言\第9章\例9.1\file1.txt”。相對路徑:相對于當(dāng)前的文件位置而言。例如:若file1與當(dāng)前程序的“main.c”文件存放在同一文件夾下,可以使用“file1.txt”這樣相對于程序位置的路徑。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碼文件字符序列存儲每個字符的ASCII碼如:127在文件中占3個字節(jié),分別存放這3個字符的ASCII碼,即49,50,55二進制文件字節(jié)序列,沒有字符變換按照數(shù)據(jù)在內(nèi)存中的存儲形式存儲如整數(shù)127,在內(nèi)存占2個字節(jié),為0000000001111111,則文件中存儲為0000000001111111,占2個字節(jié)
根據(jù)文件中數(shù)據(jù)的存儲形式不同,文件分為兩種:9.1概述
整數(shù)“202147”在不同文件中的存儲形式:0000000000000011000101011010001120214700000000000000110001010110100011001100100011000000110010001100010011010010100111文本文件二進制文件202147內(nèi)存9.2文件打開與關(guān)閉文件打開FILE*fopen(char*filename,char*mode);參數(shù):*filename為文件名;*mode為打開方式,文件的打開方式可以為只讀、只寫、讀寫等;返回值:文件的相關(guān)信息,包括文件名、當(dāng)前位置指針、緩沖區(qū)狀況等,若打開文件出錯,則返回NULL;功能:以mode形式,打開名為filename文件。9.2文件打開與關(guān)閉文件的打開方式打開方式含義"r"以只讀的形式打開文本文件"w"以寫入的形式打開文本文件"a"以追加的形式打開文本文件"+"與上面字符串組合,表示以讀和寫方式打開文件"t"以文本形式打開,此方式為文件打開的默認(rèn)方式,可以省略不寫"b"以二進制形式打開9.2文件打開與關(guān)閉文件的打開方式例如:FILE*fp;fp=fopen("abc.txt","a+");表示以讀寫形式打開當(dāng)前文件夾下的"abc.txt"文件,原文件內(nèi)容不刪除,并在文件末尾進行添加。fp=fopen("abc.bin","wb+");表示新建名為"abc.bin"的二進制文件,該文件可進行讀和寫操作。9.2文件打開與關(guān)閉文件關(guān)閉intfclose(FILE*fp);參數(shù):
*fp為程序前面獲取到的文件指針。返回值:當(dāng)文件正常關(guān)閉時,函數(shù)返回值為0;若關(guān)閉文件出錯,則返回非零值;功能:關(guān)閉fp指向的文件。注意:對于以“w”方式打開的文件,fclose會在關(guān)閉該文件之前沖刷緩沖區(qū)。設(shè)計程序,實現(xiàn)文件的打開與關(guān)閉。
例9-19.3文件的讀寫讀/寫字符函數(shù)——讀intfgetc(FILE*fp);參數(shù):*fp為已打開文件的文件指針;返回值:在文件中的讀取到的字符,如果讀取字符出錯(已讀取到文件末尾),則返回一個文件結(jié)束標(biāo)志EOF。功能:從fp指向的文件中讀取一個字符。
例如: charch; ch=fgetc(fp);9.3文件的讀寫EOF與feof()函數(shù)EOF為在stdio.h中定義的常量,值為-1,用來表示文件內(nèi)容的結(jié)束。feof()函數(shù)來判斷文件位置指針是否已指向末尾,若已指向末尾,則函數(shù)返回值為非零值;否則返回0值。EOF不可以代替feof()函數(shù),EOF包含了文件出錯的情況,不可以完全用來作為判斷文件結(jié)束的依據(jù)。9.3文件的讀寫位置指針用來指向當(dāng)前讀寫的位置。
每次文件打開時,該指針總指向文件的第一個字節(jié)。使用fgetc()函數(shù)后,該指針會自動向后移動一個字節(jié),所以可以通過連續(xù)多次使用fgetc()函數(shù),讀取多個字符,無需手動更改位置指針。設(shè)計程序,實現(xiàn)輸出文件中的字符。
例9-29.3文件的讀寫讀/寫字符函數(shù)——寫intfputc(intc,F(xiàn)ILE*fp);參數(shù):*fp表示已打開的文件指針,c表示需要輸出的字符,可以為變量或常量;返回值:當(dāng)輸出成功時,返回值為輸出值,若出錯,則返回EOF;功能:把變量c的值寫到fp所指向的文件中。
例如: charch='a'; fputc(ch,fp);設(shè)計程序,實現(xiàn)通過鍵盤向文件中輸入一串字符,直到輸入“#”時停止。
例9-39.3文件的讀寫讀/寫字符串函數(shù)——讀char*fgets(char*s,intn,FILE*fp);參數(shù):*fp表示文件指針,n表示可以存儲的字符長度,將讀取到的內(nèi)容存放到字符指針*s中;返回值:若讀取成功,則返回字符數(shù)組首地址;讀取失敗時則返回NULL;
如果開始讀取時文件位置指針已經(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è)計程序,實現(xiàn)從鍵盤輸入一個字符串,添加在文件的下一行。
例9-49.3文件的讀寫格式化讀/寫函數(shù)——讀intfscanf(FILE*fp,char*format,[argument...]);參數(shù):*fp為文件指針,*format為格式控制字符串,argument為輸入列表(可選);返回值:已輸入的數(shù)據(jù)個數(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ù)個數(shù);功能:將變量按照指定格式輸出到文件中。例如: fprintf(fp,"%d",a);
fprintf(stdout,"%d",a);
=printf("%d",a);設(shè)計程序,實現(xiàn)從鍵盤輸入3名學(xué)生的信息,包括姓名、數(shù)學(xué)、英語、物理三門課程成績,并計算每個學(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ù)項的個數(shù);*fp為文件指針;返回值:所讀數(shù)據(jù)項個數(shù);功能:從文件中讀取nmemb個長度為size的數(shù)據(jù)項,并存入內(nèi)存中。適用于:將文件中的一串連續(xù)的數(shù)據(jù),依次讀取到一個數(shù)組中9.3文件的讀寫讀/寫數(shù)據(jù)塊函數(shù)——讀例如:內(nèi)存中有結(jié)構(gòu)體數(shù)組stu,其中包含10個元素,每個元素都用來存放學(xué)生的信息,文件中存儲著10個學(xué)生對應(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ù)項的個數(shù);*fp為文件指針。返回值:寫入文件的數(shù)據(jù)項個數(shù)。功能:將ptr所指向的連續(xù)nmemb個size大小的數(shù)據(jù)輸出到文件中。設(shè)計程序,實現(xiàn)從鍵盤輸入5個學(xué)生的姓名、學(xué)號、年齡、家庭住址,并存儲到文件中。
例9-6設(shè)計程序,實現(xiàn)將例題9.6中文件的數(shù)據(jù)讀出,輸出在屏幕上。
例9-79.3文件定位fseek()函數(shù)intfseek(FILE*fp,longintoffset,intfrom);參數(shù):fp為文件指針;offse為移動的字節(jié)數(shù),可為負(fù)值,表示從當(dāng)前位置反方向偏移;from為從哪里開始移動,可選擇文件首、當(dāng)前位置、文件尾三種。返回值:成功返回當(dāng)前位置;否則返回-1;功能:將文件的位置指針按照from要求移動offset個字節(jié)。9.3文件定位from的值及其所表示的位置from值from的常量含義0SEEK_SET相對的偏移量的參照位置為文件首1SEEK_CUR相對的偏移量的參照位置為位置指針的當(dāng)前位置2SEEK_END相對的偏移量的參照位置為文件尾fseek(fp,10L,SEEK_SET);將位置指針移動到離文件首部10個字節(jié)處fseek(fp,10L,1);將位置指針移動到距離當(dāng)前位置10個字節(jié)處fseek(fp,-10L,SEEK_END);將位置指針從文件尾向前移動10個字節(jié)移動到文件首:fseek(fp,0L,SEEK_SET);移動到文件尾:fseek(fp,0L,SEEK_END);9.3文件定位rewind
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 護理感染控制與公共衛(wèi)生競賽
- 2.6.6.3精神科危重患者護理常規(guī)學(xué)習(xí)培訓(xùn)課件
- 大豐市小海中學(xué)高二生物三同步課程講義第講免疫調(diào)節(jié)(四)
- 2025年辦公設(shè)備維修服務(wù)協(xié)議
- 《液體劑型保健用品生產(chǎn)技術(shù)規(guī)范》標(biāo)準(zhǔn) 征求意見稿
- 基于大數(shù)據(jù)的電子支付異常監(jiān)測系統(tǒng)
- 2025年養(yǎng)寵訓(xùn)練新工具 正向激勵A(yù)I助手評測
- 城市交通智能調(diào)控-第2篇
- 基于AI的注入攻擊檢測
- 2026 年中職掘進技術(shù)(隧道施工基礎(chǔ))試題及答案
- 2025年沈陽華晨專用車有限公司公開招聘備考筆試題庫及答案解析
- 2025年云南省人民檢察院聘用制書記員招聘(22人)筆試考試參考試題及答案解析
- 2025天津市第二批次工會社會工作者招聘41人考試筆試備考試題及答案解析
- 江西省三新協(xié)同體2025-2026年高一上12月地理試卷(含答案)
- 2025新疆維吾爾自治區(qū)哈密市法院、檢察院系統(tǒng)招聘聘用制書記員(31人)筆試考試參考試題及答案解析
- 空調(diào)安全知識培訓(xùn)
- 2025重慶醫(yī)科大學(xué)附屬兒童醫(yī)院宜賓醫(yī)院招聘34人考試筆試備考題庫及答案解析
- 《醫(yī)學(xué)倫理》期末考試復(fù)習(xí)題庫(含答案)
- 初中生金融知識
- 暖通設(shè)備運行調(diào)試方案
- 流感相關(guān)知識試題及答案
評論
0/150
提交評論