




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C語(yǔ)言程序設(shè)計(jì)第9章文獻(xiàn)程序設(shè)計(jì)
《C語(yǔ)言程序設(shè)計(jì)》(第3版)張磊編著21世紀(jì)高等學(xué)校規(guī)劃教材清華大學(xué)出版社語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第1頁(yè)第9章文獻(xiàn)程序設(shè)計(jì)9.1文獻(xiàn)概述9.2文獻(xiàn)基本操作9.3文獻(xiàn)數(shù)據(jù)塊讀寫(xiě)操作9.4文獻(xiàn)其他操作9.5文獻(xiàn)應(yīng)用舉例語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第2頁(yè)9.1文獻(xiàn)概述9.1.1文獻(xiàn)概念9.1.2文獻(xiàn)分類(lèi)9.1.3文獻(xiàn)一般操作過(guò)程9.1.4文獻(xiàn)指針語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第3頁(yè)9.1.1文獻(xiàn)概念文獻(xiàn)是計(jì)算機(jī)中一種主要概念,一般是指存放在外部介質(zhì)上信息集合。存放程序代碼文獻(xiàn)稱(chēng)為程序文獻(xiàn),存放數(shù)據(jù)文獻(xiàn)稱(chēng)為數(shù)據(jù)文獻(xiàn)。另外,C語(yǔ)言把輸入輸出設(shè)備也視為一類(lèi)特殊文獻(xiàn)。計(jì)算機(jī)對(duì)文獻(xiàn)操作總體上提成輸入和輸出兩大類(lèi),對(duì)文獻(xiàn)輸人輸出(I/0)過(guò)程是通過(guò)操作系統(tǒng)進(jìn)行管理。C語(yǔ)言程序?qū)ξ墨I(xiàn)處理是通過(guò)標(biāo)準(zhǔn)函數(shù)庫(kù)中文獻(xiàn)操作函數(shù)實(shí)現(xiàn),使用這些函數(shù),能夠簡(jiǎn)單、高效、安全地訪(fǎng)問(wèn)外部數(shù)據(jù)。語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第4頁(yè)9.1.1文獻(xiàn)概念1.設(shè)備文獻(xiàn)在C語(yǔ)言中,所有外部設(shè)備均被作為文獻(xiàn)看待,這種文獻(xiàn)稱(chēng)為設(shè)備文獻(xiàn)。對(duì)外部設(shè)備輸人輸出處理就是讀寫(xiě)設(shè)備文獻(xiàn)過(guò)程。
2.文獻(xiàn)緩沖區(qū)在程序運(yùn)行過(guò)程中,程序要將保存在內(nèi)存中數(shù)據(jù)寫(xiě)入磁盤(pán),首先要建立一種“輸出文獻(xiàn)緩沖區(qū)”,這個(gè)緩沖區(qū)是一種連接計(jì)算機(jī)內(nèi)存數(shù)據(jù)與外存文獻(xiàn)橋梁,當(dāng)向文獻(xiàn)輸出數(shù)據(jù)時(shí),準(zhǔn)備輸出數(shù)據(jù)先寫(xiě)入文獻(xiàn)緩沖區(qū),等文獻(xiàn)緩沖區(qū)填滿(mǎn)后再輸出到文獻(xiàn)中。這一過(guò)程稱(chēng)為“寫(xiě)文獻(xiàn)”,是數(shù)據(jù)輸出過(guò)程。與“寫(xiě)文獻(xiàn)”過(guò)程相正確是要將保存在文獻(xiàn)中數(shù)據(jù)裝入內(nèi)存。首先要建立一種“輸入文獻(xiàn)緩沖區(qū)”,當(dāng)從文獻(xiàn)中輸入數(shù)據(jù)時(shí),也是把讀入數(shù)據(jù)先寫(xiě)入文獻(xiàn)緩沖區(qū),等文獻(xiàn)緩沖區(qū)數(shù)據(jù)裝滿(mǎn)之后再整個(gè)送給程序。這一過(guò)程稱(chēng)為“讀文獻(xiàn)”,是數(shù)據(jù)輸入過(guò)程。語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第5頁(yè)9.1.1文獻(xiàn)概念使用緩沖區(qū)文獻(xiàn)讀、寫(xiě)示意圖
語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第6頁(yè)9.1.2文獻(xiàn)分類(lèi)以ASCII碼字符形式存放文獻(xiàn)稱(chēng)為文本文獻(xiàn),又叫ASCII文獻(xiàn)。例如用高級(jí)程序語(yǔ)言編寫(xiě)程序文獻(xiàn)是文本文獻(xiàn),用Windows“記事本”程序創(chuàng)建文獻(xiàn)也是文本文獻(xiàn)。文本文獻(xiàn)是一種字符流文獻(xiàn),文本文獻(xiàn)一種字符就是一種字節(jié),因而方便了字符處理,不過(guò)文本文獻(xiàn)一般要占用較大存放空間。二進(jìn)制文獻(xiàn)是按照數(shù)據(jù)在內(nèi)存中字節(jié)序列形成字節(jié)流文獻(xiàn)。例如C程序目標(biāo)文獻(xiàn)(擴(kuò)展名為obj)和可執(zhí)行文獻(xiàn)(擴(kuò)展名為exe)都是二進(jìn)制文獻(xiàn)。在二進(jìn)制文獻(xiàn)中,字節(jié)信息與實(shí)際數(shù)據(jù)位并不一一對(duì)應(yīng),因此,若直接顯示二進(jìn)制文獻(xiàn)內(nèi)容時(shí),顧客看到是某些不能識(shí)別字符。
文本文獻(xiàn)
二進(jìn)制文獻(xiàn)語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第7頁(yè)9.1.3文獻(xiàn)一般操作過(guò)程使用文獻(xiàn)一般步驟打開(kāi)文獻(xiàn)→操作文獻(xiàn)→關(guān)閉文獻(xiàn)打開(kāi)文獻(xiàn):建立顧客程序與文獻(xiàn)聯(lián)系,系統(tǒng)為文獻(xiàn)開(kāi)辟文獻(xiàn)緩沖區(qū)。操作文獻(xiàn):是指對(duì)文獻(xiàn)讀、寫(xiě)、追加和定位操作。讀操作:從文獻(xiàn)中讀出數(shù)據(jù),即將文獻(xiàn)中數(shù)據(jù)輸入到計(jì)算機(jī)內(nèi)存。寫(xiě)操作:向文獻(xiàn)中寫(xiě)入數(shù)據(jù),即將計(jì)算機(jī)內(nèi)存中數(shù)據(jù)輸出到文獻(xiàn)。追加操作:將新數(shù)據(jù)寫(xiě)到文獻(xiàn)原有數(shù)據(jù)背面。定位操作:移動(dòng)文獻(xiàn)讀寫(xiě)位置指針。關(guān)閉文獻(xiàn):切斷文獻(xiàn)與程序聯(lián)系,將文獻(xiàn)緩沖區(qū)內(nèi)容寫(xiě)入磁盤(pán),并釋放文獻(xiàn)緩沖區(qū)。語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第8頁(yè)9.1.4文獻(xiàn)指針文獻(xiàn)型指針變量定義FILE*變量名;例如:FILE*p;注意:由于文獻(xiàn)類(lèi)型FILE在頭文獻(xiàn)stdio.h中定義,因此在使用FILE類(lèi)型前必須先打開(kāi)stdio.h文獻(xiàn)。假如需要對(duì)某一種文獻(xiàn)進(jìn)行讀寫(xiě)操作,必須首先要指定指向它文獻(xiàn)指針。只有通過(guò)文獻(xiàn)指針,才能調(diào)用對(duì)應(yīng)文獻(xiàn)。當(dāng)程序需要同步處理多種文獻(xiàn)時(shí),則需要說(shuō)明多種FILE型指針變量,使它們分別指向多種不一樣文獻(xiàn)。語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第9頁(yè)9.2文獻(xiàn)基本操作9.2.1打開(kāi)和關(guān)閉文獻(xiàn)9.2.2最基本文獻(xiàn)讀寫(xiě)函數(shù)語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第10頁(yè)9.2.1打開(kāi)和關(guān)閉文獻(xiàn)打開(kāi)文獻(xiàn)操作是使用文獻(xiàn)第一種步驟,而關(guān)閉文獻(xiàn)操作則是使用文獻(xiàn)最后一種步驟。C語(yǔ)言系統(tǒng)分別使用fopen()函數(shù)和fclose()函數(shù)實(shí)現(xiàn)文獻(xiàn)打開(kāi)和關(guān)閉操作。1.文獻(xiàn)打開(kāi)函數(shù)fopen()fopen()函數(shù)用來(lái)實(shí)現(xiàn)打開(kāi)文獻(xiàn),它處理如下3個(gè)問(wèn)題:⑴指定要打開(kāi)文獻(xiàn)名;⑵指定文獻(xiàn)使用方式,如是讀文獻(xiàn)還是寫(xiě)文獻(xiàn)等;⑶為打開(kāi)文獻(xiàn)指定一種指針變量,方便使用這個(gè)指針變量對(duì)文獻(xiàn)進(jìn)行訪(fǎng)問(wèn)。fopen()函數(shù)調(diào)用方式FILE*fp;fp=fopen(文獻(xiàn)名,使用文獻(xiàn)方式);例如:fp=("example.txt","r");表達(dá)要打開(kāi)文獻(xiàn)名為example.txt,使用文獻(xiàn)方式是“r”方式,文獻(xiàn)指針是fp。語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第11頁(yè)9.2.1打開(kāi)和關(guān)閉文獻(xiàn)文獻(xiàn)使用方式文獻(xiàn)使用方式作用r以“只讀”方式打開(kāi)一種文本文獻(xiàn)w以“只寫(xiě)”方式打開(kāi)一種文本文獻(xiàn)a向文本文獻(xiàn)尾增加數(shù)據(jù)rb以“只讀”方式打開(kāi)一種二進(jìn)制文獻(xiàn)wb以“只寫(xiě)”方式打開(kāi)一種二進(jìn)制文獻(xiàn)ab向二進(jìn)制文獻(xiàn)尾增加數(shù)據(jù)r+以“讀/寫(xiě)”方式打開(kāi)一種文本文獻(xiàn)w+以“讀/寫(xiě)”方式建立一種新文本文獻(xiàn)a+以“讀/寫(xiě)/追加”方式打開(kāi)一種文本文獻(xiàn)rb+以“讀/寫(xiě)”方式打開(kāi)一種二進(jìn)制文獻(xiàn)wb+以“讀/寫(xiě)”方式建立一種新二進(jìn)制文獻(xiàn)ab+以“讀/寫(xiě)/追加”方式打開(kāi)一種二進(jìn)制文獻(xiàn)語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第12頁(yè)9.2.1打開(kāi)和關(guān)閉文獻(xiàn)2.關(guān)閉文獻(xiàn)函數(shù)fclose()fclose()函數(shù)一般格式fclose(文獻(xiàn)指針);功能關(guān)閉“文獻(xiàn)指針”所指向文獻(xiàn),釋放打開(kāi)文獻(xiàn)時(shí)使用構(gòu)造體變量,斷開(kāi)文獻(xiàn)指針與文獻(xiàn)聯(lián)系。例如:
fclose(fp);語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第13頁(yè)9.2.2最基本文獻(xiàn)讀寫(xiě)函數(shù)1.fputc()函數(shù)一般形式fputc(ch,fp);功能將字符(ch值)輸出到fp所指向文獻(xiàn)中。語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第14頁(yè)9.2.2最基本文獻(xiàn)讀寫(xiě)函數(shù)例9-1使用fputc()函數(shù)在屏幕顯示一種字符串。/*programe9-1.c*/
#include<stdio.h>voidmain(){char*p="Thisisaexample.";while(*p!='\0')fputc(*p++,stdout);}設(shè)備文獻(xiàn)語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第15頁(yè)9.2.2最基本文獻(xiàn)讀寫(xiě)函數(shù)例9-2
把從鍵盤(pán)輸入一種字符串寫(xiě)入到磁盤(pán)文獻(xiàn)example.txt中。/*programe9-2.c*/#include<stdio.h>voidmain(){ charch; FILE*fp; fp=fopen("example.txt","w"); printf("Enterastring:"); while((ch=getchar())!='\n')
fputc(ch,fp);
fclose(fp);}
語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第16頁(yè)9.2.2最基本文獻(xiàn)讀寫(xiě)函數(shù)2.fgetc()函數(shù)從指定文獻(xiàn)讀入一種字符,該文獻(xiàn)必須是以讀或讀寫(xiě)方式打開(kāi)。一般使用如下形式調(diào)用fgetc()函數(shù)ch=fgetc(fp);其中,fp為文獻(xiàn)型指針變量,ch為字符變量。正常情況下fgetc()函數(shù)返回值是從文獻(xiàn)中讀出一種字符。當(dāng)打開(kāi)文獻(xiàn)并立雖然用fgetc()讀文獻(xiàn)時(shí),fgetc()函數(shù)從文獻(xiàn)開(kāi)始位置讀取一種字符。每讀取一種字符后,文獻(xiàn)位置指針后移一種字符位置。若目前讀取是文本文獻(xiàn),當(dāng)遇到文獻(xiàn)結(jié)束標(biāo)志時(shí),fgetc()函數(shù)返回值為EOF。語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第17頁(yè)9.2.2最基本文獻(xiàn)讀寫(xiě)函數(shù)例9-3
使用fgetc()函數(shù)輸出文獻(xiàn)example.txt內(nèi)容。/*programe9-3.c*/#include<stdio.h>voidmain(){ charch; FILE*fp; fp=fopen("example.txt","r"); while((ch=fgetc(fp))!=EOF) putchar(ch); fclose(fp);}
語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第18頁(yè)9.2.2最基本文獻(xiàn)讀寫(xiě)函數(shù)例9-4使用feof()進(jìn)行文獻(xiàn)讀取控制,輸出文獻(xiàn)example.txt內(nèi)容。/*programe9-4.c*/#include<stdio.h>voidmain(){FILE*fp;if((fp=fopen("example.txt","r"))==NULL){printf("filecannotopen!\n");exit(1);}
while(!feof(fp))
putchar(fgetc(fp));fclose(fp);}判斷被讀取文獻(xiàn)是否已經(jīng)讀完。當(dāng)未遇文獻(xiàn)結(jié)束標(biāo)志時(shí),feof()值是0,不然feof()值是1。語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第19頁(yè)9.3文獻(xiàn)數(shù)據(jù)塊讀寫(xiě)操作9.3.1fwrite()函數(shù)9.3.2fread()函數(shù)語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第20頁(yè)9.3.1fwrite()函數(shù)fwrite()函數(shù)功能是把內(nèi)存中某些數(shù)據(jù)塊寫(xiě)到指定文獻(xiàn)中。一般調(diào)用形式fwrite(buffer,size,count,fp);其中:fp是接收數(shù)據(jù)文獻(xiàn)指針;buffer是數(shù)據(jù)塊內(nèi)存首地址,一般是指針變量名、數(shù)組名等;size是一種數(shù)據(jù)塊字節(jié)數(shù)(即數(shù)據(jù)塊大?。?;count是執(zhí)行一次fwrite()函數(shù)從內(nèi)存輸出到fp文獻(xiàn)數(shù)據(jù)塊數(shù)目。語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第21頁(yè)9.3.1fwrite()函數(shù)例9-5
從鍵盤(pán)上輸入一批學(xué)生數(shù)據(jù),然后以“stu_list”文獻(xiàn)名存放到磁盤(pán)上。/*programe9-5.c*/#include<stdio.h>#defineN4structstudent_type{charname[10];intnum;intscore;}stud;voidmain(){ inti; FILE*fp; if((fp=fopen("stu_list","wb"))==NULL) { printf("Cannotopenfile\n"); exit(1); } printf("Inputdata,please!\n"); for(i=0;i<N;i++) {scanf("%s%d%d",,&stud.num,&stud.score);
fwrite(&stud,sizeof(structstudent_type),1,fp); } fclose(fp); printf("Allright.\n");}語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第22頁(yè)9.3.2fread()函數(shù)fread()函數(shù)把指定文獻(xiàn)中一種數(shù)據(jù)塊讀到內(nèi)存中。一般調(diào)用形式fread(buffer,size,count,fp);其中:fp是讀取數(shù)據(jù)文獻(xiàn)指針;buffer是接收文獻(xiàn)數(shù)據(jù)內(nèi)存首地址,一般是指針變量名、數(shù)組名等;size是一種數(shù)據(jù)塊字節(jié)數(shù)(即數(shù)據(jù)塊大?。籧ount是執(zhí)行一次fread()函數(shù)讀取數(shù)據(jù)塊數(shù)目。例9-6將上述stu_list文獻(xiàn)內(nèi)容顯示在屏幕上。/*programe9-6-1.c*/#include<stdio.h>#defineN4structstudent_type{ charname[10]; intnum; intscore;}stud;voidmain(){ inti; FILE*fp; if((fp=fopen("stu_list","rb"))==NULL) { printf("Cannotopenfile.\n"); exit(1); } for(i=0;i<N;i++) { fread(&stud,sizeof(structstudent_type),1,fp); printf("%-10s%4d%4d\n",,stud.num,stud.score); } fclose(fp);}語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第23頁(yè)9.3.2fread()函數(shù)再如,設(shè)有如下定義:structstudent_type{charname[10];intnum;intage;}stud[40];其中,構(gòu)造體數(shù)組stud每一種元素用來(lái)寄存一種學(xué)生有關(guān)數(shù)據(jù),假設(shè)學(xué)生數(shù)據(jù)已寄存在磁盤(pán)文獻(xiàn)中,且該文獻(xiàn)已打開(kāi),并由fp指向,則能夠用下面語(yǔ)句把文獻(xiàn)中前40個(gè)學(xué)生數(shù)據(jù)輸入到構(gòu)造體數(shù)組stud中:for(i=0;i<40;i++)
fread(&stud[i],sizeof(structstudent_type),1,fp);語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第24頁(yè)9.4文獻(xiàn)其他操作9.4.1文獻(xiàn)格式化讀寫(xiě)9.4.2文獻(xiàn)隨機(jī)讀寫(xiě)操作9.4.3ftell()函數(shù)9.4.4文獻(xiàn)字符串操作語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第25頁(yè)9.4.1文獻(xiàn)格式化讀寫(xiě)1.文獻(xiàn)格式化讀操作由fscanf()函數(shù)實(shí)現(xiàn),從指定文獻(xiàn)中,按照說(shuō)明格式向變量提供數(shù)據(jù)。一般使用格式fscanf(fp,格式字符串,輸入表列);其中fp是文獻(xiàn)指針“格式字符串”和“輸入表列”與scanf()函數(shù)有關(guān)內(nèi)容相同。例如:fscanf(fp,“%d”,&m);該語(yǔ)句將磁盤(pán)文獻(xiàn)中數(shù)據(jù)送給變量m,其中磁盤(pán)文獻(xiàn)由fp指向。語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第26頁(yè)9.4.1文獻(xiàn)格式化讀寫(xiě)2.文獻(xiàn)格式化寫(xiě)操作由fprintf()函數(shù)實(shí)現(xiàn),將指定變量值按照一定格式寫(xiě)到指定文獻(xiàn)中。一般使用格式fprintf(fp,格式字符串,輸出表列);說(shuō)明:⑴fp是要寫(xiě)入數(shù)據(jù)文獻(xiàn)指針。⑵“格式字符串”和“輸出表列”與printf()函數(shù)有關(guān)內(nèi)容形同。例如:fprintf(fp,"%d",m);該語(yǔ)句將整型變量m按%d格式輸出到fp指向文獻(xiàn)中。例9-7從鍵盤(pán)輸入一種字符串和一種十進(jìn)制整數(shù),將它們寫(xiě)入test文獻(xiàn)中,然后再?gòu)膖est文獻(xiàn)中讀出并顯示在屏幕上。/*programe9-7.c*/#include<stdio.h>voidmain(){ chars[100]; inta; FILE*fp; if((fp=fopen("test","w"))==NULL) {printf("fileopenerror.\n");exit(0);} fscanf(stdin,"%s%d",s,&a); fprintf(fp,"%s%d",s,a); fclose(fp); if((fp=fopen("test","r"))==NULL) {printf("Cannotopenfile.\n");exit(0);} fscanf(fp,"%s%d",s,&a); fprintf(stdout,"%s%d\n",s,a); fclose(fp);}
語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第27頁(yè)9.4.2文獻(xiàn)隨機(jī)讀寫(xiě)操作1.fseek()函數(shù)功能:變化文獻(xiàn)位置指針。調(diào)用形式fseek(fp,offset,position);其中:⑴fp為文獻(xiàn)型指針;⑵文獻(xiàn)位置指針定位由參數(shù)offset和position共同確定。position要求指針定位時(shí)基準(zhǔn)位置,offset要求文獻(xiàn)位置指針離開(kāi)基準(zhǔn)位置偏移量,它單位是字節(jié)。position值用整常數(shù)表達(dá),取值范圍是0、1、2三個(gè)數(shù)之一,其意義如下:0:表達(dá)基準(zhǔn)位置為文獻(xiàn)開(kāi)頭位置;1:表達(dá)基準(zhǔn)位置為文獻(xiàn)目前位置;2:表達(dá)基準(zhǔn)位置為文獻(xiàn)結(jié)尾位置,該位置在文獻(xiàn)內(nèi)容最后一種字節(jié)之后。語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第28頁(yè)9.4.2文獻(xiàn)隨機(jī)讀寫(xiě)操作fseek()函數(shù)調(diào)用實(shí)例:fseek(fp,50L,0);將位置指針移到文獻(xiàn)頭起始第50個(gè)字節(jié)處fseek(fp,100L,1);將位置指針從目前位置向文獻(xiàn)尾方向移動(dòng)100個(gè)字節(jié)fseek(fp,-20L,2);將位置指針從文獻(xiàn)末尾向文獻(xiàn)頭方向移動(dòng)20個(gè)字節(jié)語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第29頁(yè)9.4.2文獻(xiàn)隨機(jī)讀寫(xiě)操作例9-8在例9-6中建立了學(xué)生數(shù)據(jù)文獻(xiàn)stu_list,將其中第3個(gè)學(xué)生成績(jī)修改為97。/*programe9-8.c*/#include<stdio.h>structstudent_type{ charname[10]; intnum; intscore;}stud;voidmain(){ inti,size; FILE*fp; size=sizeof(structstudent_type); if((fp=fopen("stu_list","rb+"))==NULL) { printf("fileopenerror.\n"); exit(1); } fseek(fp,2*size,0); fread(&stud,size,1,fp); printf("%s%d%d\n",,stud.num,stud.score); printf("newscore:"); scanf("%d",&stud.score); fseek(fp,-size,1); fwrite(&stud,size,1,fp); fclose(fp);}語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第30頁(yè)9.4.2文獻(xiàn)隨機(jī)讀寫(xiě)操作2.rewind()函數(shù)作用:將文獻(xiàn)位置指針復(fù)位。調(diào)用形式rewind(fp);其中:fp為文獻(xiàn)型指針。執(zhí)行rewind()函數(shù)后,對(duì)于fp指向文獻(xiàn),不論目前文獻(xiàn)位置指針在何處,都使它復(fù)位到文獻(xiàn)開(kāi)始位置。語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第31頁(yè)9.4.2文獻(xiàn)隨機(jī)讀寫(xiě)操作例9-9
在屏幕上顯示文獻(xiàn)e9-6-2.c內(nèi)容,并將該文獻(xiàn)復(fù)制為文獻(xiàn)e9-6-3.c。#include<stdio.h>voidmain(){ FILE*fp1,*fp2; fp1=fopen("e9-6-2.c","r"); fp2=fopen("e9-6-3.c","w"); while(!feof(fp1)) putchar(fgetc(fp1)); rewind(fp1); while(!feof(fp1)) fputc(fgetc(fp1),fp2); fclose(fp1); fclose(fp2);}語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第32頁(yè)9.4.3ftell()函數(shù)ftell()函數(shù)用于獲取文獻(xiàn)位置指針,其調(diào)用形式如下:ftell(fp);其中:fp為文獻(xiàn)指針。ftell()函數(shù)返回值是fp所指向文獻(xiàn)目前讀寫(xiě)位置,該值是一種長(zhǎng)整型數(shù),是位置指針從文獻(xiàn)開(kāi)始處到目前位置位移量字節(jié)數(shù)。語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第33頁(yè)9.4.3ftell()函數(shù)例9-10新建data.txt文獻(xiàn),檢查文獻(xiàn)位置指針值;然后將字符串"Beijing2023"寫(xiě)入文獻(xiàn)中,再檢查文獻(xiàn)位置指針值。#include"stdio.h"main(){FILE*fp;longposition;fp=fopen("data.txt","w");position=ftell(fp);printf("position=%ld\n",position);fprintf(fp,"Beijing2023");
position=ftell(fp);
printf("position=%ld\n",position);fclose(fp);}語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第34頁(yè)9.4.4文獻(xiàn)字符串操作1.fgets()函數(shù)一般調(diào)用形式fgets(buffer,n,fp);作用從fp指向文獻(xiàn)中讀取n-1個(gè)字符,然后存放到以buffer為首地址內(nèi)存空間中,一般buffer是一種指針變量名、數(shù)組名等。假如在讀入n-1個(gè)字符過(guò)程中遇到換行符或EOF,讀入即結(jié)束。字符串讀入后在最后加一種'\0'字符作為字符串結(jié)束標(biāo)志。語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第35頁(yè)9.4.4文獻(xiàn)字符串操作2.fputs()函數(shù)調(diào)用形式fputs(buffer,fp);作用將內(nèi)存buffer中字符串寫(xiě)到fp指向文獻(xiàn)中,buffer能夠是一種字符串常量,也能夠是字符串首地址。語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第36頁(yè)9.4.4文獻(xiàn)字符串操作例9-11將字符串"VisualC++"和"Visualbasic"依次存入文獻(xiàn)text中,然后將第一種字符串讀出并顯示出來(lái)。#include<stdio.h>voidmain(){ FILE*fp; charstring[20]; fp=fopen("text","w+"); fputs("VisualC++\n",fp); fputs("Visualbasic\n",fp); rewind(fp); fgets(string,20,fp); puts(string); fclose(fp);}語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第37頁(yè)9.5文獻(xiàn)應(yīng)用舉例9.5.1文獻(xiàn)復(fù)制9.5.2存放在文獻(xiàn)中學(xué)生成績(jī)排序語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第38頁(yè)9.5.1文獻(xiàn)復(fù)制例9-12設(shè)計(jì)一種程序,實(shí)現(xiàn)任意文本文獻(xiàn)復(fù)制。問(wèn)題分析與算法設(shè)計(jì)⑴由于源文獻(xiàn)是任意,因此源文獻(xiàn)名應(yīng)通過(guò)鍵盤(pán)輸入;同樣,生成目標(biāo)文獻(xiàn)名也應(yīng)由鍵盤(pán)輸入。⑵源文獻(xiàn)以只讀方式打開(kāi),目標(biāo)文獻(xiàn)以寫(xiě)方式打開(kāi)。⑶從第一種字符開(kāi)始,次序逐字符讀出源文獻(xiàn),每讀出一種字符,立即寫(xiě)入目標(biāo)文獻(xiàn)中,使用feof()函數(shù)判斷源文獻(xiàn)結(jié)束狀態(tài)。實(shí)現(xiàn)程序#include<stdio.h>voidmain(){ charch,source[20],target[20]; FILE*fp_s,*fp_t; printf("Enterthesourcefilename:"); scanf("%s",source); printf("Enterthetargetfilename:"); scanf("%s",target); if((fp_s=fopen(source,"r"))==NULL) { printf("Cannotopensourcefile.\n"); exit(1); } if((fp_t=fopen(target,"w"))==NULL) { printf("Cannotopentargetfile.\n"); exit(1); } while(!feof(fp_s)) fputc(fgetc(fp_s),fp_t); fclose(fp_s); fclose(fp_t);}語(yǔ)言程序設(shè)計(jì)(第3版)張磊編著清華大學(xué)出版社第39頁(yè)9.5.2存放在文獻(xiàn)中學(xué)生成績(jī)排序例9-13在例9-5中,我們建立了一種stu_list文獻(xiàn)。編寫(xiě)程序,對(duì)該文獻(xiàn)內(nèi)容按照
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)業(yè)產(chǎn)值與種植面積對(duì)比表
- 年度營(yíng)銷(xiāo)計(jì)劃數(shù)據(jù)對(duì)比表
- 建筑行業(yè)勞務(wù)分包與施工管理協(xié)議
- 企業(yè)智能辦公系統(tǒng)開(kāi)發(fā)合作協(xié)議
- 合作推廣市場(chǎng)營(yíng)銷(xiāo)合作協(xié)議
- 課程表和活動(dòng)安排表
- 日常辦公管理規(guī)章制度匯編
- 空調(diào)安裝工程總包合同
- 高中學(xué)生物理競(jìng)賽準(zhǔn)備故事征文
- 科學(xué)啟蒙故事征文
- 精致的八寶飯
- GB/T 43602-2023物理氣相沉積多層硬質(zhì)涂層的成分、結(jié)構(gòu)及性能評(píng)價(jià)
- 醫(yī)院預(yù)算執(zhí)行情況分析報(bào)告
- 生活老師培訓(xùn)資料課件
- 年終存貨盤(pán)點(diǎn)管理制度
- 三對(duì)三籃球賽記錄表
- 壓痕機(jī)安全操作規(guī)程
- GB/T 7025.1-2023電梯主參數(shù)及轎廂、井道、機(jī)房的型式與尺寸第1部分:Ⅰ、Ⅱ、Ⅲ、Ⅵ類(lèi)電梯
- “汽車(chē)空調(diào)系統(tǒng)檢修”課程標(biāo)準(zhǔn)
- 竇桂梅石灰吟課堂實(shí)錄集合4篇
- 國(guó)際貿(mào)易(對(duì)外經(jīng)濟(jì)貿(mào)易大學(xué))知到章節(jié)答案智慧樹(shù)2023年
評(píng)論
0/150
提交評(píng)論