C课件第16讲(05级).ppt

上传人:本田雅阁 文档编号:3480001 上传时间:2019-09-01 格式:PPT 页数:32 大小:308.02KB
返回 下载 相关 举报
C课件第16讲(05级).ppt_第1页
第1页 / 共32页
C课件第16讲(05级).ppt_第2页
第2页 / 共32页
C课件第16讲(05级).ppt_第3页
第3页 / 共32页
C课件第16讲(05级).ppt_第4页
第4页 / 共32页
C课件第16讲(05级).ppt_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《C课件第16讲(05级).ppt》由会员分享,可在线阅读,更多相关《C课件第16讲(05级).ppt(32页珍藏版)》请在三一文库上搜索。

1、由于第12.4节内容偏少,有关文件的课件只有一讲,请各位老师根据自己的教学进度进行适当的增减!,第十六讲,Begin:,第十二章 文件,文件与文件类型指针 文件的打开与关闭 文件的读写 文件的定位,12.1.1 文件,文件的定义:存储在外存储器上的数据集合,二进制文件:直接把内存数据以二进制形式保存。例如: 整数1234,以二进制文件保存,是二进制数 0x04D2,缓冲文件系统:系统在内存中开辟一块缓冲区以便慢速 的外设与其成块地进行数据交换。,12.1.2 文件类型指针,从磁盘(文件)读入数据:先一次性从磁盘文件将一批数据 输入到缓冲区,然后再从缓冲区 逐个读入数据到变量。,12.1.2 文

2、件类型指针,文件类型指针,例如:FILE *fp; 定义了一个结构体FILE类型的指针变量fp。,12.2.1 文件的打开,fopen( )函数 打开文件的一般形式: FILE *文件指针名; 文件指针名fopen(“文件名”,“文件使用方式”);,为了打开一个文件,首先要为该文件定义一个文件类型指针,然后用C语言提供的fopen函数打开文件。fopen函数有两个参数:“文件名”与“文件使用方式”。它们均是字符串。,12.2.1 文件的打开,文件使用方式,12.2.1 文件的打开,例如:FILE *fp; fp=fopen(“file a”, “r”); 其意义是在当前目录下打开文件file

3、a,文件的使用方式为“读入”,并使fp指向该文件。,又如:FILE *fpabc fpabc=(“c:abc”, “rb”) 其意义是打开c盘根目录下的文件abc,这是一个二进制文件,只允许按二进制方式进行读操作。两个反斜线“”中的第一个表示转义字符,第二个表示根目录。,12.2.2 文件的关闭,fclose( )函数,说明:如果不关闭文件,将会丢失数据,并且一个C程序能同时打 开的文件数有限,应该养成在使用完文件后关闭文件的习惯,返回值:操作正常返回0,否则返回EOF(是在stdio.h文件中定义的 符号常量,值为-1),功能:是将由fp指向的缓冲区中的数据存放到外存储器的文件中, 然后释放

4、该缓冲区,使文件指针变量不再指向与该文件对应 的FILE结构,从而断开与文件的关联,关闭文件的一般形式: fclose(文件指针);,文件使用步骤: FILE *fp; fp = fopen(“文件名“, “r“); if (fp = NULL) /* 当文件打开失败时的处理 */ . . /* 对文件的各种操作 */ fclose(fp);,12.2.2 文件的关闭,12.3 文件的读写,顺序读写是指从文件中一个接一个读写数据,仅当读写了前一个数据后,才能读写下一个数据。 顺序读写在读写数据后,文件位置指针自动跳到下一个读写位置。标准输入输出只能进行顺序读写。,随机读写是指从文件中读写数据时

5、可不考虑数据在文件中的位置,可以在文件的任何位置读写。 随机读写在读写数据前,需要将文件位置指针移到读写位置。当文件以读或写方式打开,文件位置指针设置在文件头,若文件以附加方式打开,位置设置在文件末尾。,fgetc( )函数,一般形式: 字符变量=fgetc(文件指针); 功能:从指定文件读入一个字符,该文件必须是以读或读写方式打开 返回值:调用成功时返回读入的字符 文件结束时返回文件结束符 EOF(-1),12.3.1 字符读写(fgetc函数和fputc函数),以下要讲到的8个函数均在“stdio. h”标准输入输出库函数中定义,例如: ch=fgetc(fp); 表示从文件指针变量fp指

6、向的文件中读出一个字符,赋给字符变量ch,文件位置指针,文件型数据结构中,用文件位置指针指向当前对文件进行读写操作的位置。在文件打开时,该指针总是指向文件的第一个字节。读写文件时,每读写一个字符后,该位置指针的值会自动加1,指向下一个字符。改变位置指针的值,也就改变了下一次读写操作在文件中执行时的位置。,12.3.1 字符读写(fgetc函数和fputc函数),文件指针和文件内部的位置指针的区别:文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的。文件位置指针用以指示文件内部的当前读写位置,每读写一次,该指针均向后移动,它不需在程序中定义说明,由系统自动设置。,

7、feof( )函数 一般形式: feof(文件指针); 功能:判断文件位置指针是否已至文件尾 返回值:函数返回值为1时表示已至文件尾部,为0时则还 未到文件结束处,12.3.1 字符读写(fgetc函数和fputc函数),使用fgetc( )函数,文件结束时返回文件结束符 EOF (值为-1)。这在对文本文件操作时不会产生问题。但对二进制文件进行读操作时,由于-1是二进制数的合法值,故将影响文件数据的读取。为解决此问题,ANSI C提供了专门判断文件结束的函数feof( )。,fputc( ) 函数 一般形式:fputc(字符量,文件指针); 功能:将一个字符写到磁盘文件上去 返回值:调用成功

8、时返回输出的字符,失败时返回EOF(-1),12.3.1 字符读写(fgetc函数和fputc函数),例如: fputc(a,fp); 表示向文件指针变量fp指向的文件输出一个字符a 。,题目:打开“c:infile.c”文件,然后将其复制到“c:outfile.c”上 #include “stdio.h” #include “stdlib.h” void main( ) FILE *infp,*outfp; char ch; if (infp=fopen(“c:infile.c”, “r”)= NULL) printf(“Cannot open this infile. n”); exit(

9、0); if (outfp=fopen(“c:outfile.c”, “w”)= NULL) printf(“Cannot open this outfile. n”); exit(0); ,12.3.1 字符读写(fgetc函数和fputc函数),作用是终止程序。在终止以前,所有文件被关闭, 缓冲输出(正等待输出的)内容被写完, 调用退出函数。括号内的值定义了程序的退出状态,一般来说,0表示正常退出,非0表示错误,while(!feof(infp) if(ch=fgetc(infp)!=EOF) fputc(ch,outfp); fclose(infp); fclose(outfp); ,1

10、2.3.1 字符读写(fgetc函数和fputc函数),fgets( )函数: 一般形式:fgets(字符数组名,n,文件指针); 功能:从指定文件读入n-1个字符到字符数组, 最后加一个 0结束符。在读完n-1个字符之前遇到换行符或文 件结束符(EOF),读入即结束 返回值:str的首地址,12.3.2 字符串读写(fgets函数和fputs 函数),例如:fgets(str,n,fp); 是从fp所指的文件中读出n-1个字符送入字符数组str中,fputs( )函数 一般形式:fputs(字符串,文件指针); 功能:向指定的文件输出一个字符串, 0 结束符不输出。 其中字符串可以是字符串常

11、量、字符数组名或指针 变量 返回值:调用成功时,返回0,否则返回EOF,12.3.2 字符串读写(fgets函数和fputs 函数),例如:fputs(“abcd”,fp); 其意义是把字符串“abcd”写入fp所指的文件之中。,#include “stdio.h“ #include “stdlib.h“ void main( ) FILE *fp; char str100, ch; if(fp=fopen(“c:abc.c“, “w“)= NULL) printf(“file open error.n“); exit(0); ,12.3.2 字符串读写(fgets函数和fputs 函数),题

12、目:从键盘上输入一串字符,写入文本文件“abc.c”中,再将文本文件的内容读出,显示在屏幕上。,printf(“请输入一串字符:n“); gets(str); fputs(str,fp); fclose(fp); if(fp=fopen(“c:abc.c“, “r“)= NULL) printf(“file open error.n“); exit(0); while(!feof(fp) if(ch=fgetc(fp)!=EOF) putchar(ch); fclose(fp); ,12.3.2 字符串读写(fgets函数和fputs 函数),fscanf( )函数 一般形式: fscanf(

13、文件指针,“格式控制字符串”,地址表列); 功能:从指定的文件中格式化读数据,12.3.3 格式读写(fscanf函数和fprintf函数),说明:这个函数与格式输入函数scanf( )很相似,它们的区别 在于,scanf( )函数是从键盘输入数据,而fscanf( )函 数是从文件读入数据,因此在fscanf( )函数参数中多 了一个文件指针,用于指出从哪个文件读入数据。,例如:fscanf(fp,“%d, %f“, 表示将磁盘文件中的数据送给变量i, t。,fprintf( )函数 一般形式: fprintf(文件指针,“格式控制控制”,输出表列); 功能:格式化写数据到指定的文件中,12

14、.3.3 格式读写(fscanf函数和fprintf函数),说明:这个函数与printf( )函数很相似,它们的区别在于, printf( )函数是将数据输出到屏幕上,而fprintf( )函数 是将数据输出到文件中,因此在fprintf( )函数参数中多了一个文件指针,用于指出将数据输出到哪个文件中,例如: fprintf(fp,“%d,%6.2f”, i,t); 将变量i和t的值按%d和%6.2f的格式输出到fp指向的文 件。设 i=3,t=4. 5, 则输出到磁盘文件上的是:3,4. 50,fscanf( )函数和fprintf( )函数对磁盘文件读写,使用方便,易理解。但输入输出需要转

15、化,因此,在内存与磁盘频繁交换数据的情况下,最好用fread( )和fwrite( )函数,12.3.4 数据块读写(fread函数和fwrite函数),例如:fread (a ,2, 5 ,fp); 表示从已打开的一个文件中读入5个整数,依次送入整型数组a中,随机读写:移动文件内部的位置指针到需要读写的位置, 再进行读写 文件定位:按要求移动位置指针,是实现随机读写的关键,12.4.1 rewind ( )函数,rewind 函数: 一般形式:rewind(文件指针); 功能:使位置指针重新返回文件的开头,函数无返回值。,fseek( )函数 功能:改变文件的位置指针,12.4.2 fsee

16、k( )函数,一般形式: fseek(文件类型指针,位移量,起始点) 其中, “文件指针”:是文件打开时返回的文件指针。 “位移量”:是指以起始点为基础,向前位移的字节数,可以为负值。 大多数C语言版本要求位移量为long型数。 “起始点”:表示从何处开始计算位移量,规定的起始点有:,返回值:操作成功返回0,否则返回非0。,题目:设文件“alphabet”中存放了字母表“AZ”,现在打开这个文件,用从尾部倒着读的方式将其信息读出并送屏幕显示。 #include “stdio.h” #include “stdlib.h” void main( ) FILE *fp; long i; if(fp=

17、fopen(“c:alphabet.c”, “rb”)= NULL) printf(“file open error.n”); exit(0); for(i=1;i=26;i+) fseek(fp,-i,2); /*i=1时,定位于字母Z*/ putchar(fgetc(fp); /*显示读出的字符,位置指针+1*/ fclose(fp); ,12.4.2 fseek( )函数,ftell( )函数 功能:得到当前文件指针位置。 返回值:调用成功时,返回long int 数值,表示文 件指针位置;出错返回-1L。,12.4.3 ftell( )函数,题目:建立一个文件,向其中写入一组学生姓名和

18、成绩,然后从该文件中读出成绩大于80分的学生信息并显示在屏幕上。,综合举例,分析:先建立文件,再写入学生记录。用rewind( )函数定位于文件开头,用fread( )函数从文件中读出一个个的记录,然后判断成绩是否大于80分,若是则输出。在读记录之前,要用fseek( )函数定位在正确的位置上,#include “stdio.h” #include “stdlib.h” void main( ) FILE *fp; struct student char name10; int score; s, stud =“张雄”,90,“李平”,72,“孙兵”,80,“刘军”,88,“王伟”,92; int i; if(fp=fopen(“stud.bin”,”wb+”)=NULL) printf(“不能建立文件stud.binn”); exit(0); ,程序:,for(i=0;i80) printf(“%s %dn”,s.name,s.score); fclose(fp); ,程序:,The End,上机实验内容: 熟悉文件的相关概念;掌握文件读写及文件定位函数的用法; 实验教程第12章文件 实验1、2,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1