版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
C語言程序設(shè)計創(chuàng)建第一個C語言程序項目1“學(xué)生成績管理系統(tǒng)”中相關(guān)數(shù)據(jù)設(shè)計及簡單處理項目2項目中學(xué)生成績的等級判定項目3項目中的設(shè)計數(shù)據(jù)處理及封面與菜單的初步項目4學(xué)生成績的分組匯總程序項目5利用數(shù)組完善項目中數(shù)據(jù)的處理項目6利用函數(shù)進行項目的整體框架設(shè)計項目7利用結(jié)構(gòu)體實現(xiàn)項目項目8利用指針優(yōu)化項目項目9利用文件完善項目項目10項目10利用文件完善項目目標(biāo)TARGET知識目標(biāo)理解文件的概念。
掌握文件的基本操作。
掌握文本文件和二進制文件的讀寫方法。
掌握文件的定位方法。目標(biāo)TARGET技能目標(biāo)學(xué)會使用文件進行數(shù)據(jù)的存儲及處理。
能夠用文件完善學(xué)生成績管理系統(tǒng)。項目中學(xué)生數(shù)據(jù)的存儲和反復(fù)使用任務(wù)10.1任務(wù)10.1項目中學(xué)生數(shù)據(jù)的存儲和反復(fù)使用
任務(wù)描述
在學(xué)生成績管理系統(tǒng)中,所涉及的數(shù)據(jù)是比較大的,而每次運行程序時都要通過鍵盤輸入數(shù)據(jù),非常麻煩。程序退出時,數(shù)據(jù)也消失,數(shù)據(jù)只能保存在內(nèi)存中,不能長期保存。
本任務(wù)使用外部存儲文件來保存數(shù)據(jù),實現(xiàn)對數(shù)據(jù)的存儲和讀取,能安全有效地長期保存數(shù)據(jù),還能提供數(shù)據(jù)共享。任務(wù)分析案例9中的數(shù)據(jù)是存儲在內(nèi)存中的,當(dāng)程序結(jié)束運行時,這些數(shù)據(jù)全部消失。如果能將數(shù)據(jù)保存在文件中,將大大減少輸入工作量,而且輸出的結(jié)果也可以長期保留。問題的要點是:1)如何將內(nèi)存中的數(shù)據(jù)存儲在文件中。2)反之,如何從磁盤文件中的數(shù)據(jù)載入內(nèi)存。要完成上面的任務(wù),必須了解文件的基本概念,熟練掌握文件讀寫函數(shù)。1認識文件Part◎文件的讀寫◎文件概述◎?qū)W生成績管理系統(tǒng)的數(shù)據(jù)存取文件概述
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。1.文件的概念文件是指存儲在外部介質(zhì)上的數(shù)據(jù)集合,為標(biāo)識一個文件,每個文件都必須有一個文件名,文件名的一般形式為:文件名.[擴展名],其中擴展名是可選的,并按類別命名,例如,C語言源程序的擴展名是C,而可執(zhí)行文件的擴展名是EXE等等。文件概述
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。2.文件類型(1)按文件的邏輯結(jié)構(gòu)分1)記錄文件:由具有一定結(jié)構(gòu)的記錄組成(定長和不定長)。2)流式文件:由一個個字符(字節(jié))數(shù)據(jù)順序組成。文件概述
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。(3)按數(shù)據(jù)的組織形式分1)文本文件:也稱ASCII碼文件。這種文件在保存時,每個字符對應(yīng)一個字節(jié),用于存儲對應(yīng)的ASCII碼。2)二進制文件:不是保存ASCII碼,而是按二進制的編碼方式來保存文件內(nèi)容。2.文件類型文件概述
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。3.文件的用途1)使程序與數(shù)據(jù)分離,數(shù)據(jù)文件的改動不會引起程序的改動。2)使數(shù)據(jù)共享,不同程序可以訪問同一數(shù)據(jù)文件中的數(shù)據(jù)。3)程序運行的中間數(shù)據(jù)或者結(jié)果數(shù)據(jù)可以長期保存。文件概述
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。4.文件的處理方式1)緩沖文件系統(tǒng):又稱為標(biāo)準(zhǔn)文件系統(tǒng)或高級文件系統(tǒng),是目前常用的文件系統(tǒng),也是ANSIC建議使用的文件系統(tǒng)。系統(tǒng)自動為正在使用的文件開辟內(nèi)存緩沖區(qū)??蓽p少主機和外部設(shè)備頻繁交換數(shù)據(jù)的次數(shù),緩沖文件系統(tǒng)的輸入輸出如下圖所示。文件概述
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。4.文件的處理方式2)非緩沖文件系統(tǒng)又稱為低級文件系統(tǒng),它提供的文件輸入輸出操作函數(shù)更接近于操作系統(tǒng),它不能自動設(shè)置緩沖區(qū),而是由用戶根據(jù)所處理的數(shù)據(jù)大小在程序中設(shè)置,其輸入輸出示意圖如下圖所示。因此,非緩沖文件系統(tǒng)的操作與機器本身有關(guān),使用起來較為困難,但它節(jié)省內(nèi)存,執(zhí)行效率較高。文件概述
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。5.文件的定義一般情況下,要使用一個文件,系統(tǒng)將在內(nèi)存中為這一文件開辟一個“文件信息區(qū)”,用來存放文件的有關(guān)信息,如文件當(dāng)前的讀寫位置、緩沖區(qū)中未被處理的字符數(shù)、文件操作方式、下一個字符的位置、文件緩沖區(qū)的位置等。這些信息保存在一個結(jié)構(gòu)體中,該結(jié)構(gòu)體由系統(tǒng)定義的,定義在stdio.h的頭文件中。VisualC++6.0系統(tǒng)中具體定義形式為:文件概述
struct_iobuf{char*_ptr;/*文件輸入的下一個位置*/int_cnt;/*當(dāng)前緩沖區(qū)的相對位置*/char*_base;/*數(shù)據(jù)緩沖區(qū)的位置*/int_flag;/*文件狀態(tài)標(biāo)志*/int_file;/*用于有效性檢驗*/int_charbuf;/*如無緩沖區(qū)不讀取字符*/int_bufsiz;/*緩沖區(qū)的大小*/char*_tmpfname;/*臨時文件名*/};typedefstruct_iobufFILE;文件概述
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。5.文件的定義C語言對文件的操作并不是直接通過文件名進行的,而是根據(jù)文件名生成一個指向FILE結(jié)構(gòu)類型的指針。也就是首先定義一個FILE的指針,例如:FILE*fp;
通過fp使用結(jié)構(gòu)體變量中的文件信息訪問文件。也就是說,C程序中是通過文件指針變量fp找到與它相關(guān)的文件的,通過該指針對文件進行操作。注意:1)文件指針?biāo)傅氖且粋€名為FILE的結(jié)構(gòu)體類型,在頭文件stdio.h中定義,結(jié)構(gòu)體FILE的細節(jié)對一般用戶來說并不重要,不必詳細了解FILE的具體組成結(jié)構(gòu)。2)經(jīng)過定義的文件指針,就可以用來指向一個文件。3)FILE類型及所有文件的讀寫函數(shù)和相關(guān)常量都定義在文件stdio.h中,因此在源程序的開頭要包含頭文件stdio.h。文件概述
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。6.文件的打開和關(guān)閉文件的讀寫操作之前,必須先打開文件;使用結(jié)束后,為了避免數(shù)據(jù)丟失,應(yīng)立即關(guān)閉文件。即文件的使用步驟一般為:首先打開文件,然后進行文件的讀寫操作,最后關(guān)閉文件。文件的打開和關(guān)閉都是通過函數(shù)來實現(xiàn)的。文件概述
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。6.文件的打開和關(guān)閉(1)文件的打開C語言中,使用fopen()函數(shù)來打開文件。格式:FILE*fp;fp=fopen("文件名","操作方式");功能:以指定的操作方式打開一個文件。若文件正常打開,返回指向文件結(jié)構(gòu)體的指針;否則打開失敗,返回NULL。說明:1)fopen()函數(shù)在執(zhí)行時返回一個FILE類型的指針,賦給一個文件指針變量fp,使fp與被打開的文件聯(lián)系起來,而后對文件的讀寫操作就可以通過fp來進行。2)“文件名”指要打開文件的文件名,若不在當(dāng)前目錄下,則要寫絕對路徑。3)“操作方式”是指對打開文件的訪問形式,取值及含義如表所示。操作方式含義文件不存在時文件存在時r只讀(文本文件)出錯正常打開w只寫(文本文件)建立新文件文件原有內(nèi)容丟失a添加(文本文件)建立新文件在文件原有內(nèi)容末尾追加rb只讀(二進制文件)出錯正常打開wb只寫(二進制文件)建立新文件文件原有內(nèi)容丟失ab添加(二進制文件)建立新文件在文件原有內(nèi)容末尾追加r+讀/寫(文本文件)出錯正常打開w+寫/讀(文本文件)建立新文件文件原有內(nèi)容丟失a+讀/添加(文本文件)建立新文件在文件原有內(nèi)容末尾追加rb+讀/寫(二進制文件)出錯正常打開wb+寫/讀(二進制文件)建立新文件文件原有內(nèi)容丟失ab+讀/添加(二進制文件)建立新文件在文件原有內(nèi)容末尾追加文件概述
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。6.文件的打開和關(guān)閉例如:FILE*fp;fp=fopen("test.txt","r");上面代碼表示以讀方式打開當(dāng)前目錄下文件名為“text.txt”的文本文件。程序中一般會考慮作容錯處理,常用的方法如下:if((fp=fopen("文件名","操作方式"))==NULL){printf("打開文件失??!");exit(0);/*結(jié)束程序運行*/}文件概述
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。6.文件的打開和關(guān)閉(2)文件的關(guān)閉使用完一個文件后,應(yīng)使用fclose()函數(shù)及時關(guān)閉。fclose()函數(shù)和fopen()函數(shù)一樣,原型也在stdio.h中,調(diào)用的一般形式為:fclose(文件指針);例如:fclose(fp);fclose函數(shù)也帶回一個值,當(dāng)正常完成關(guān)閉文件時,fclose函數(shù)返回值為0(NULL),否則返回-1(EOF),EOF是stdio.h中定義的符號常量,值為-1。EOF也是文件結(jié)束的標(biāo)志。文件的讀寫
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。1.文本文件的讀寫C語言提供以字符方式讀寫文件的函數(shù)有:1)寫字符函數(shù)intfputc(charch,FILE*fp)2)讀字符函數(shù)intfgetc(FILE*fp)3)寫字符串函數(shù)intfputs(char*string,F(xiàn)ILE*fp)4)讀字符串函數(shù)char*fgets(char*string,intn,FILE*fp)文件的讀寫
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。1.文本文件的讀寫(1)寫字符函數(shù)寫字符函數(shù)fputc()的原型如下:intfputc(charc,FILE*fp)fputc()函數(shù)的一般形式如下:ch=fputc(ch,fp);功能:將字符型變量ch的內(nèi)容寫入文件指針fp所指定的文件中。說明:1)ch為字符變量或字符常量。2)fp為FILE類型的文件指針變量,它由fopen()函數(shù)賦初值。3)打開文件的方式必須是帶“w”或“w+”,并且文件必須存在。文件的讀寫
#include"stdio.h"voidmain(){FILE*fp;/*定義文件指針*/charchInfo[20];/*定義數(shù)組*/inti;fp=fopen("myInfo.txt","w");/*以寫文本文件方式打開文件*/if(fp==NULL)/*如果打開失敗,則結(jié)束程序*/{printf("cannotopenthisfile\n");exit(0);}例10-1編寫程序,從鍵盤輸入一串字符“mayfriendshipforever!”,然后保存在文件myInfo.txt中。文件的讀寫
printf("pleaseinputastring:");gets(chInfo);/*輸入一個字符串*/i=0;while(chInfo[i]!='\0')/*將字符數(shù)組中的字符寫入文件*/{fputc(chInfo[i],fp);/*將字符數(shù)組中的一個字符寫入文件*/i++;}fclose(fp);/*關(guān)閉文件*/例10-1編寫程序,從鍵盤輸入一串字符“mayfriendshipforever!”,然后保存在文件myInfo.txt中。說明:1)語句fp=fopen("myInfo.txt","w");以寫方式打開文本文件myInfo.txt,若該文件不存在,則建立一個新文件;若該文件存在,則重寫該文件。2)文件myInfo.txt所在目錄為程序文件所在目錄,如果想將文件myInfo.txt存放在指定的目錄中,比如目錄d:\mydir(該目錄存在)中可用如下語句:fp=fopen("d:\\mydir\\myInfo.txt","w");3)用if語句判斷文件是否成功打開,如果不成功則直接結(jié)束程序。exit()函數(shù)的作用是關(guān)閉所有文件,終止正在執(zhí)行的程序。4)while循環(huán)語句將輸入的字符串中的字符逐個按順序?qū)懭胛募yInfo.txt中。5)可以用記事本或DOS中的type命令查看文件myInfo.txt,其內(nèi)容和輸入的內(nèi)容一致,為:“mayfriendshipforever!”。文件的讀寫
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。1.文本文件的讀寫(2)讀字符函數(shù)讀字符函數(shù)fgetc()的原型如下:intfgetc(FILE*fp);fgetc()函數(shù)的一般形式如下:ch=fgetc(fp);功能:從文件指針fp所指文件中讀取一個字符。說明:1)ch為字符變量,用來接收從磁盤文件讀入的字符。2)fp為FILE類型的文件指針變量,它由fopen()函數(shù)賦初值。3)打開文件的方式必須是帶“r”或“r+”,并且文件必須存在。4)fgetc()函數(shù)返回一個字符,如果讀到文件尾,則返回的是文件結(jié)束標(biāo)志EOF。出錯時也返回EOF。文件的讀寫
#include"stdio.h"voidmain(intargc,char*args[]){FILE*fp;/*定義文件指針*/charch;fp=fopen(args[1],"r")/*以讀文本文件方式打開文件,文件名由命令行參數(shù)輸入*/if(fp==NULL){printf("cannotopenthisfile\n");exit(0);}
例10-2打開例10.1生成的文件myInfo.txt,將其中的內(nèi)容顯示在屏幕上,要求文件名從命令行參數(shù)輸入。文件的讀寫
ch=fgetc(fp);/*讀取文件中的一個字符存放到ch中*/while(ch!='\0')/*如果文件沒有結(jié)束,重復(fù)下面的操作*/{putchar(ch);/*顯示ch中的字符*/ch=fgetc(fp);/*讀取文件中的一個字符存放的ch中*/}fclose(fp);/*關(guān)閉文件*/}例10-2打開例10.1生成的文件myInfo.txt,將其中的內(nèi)容顯示在屏幕上,要求文件名從命令行參數(shù)輸入。說明:1)main()主函數(shù)可以有兩個參數(shù),第1個參數(shù)argc存放命令行參數(shù)的個數(shù),第2個參數(shù)args[]是一個char型指針數(shù)組,用來存放命令行參數(shù)的字符串的首地址。命令行參數(shù)可以有多個。其中args[0]存放正在執(zhí)行的文件名,args[1]存放第1個參數(shù),args[21]存放第2個參數(shù),…args[n]存放第n個參數(shù)。所以在本程序中,正在執(zhí)行的文件名“LT10-2.exe”存放在args[0]中,要讀取的文件名“myInfo.txt”存放在args[1]中。2)語句fp=fopen(args[1],"r");以只讀方式打開文本文件myInfo.txt。3)用if語句判斷文件是否成功打開,如果不成功,則輸出錯誤信息,直接結(jié)束程序。4)while循環(huán)語句從文件頭開始逐個讀取文件中的字符并輸出到屏幕上,當(dāng)讀到文件結(jié)束標(biāo)志EOF時結(jié)束循環(huán)。EOF在文件stdio.h中定義為-1,是不可顯示字符,不能在屏幕上顯示。說明:5)C語言中提供了函數(shù)feof(),可以用來判斷文件是否結(jié)束。所以本程序的while循環(huán)可以做如下更改:while(!feof(fp)){putchar(ch);ch=fgetc(fp);}feof(fp)用來測試fp所指向的文件當(dāng)前狀態(tài)是否為“文件結(jié)束”,如果是,則函數(shù)值為1(真),否則為0(假)。文件的讀寫
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。1.文本文件的讀寫(3)寫字符串函數(shù)intfputs(char*string,F(xiàn)ILE*fp)fputs()函數(shù)的一般形式如下:ch=fputs(str,fp);功能:將一個字符串寫到文件指針fp所指的文件中。說明:1)fputs()函數(shù)帶返回值。若輸出成功,返回值為0,否則返回值為非零。2)字符串結(jié)束符將不被輸出。因此,為了讀數(shù)據(jù)的方便,使字符串能分開,往往用fputs("\n",fp)語句在每個字符串后加一個換行符'\n'一起存入文件中。文件的讀寫
該程序的解題思路和例10-1相近,請參考前面內(nèi)容。只須對代碼做部分修改,需要修改的地方主要有:1)刪除語句inti;2)可將語句i=0;while(chInfo[i]!='\0'){fputc(chInfo[i],fp);i++;}改為:fputs(chInfo,fp);例10-3用fputs()函數(shù)實現(xiàn)例10-1應(yīng)如何修改程序?請根據(jù)提示寫出完整程序。文件的讀寫
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。1.文本文件的讀寫(4)讀字符串函數(shù)char*fgets(char*string,intn,FILE*fp)fgets()函數(shù)的一般形式如下:fgets(str,n,fp);功能:從文件指針fp所指的文件中讀取一個字符串。說明:1)str為字符數(shù)組或字符型指針。2)n為正整數(shù),表示從文件中讀取不超過n-1個字符,在讀取的最后一個字符后加上串結(jié)束符'\0'。如果在完成讀取n-1個字符之前,遇到換行符或EOF,則停止讀過程。3)fgets()函數(shù)的返回值為str的首地址。若讀到文件尾或出錯,則返回空指針NULL。文件的讀寫
該程序的解題思路與例10-2相近,請參考前面內(nèi)容。只需對代碼做部分修改,需要修改的地方主要有:1)語句charch;改為char*chInfo;例10-4用fgets()函數(shù)實現(xiàn)例10-2應(yīng)如何修改程序?請根據(jù)提示寫出完整程序。2)語句ch=fgetc(fp);while(ch!='\0'){putchar(ch);ch=fgetc(fp);}改為:fgets(chInfo,100,fp);printf("%s",chInfo);注意:fgets()函數(shù)中的第2個參數(shù)為要讀取的字符數(shù),要大于或等于文件的長度+1。文件的讀寫
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。2.二進制文件的讀寫多數(shù)文件是以二進制方式存儲,且需要對整塊數(shù)據(jù)進行讀寫。(1)寫數(shù)據(jù)塊函數(shù)fwrite()函數(shù)的一般形式如下:fwrite(buffer,size,count,fp);功能:將一組數(shù)據(jù)輸出到指定的磁盤文件中。說明:1)buffe用于存放輸出數(shù)據(jù)的緩沖區(qū)指針,即要寫出數(shù)據(jù)段的起始地址。2)size是輸出的每個數(shù)據(jù)項的字節(jié)數(shù)。3)count是指要輸出多少個size字節(jié)的數(shù)據(jù)項數(shù),因此字節(jié)總數(shù)為count*size。4)fp是FILE類型的文件指針變量。文件的讀寫
#include"stdio.h"voidmain(){intiArray[5];/*定義數(shù)組*/inti;FILE*fp;/*定義文件指針*/fp=fopen("test.dat","wb");/*以寫二進制文件的方法打開文件*/if(fp==NULL){printf("cannotopenthisfile\n");exit(0);}
例10-5編一程序從鍵盤輸入5個整數(shù)并寫入到文件test.dat中。文件的讀寫
printf("pleaseinput5integers:");for(i=0;i<5;i++)/*輸入5個整數(shù)存入數(shù)組中*/scanf("%d",&iArray[i]);fwrite(iArray,4*5,1,fp);/*將數(shù)組中的5個整數(shù)寫入文件*/fclose(fp);/*關(guān)閉文件*/例10-5編一程序從鍵盤輸入5個整數(shù)并寫入到文件test.dat中。說明:1)fwrite(iArray,4*5,1,fp)將數(shù)組iArray中的所有元素整體一次性寫入到文件。2)使用fwrite()函數(shù)將數(shù)組中的元素寫入文件時,可以將數(shù)組整體一次性寫入,也可以逐個元素寫入。逐個元素寫入時,每次寫入一個整數(shù),可以用循環(huán)語句實現(xiàn),代碼如下。for(i=0;i<5;i++)fwrite(iArray[i],4,1,fp);3)用fwrite()寫入的文件是二進制文件,不能用記事本打開或者用type命令顯示。文件的讀寫
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。2.二進制文件的讀寫多數(shù)文件是以二進制方式存儲,且需要對整塊數(shù)據(jù)進行讀寫。(2)讀數(shù)據(jù)塊函數(shù)fread()函數(shù)的一般形式如下:fread(buffer,size,count,fp);功能:從指定的文件中讀入一組數(shù)據(jù)。說明:1)buffer用于存放讀入數(shù)據(jù)的緩沖區(qū)指針,即是存放數(shù)據(jù)的起始地址。2)size是讀入的每個數(shù)據(jù)項的字節(jié)數(shù)。3)count是指要讀入多少個size字節(jié)的數(shù)據(jù)項數(shù),因此字節(jié)總數(shù)為count*size。4)fp是FILE類型的文件指針變量。文件的讀寫
#include"stdio.h"voidmain(){intiArray[5];/*定義數(shù)組*/inti;FILE*fp;/*定義文件指針*/fp=fopen("test.dat","rb");/*以讀二進制文件的方法打開文件*/if(fp==NULL){printf("cannotopenthisfile\n");exit(0);}例10-6編寫程序,從例10-5寫入的文件test.dat中讀取數(shù)據(jù)并顯示在屏幕上。文件的讀寫
fread(iArray,4*5,1,fp);/*讀取文件中5個整數(shù)存入數(shù)組*/for(i=0;i<5;i++)/*顯示數(shù)字*/printf("%d\t",iArray[i]);fclose(fp);/*關(guān)閉文件*/}例10-6編寫程序,從例10-5寫入的文件test.dat中讀取數(shù)據(jù)并顯示在屏幕上。說明:1)fread(iArray,4*5,1,fp)讀取文件test.dat中的4*5字節(jié)的數(shù)據(jù),存入到數(shù)組iArray[]中,即從地址iArray[]開始的一段連續(xù)空間。2)使用fread()函數(shù)讀取文件中的n個整數(shù)時,可以一次性讀取,也可以逐個元素讀取。逐個元素讀取時,可以用循環(huán)語句實現(xiàn),代碼如下。for(i=0;i<5;i++)fread(&iArray[i],4,1,fp);文件的讀寫
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。3.文本文件的格式化讀寫文件的格式化輸入/輸出函數(shù)fscanf()/fprintf(),與前面介紹的scanf()/printf()函數(shù)的作用類似,都是用來實現(xiàn)格式化讀寫操作,不同的是fscanf()/fprintf()的讀寫對象是磁盤文件,而不是屏幕。(1)格式化寫函數(shù)fprintf()函數(shù)的一般形式如下:intfprintf(FILE*fp,char*format[,argument,…])功能:按format規(guī)定的格式把數(shù)據(jù)寫入文件指針fp所指文件中。其中format參數(shù)的含義與printf是相同的。文件的讀寫
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。3.文本文件的格式化讀寫(2)格式化讀函數(shù)fscanf()函數(shù)的一般形式如下:intfscanf(FILE*fp,char*format[,argument,…])功能:從文件指針fp所指文件中按format規(guī)定的格式把數(shù)據(jù)讀入?yún)?shù)argument中。其中format參數(shù)的含義與scanf是相同的。文件的讀寫
#include<stdio.h>#defineSIZE4structstudent_type{charname[10];intnum;intage;charaddr[15];}stud[SIZE];main(){load();save();display();}例10-7將4個學(xué)生的數(shù)據(jù),從磁盤文件stu_dat調(diào)入,然后輸出到stu_list文件中,并在屏幕上顯示磁盤文件的內(nèi)容。voidload(){FILE*fp;inti;if((fp=fopen("d:\\stu_dat","rb"))==NULL){printf("cannotopenfile\n");return;}for(i=0;i<SIZE;i++)if(fread(&stud[i],sizeof(structstudent_type),1,fp)!=1){if(feof(fp)){fclose(fp);retun;}printf("filereaderror\n");}fclose(fp);}文件的讀寫
voidsave(){FILE*fp;inti;if((fp=fopen("d:\\stu_list","wb"))==NULL){printf("cannotopenfile\n");return;}for(i=0;i<SIZE;i++)if(fwrite(&stud[i],sizeof(structstudent_type),1,fp)!=1)printf("filewriteerror\n");fclose(fp);}例10-7將4個學(xué)生的數(shù)據(jù),從磁盤文件stu_dat調(diào)入,然后輸出到stu_list文件中,并在屏幕上顯示磁盤文件的內(nèi)容。voiddisplay(){FILE*fp;inti;if((fp=fopen("d:\\stu_list","r"))==NULL){printf("cannotopenfile\n");return;}for(i=0;i<SIZE;i++){fscanf(fp,"%s%d%d%s",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);printf("%-10s%4d%4d%-15s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);}fclose(fp);}文件的讀寫
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。4.其他讀寫函數(shù)(1)putw()和getw()函數(shù)1)格式putw(intw,FILE*fp)getw(FILE*fp)2)功能:以二進制形式,從磁盤文件讀寫一個int型的整數(shù),4個字節(jié)。3)返回值:成功時返回所寫的整數(shù)值;失敗時返回值為EOF。例如:putw(10,fp);i=getw(fp);文件的讀寫
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。4.其他讀寫函數(shù)(1)putw()和getw()函數(shù)(2)fgets和fputs函數(shù)1)格式:fgets(str,n,fp);(str字符數(shù)組,n-1個字符)fputs(字符串,fp);("\0"不輸出)2)功能:從fp指向的文件讀/寫一個字符串。3)返回值:fgets()正常時返回字符串的首地址;出錯或文件尾,NULL。fputs()正常時返回寫入的最后一個字符;出錯為EOF。文件的讀寫
#include<stdio.h>voidmain(){FILE*fp;charstring[81];if((fp=fopen("file.txt","w"))==NULL){printf("cann'topenfile");exit(0);}while(strlen(gets(string))>0){fputs(string,fp);例10-8從鍵盤讀入字符串存入文件,再從文件讀回顯示。fputs("\n",fp);}fclose(fp);if((fp=fopen("file.txt","r"))==NULL){printf("cann'topenfile");exit(0);}while(fgets(string,81,fp)!=NULL)fputs(string,stdout);fclose(fp);}文件的讀寫
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。5.文件的定位與隨機讀寫文件中有一個位置指針,指向當(dāng)前讀寫的位置。具體位置由文件打開方式確定。一般“r”、“w”指向文件頭,“a”指向文件尾。當(dāng)順序讀寫一個文件時,每讀寫完一個數(shù)據(jù)單位(一個字符,或一個整數(shù),或一個結(jié)構(gòu)體變量)后,位置指針自動移向下一個數(shù)據(jù)單位位置,如果想改變這種順序,就需要強制使位置指針指向指定的位置。在對文件讀寫操作時,往往不需要從頭開始,只需對其中指定的內(nèi)容進行讀寫操作,這時我們可以調(diào)用庫函數(shù)來改變文件的讀寫位置,這種函數(shù)稱為文件的定位函數(shù),一般用rewind()和fseek()函數(shù)實現(xiàn)。文件的讀寫
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。5.文件的定位與隨機讀寫文件的讀寫方式一般有兩種:1)順序讀寫:位置指針按字節(jié)位置順序移動。2)隨機讀寫:位置指針按需要移動到任意位置。(1)rewind()函數(shù)格式:rewind(fp);功能:將文件的讀寫位置指針重新移到文件的開頭。說明:在實際應(yīng)用中,若對某一文件進行多次讀寫操作后,需要重新讀寫該文件,可以采用關(guān)閉該文件再打開該文件的方法,而使用rewind()函數(shù)可以在不關(guān)閉文件的情況下將位置指針返回文件開頭,達到重新讀取文件的目的,顯然效率要比前一種方法高。rewind()函數(shù)原型為:voidrewind(FILE*fp);文件的讀寫
#include<stdio.h>voidmain(){FILE*fp1,*fp2;fp1=fopen("c:\\tc\\user\\ch12_4.c","r");fp2=fopen("d:\\tc\\user\\ch12_41.c","w");while(!feof(fp1))putchar(getc(fp1));rewind(fp1);while(!feof(fp1))putc(getc(fp1),fp2);fclose(fp1);fclose(fp2);}例10-9對一個磁盤文件進行顯示和復(fù)制兩次操作。文件的讀寫
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。5.文件的定位與隨機讀寫(2)fseek()函數(shù)格式:fseek(fp,offset,origin);功能:把文件位置指針移動到指定的位置,以便從當(dāng)前位置讀寫文件。說明:1)offset是個long類型的數(shù)據(jù),叫位移量,是指從起始點“origin”,向前或向后移動的字節(jié)數(shù)。2)origin表示用三個符號常量(在stdio.h中定義)或0,1,2分別表示“文件開始”、“當(dāng)前位置”、“文件末尾”。如下表所示。Origin文件位置值SEEK_SET文件開始0SEEK_CUR當(dāng)前位置1SEEK_END文件末尾2文件的讀寫
#include<stdlid.h>#include<stdio.h>structstudent_type{charname[10];intnum;intage;charsex;}stud[10];voidmain(){FILE*fp;inti;if((fp=fopen("stud_dat","rb"))==NULL)例10-10文件內(nèi)存有10個學(xué)生數(shù)據(jù),將單數(shù)學(xué)生數(shù)據(jù)輸入計算機并在屏幕上顯示。
{printf("cannotopenfile\n");exit(0);}for(i=0;i<10;i+=2){fseek(fp,i*sizeof(structstudent_type),0);fread(&stud[i],sizeof(structstudent_type),1,fp);printf("%s%d%d%c\n",stud[i].name,stud[i].num,stud[i].age,stud[i].sex);}fclose(fp);}文件的讀寫
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。5.文件的定位與隨機讀寫(3)ftell()函數(shù)格式:fell(fp);功能:返回當(dāng)前文件指針fp的讀寫位置,并用相對文件頭的位移量來表示。常用于保存當(dāng)前文件指針位置。說明:1)該函數(shù)限于二進制文件,對ASCII文本文件往往會出錯。2)ftell()函數(shù)返回值為-1L時,表示出錯。例如:if((i=ftell(fp))==-1L)printf(“FILEerror\n”);文件的讀寫
#include"stdio.h"main(){FILE*fp;charfilename[80];longlength;gets(filename);fp=fopen(filename,"rb");if(fp==NULL)printf("filenotfound!\n");else{fseek(fp,0L,SEEK_END);length=ftell(fp);printf("LengthofFileis%1dbytes\n",length);fclose(fp);}}例10-11求文件長度。
文件的讀寫
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。5.文件的定位與隨機讀寫(4)feof()函數(shù)格式:feof(文件指針);功能:用于檢查文件是否結(jié)束,如果是,返回1;否則返回0。說明:1)對于文本文件,“EOF”為文件結(jié)束標(biāo)記(因為EOF的值等于-1,而字符的ASCII碼不可能出現(xiàn)-1)。2)“EOF”不能作為二進制文件結(jié)束標(biāo)記(因為EOF的值等于-1,二進制文件的數(shù)據(jù)可以是-1)。所以ANSIC提供feof()函數(shù)來判定文件是否結(jié)束。例如,如果把一個指定的二進制文件磁盤文件從頭到尾按順序讀出并在屏幕上顯示出來,可用下程序段實現(xiàn):while(!feof(fp))putchar(fgetc(fp));3)feof()函數(shù)同樣適合于文本文件。文件的讀寫
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。5.文件的定位與隨機讀寫(5)ferror()函數(shù)格式:ferror(文件指針);功能:檢查文件在使用各種輸入輸出函數(shù)進行讀寫時是否出錯。若出錯,則文件就會產(chǎn)生錯誤標(biāo)志。說明:1)每次調(diào)用文件輸入輸出函數(shù),均產(chǎn)生一個新的ferror函數(shù)值,所以應(yīng)及時測試。2)fopen打開文件時,ferror函數(shù)初值自動置為0。文件的讀寫
在內(nèi)存中,每個內(nèi)存單元都有一個地址,如在一個32位計算機的內(nèi)存中,內(nèi)存地址的編號按十六進制從00000000-FFFFFFFF,共有232個內(nèi)存單元(字節(jié)),如果一個整型變量占據(jù)4個字節(jié),那么4個字節(jié)中編號最小的字節(jié)的地址即是該整型變量所占存儲單元的地址。通常我們把指向內(nèi)存存儲單元的地址叫指針。5.文件的定位與隨機讀寫(6)clearerr()函數(shù)格式:clearerr(文件指針);功能:使文件錯誤標(biāo)志置為0,無返值。說明:出錯后,錯誤標(biāo)志一直保留,直到對同一文件調(diào)clearerr(fp)或rewind或任何其它一個輸入輸出函數(shù)。文件的讀寫
#include<stdio.h>intmain(void){FILE*stream;stream=fopen("DUMMY.FIL","w");getc(stream);if(ferror(stream)){printf("ErrorreadingfromDUMMY.FIL\n");clearerr(stream);}if(!ferror(stream))printf("Errorindicatorcleared!");fclose(stream);return0;}例10-12ferror()與clearerr()舉例。
學(xué)生成績管理系統(tǒng)的數(shù)據(jù)存取
intfnWriteFile(char*Filename,char*rw,PSTUDENTs,intm){inti;FILE*fp;PSTUDENTstu=s;if((fp=fopen(Filename,rw))==NULL){ printf("\n\t\t打開文件%s\n",Filename); return0;}
1.添加文件存儲函數(shù)改進學(xué)生成績管理系統(tǒng),將存儲在結(jié)構(gòu)數(shù)組中的數(shù)據(jù)寫入到文件data中去。參考代碼如下:
for(i=0;i<m;i++)if(fwrite(stu++,LEN,1,fp)!=1){printf(“%s文件存盤失敗!\n",Filename);getch();}fclose(fp);return1;}
學(xué)生成績管理系統(tǒng)的數(shù)據(jù)存取
intfnReadFile(char*Filename,char*rw,PSTUDENTs,int*m){FILE*fp;PSTUDENTstu=s;if((fp=fopen(Filename,rw))==NULL){printf("\n\t\t打開文件%s失敗\n",Filename);return0;}
2.添加文件裝入函數(shù)與文件存儲相反,文件裝入就是把磁盤文件讀入結(jié)構(gòu)數(shù)組以便進一步的數(shù)據(jù)處理??紤]到函數(shù)模塊的一般性,將文件名、存儲的結(jié)構(gòu)數(shù)組,以及記錄總數(shù)均作為函數(shù)的形參。參考代碼如下:
*m=0;while(!feof(fp))if(fread(stu++,LEN,1,fp)==1){*m=*m+1;}/*統(tǒng)計當(dāng)前記錄條數(shù)*/fclose(fp);return1;}
學(xué)生成績管理系統(tǒng)的數(shù)據(jù)存取
…//省略intfnReadFile(char*Filename,char*rw,PSTUDENTs,int*m);intfnWriteFile(char*Filename,char*rw,PSTUDENTs,intm);intm; //m是記錄的條數(shù)voidmain() {intn=1;structstudents[50]; //定義結(jié)構(gòu)體數(shù)組do{fnMenuShow();//顯示菜單界面fnReadFile("data","ab+",s,&m); //讀數(shù)據(jù)scanf("%d",&n); //輸入選擇功能的編號system("cls");
3.修改主函數(shù)實現(xiàn)數(shù)據(jù)存取添加調(diào)用文件存儲和裝入函數(shù)語句。參考代碼如下:
{switch(n){case1:fnDataInput(s);break;case2:fnSearch(s);break;case3:fnDel(s);break;case4:fnModify(s);break;case5:fnInsert(s);break;case6:fnSort(s);break;case7:fnTotal(s);break;case8: fnScoreShow(s);break;default:break;}fnWriteFile("data","wb",s,m);//寫數(shù)據(jù)getch();}while(n);printf("\n\n\t\t謝謝您的使用!\n\t\t");}
拓展案例案例10-1寫出下面問題的算法問題描述從鍵盤輸入5個手機的信息(商標(biāo)名、價格、顏色),然后保存在文件“phone.dat”中。拓展案例
#include"stdio.h"structtype_phone{charchBrand[10];floatfPrice;charchColor[10];};voidmain(){structtype_phonestPhone[5];FILE*filePointer;inti;filePointer=fopen("Phone.dat","wb");if(filePointer==NULL){printf("cannotopenthisfile\n");exit(0);}for(i=0;i<5;i++){printf("pleaseinputthebrandname,price,color:");scanf("%s%f%s",stPhone[i].chBrand,&stPhone[i].fPrice,&stPhone[i].chColor);fwrite(&stPhone[i],sizeof(structtype_phone),1,filePointer);}fclose(filePointer);getch();}拓展案例案例10-2寫出下面問題的算法問題描述將文件“phone.dat”中的第1、3、5條記錄讀出,并給每條記錄的價格加上100元,然后將這三條記錄輸出在屏幕上(注意每條信息輸出為一行)。拓展案例
#include"stdio.h"#include"stdio.h"structtype_phone{charchBrand[10];floatfPrice;charchColor[10];};voidmain(){structtype_phonestPhone[3];FILE*filePointer;inti;filePointer=fopen("Phone.dat","rb");if(filePointer==NULL){printf("cannotopenthisfile\n");exit(0);}for(i=0;i<3;i++){fseek(filePointer,2*sizeof(structtype_phone),SEEK_SET);fread(stPhone[i],sizeof(structtype_phone),1,filePointer);stPhone.fPrice+=100;}fclose(filePointer);printf("BrnadNamePriceColor\n");for(i=0;i<3;i++){printf("%s\tt%f\t%s\n",stPhone[i].chBrand,stPhone[i].fPrice,stPhone[i].chColor);}getch();}
拓展活動觀看央視新聞推出的八集系列節(jié)目--《大國工匠》。在IT行業(yè),有很多的人在自己的崗位上刻苦鉆研,創(chuàng)新創(chuàng)造。作為新時代IT青年,學(xué)習(xí)程序設(shè)計,更需要大國工匠的“精雕細琢、精益求精”的工匠精神,從而使得軟件實現(xiàn)所
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《青年友誼圓舞曲》的音樂課件
- 人教部編版四年級語文上冊第13課《精衛(wèi)填海》精美課件
- 《叢林故事》練習(xí)題(含答案)
- 2024年武漢駕駛員客運資格證模擬考試題及答案詳解
- 2024年江西客運證考什么
- 2024年山西客運考試模擬題及答案
- 2024年廣州客運從業(yè)資格證仿真考試題
- 2024年蕪湖客運從業(yè)資格摸擬考試
- 專練21人口60題-2024年高考地理總復(fù)習(xí)高頻考點提分必刷題(原卷版)
- 人教部編版二年級語文上冊第16課《朱德的扁擔(dān)》精美課件
- JBT 14615-2024 內(nèi)燃機 活塞運動組件 清潔度限值及測定方法(正式版)
- 2024年保密知識測試試題庫(綜合題)
- 《做個加法表》名師課件
- 個人與公司簽訂的銷售提成協(xié)議
- 危險性較大的分部分項安全管理核查表
- 2024年紀(jì)檢監(jiān)察綜合業(yè)務(wù)知識題庫含答案(研優(yōu)卷)
- 第8課《用制度體系保證人民當(dāng)家做作主》第2框《我國的基本政治制度》課件 2023-2024學(xué)年 中職高教版(2023)中國特色社會主義
- 手術(shù)切口感染PDCA案例
- 小學(xué)大思政課實施方案設(shè)計
- 2024年入團積極分子結(jié)業(yè)考試試題
- 供應(yīng)室消防應(yīng)急預(yù)案演練
評論
0/150
提交評論