程序设计基础11_第1页
程序设计基础11_第2页
程序设计基础11_第3页
程序设计基础11_第4页
程序设计基础11_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、程序设计基础(C语言)东北大学高级语言程序设计课程组课程网站: 程序设计基础(C语言) 数据按顺序组成一个一个的字符序列 每一个字符用一个ASCII码来表示,占用1个字节 ASCII码形式的文件在文本编辑器下可以直接阅读保存在内存中的所有数据在存入文件的时候都要先转换为等价的字符形式当要从文件中读取数据时,在将字符串转换为浮点数例如:123.45(浮点数) 将123.45转换为字符串“123.45” 再存放程序设计基础(C语言) 内存中的数据存入磁盘的时候不需要进行数据转换 磁盘上保存的数据采用语言规定的与内存数据一致的表示形式进行存储例如:123.45存放字二进制文件中将会占用4个字节(浮点

2、数)程序设计基础(C语言) 方便人们的阅读和理解 可以直接在Windows下的记事本等工具直接观察 占用存储空间较多而且在数据输入输出时必须进行二进制代码和ASCII码之间的转换二进制文件存储空间的利用效率高 输入输出时不需要进行转换,因而速度较快,可以节省磁盘空间和转换时间 二进制文件不能直接识别内存中的表示形式,不方便人们的阅读和理解,可读性差程序设计基础(C语言) 计算机内存计算机内存程程序序数数据据区区输入文件缓冲区输入文件缓冲区输出文件缓冲区输出文件缓冲区外存外存文件文件写文件写文件输出输出输入输入读文件读文件程序设计基础(C语言) n“写文件”将保存在内存中的数据写入磁盘 首先要建

3、立一个“输出文件缓冲区” 通过该缓冲区可将内存中的数据存入磁盘,以文件的形式保存n“读文件”将保存在文件中的数据装入内存 首先要建立一个“输入文件缓冲区”,将文件中的数据装入缓冲区 然后再由缓冲区存入程序可以操作的内存数据区程序设计基础(C语言) nC语言系统对缓冲区的处理方式不同产生了两种不同的文件处理方式 缓冲文件系统 对每个正在使用的文件,系统自动地在内存中为其开辟一个缓冲区非缓冲文件系统 指系统不会自动开辟缓冲区,而要由程序自行设置文件的缓冲区 n提示在ANSI C83标准中取消了非缓冲文件系统 对文本文件和二进制文件均统一采用缓冲文件系统进行处理程序设计基础(C语言) n缓冲文件的特

4、点缓冲区是一个连接计算机内存数据与外存文件的桥梁在内存开辟一个“缓冲区”,为程序中的每一个文件使用 执行读文件的操作时,从磁盘文件将数据先读如内存“缓冲区”,装满后再从内存“缓冲区”依此读入进接收的变量 执行写文件的操作时,先将数据写入内存“缓冲区”,待内存“缓冲区”写满后再写入文件 由此可见,内存“缓冲区”的大小,影响着实际操作外存的次数,内存“缓冲区”越大,操作外存的次数越少,执行速度就越快、效率就越高一般来说:文件的“缓冲区”的大小随机器而定程序设计基础(C语言) 程序设计基础(C语言) 每个正在使用的文件都要说明一个FILE类型的结构变量n该类型就是文件读写所需要分配的内存区域的类型n

5、利用一个结构体类型的变量存放该结构变量用于存放文件的有关信息 文件的名字、文件的性质、文件的当前状态等FILE 类型由系统定义n它包含的成员即FILE的各个分量由操作系统自动定义在头文件stdio.h中定义n通过文件结构的数据集合进行输入输出处理文件结构在打开文件时由操作系统自动建立程序设计基础(C语言) 在头文件stdio.h中定义的结构FILE typedef struct typedef struct short levelshort level; / /* *文件的缓冲区级别(满或空的程度)文件的缓冲区级别(满或空的程度)* */ / unsigned flag unsigned fl

6、ag; / /* *文件状态标志文件状态标志* */ / char fd char fd; / /* *文件号文件号* */ / int int cleft; / cleft; /* *缓冲区的剩余字符(剩余空间)缓冲区的剩余字符(剩余空间)* */ / int int mode mode; / /* *文件的操作模式文件的操作模式* */ / short size short size; / /* *缓冲区大小缓冲区大小* */ / char char * *bufferbuffer; / /* *文件缓冲区的地址(位置)文件缓冲区的地址(位置)* */ / char char * *cur

7、pcurp; / /* *当前地址指针(下一个字符的位置)当前地址指针(下一个字符的位置)* */ / short token short token; / /* *有效性检查控制单元有效性检查控制单元* */ / FILEFILE;程序设计基础(C语言) 如果需要同时处理n个文件,一般需要说明n个指针变量使它们分别指向n个不同的文件,以实现对文件的访问我们只需要定义文件类型的指针 通过这个指针,程序与操作系统之间交流信息,使用文件程序设计基础(C语言) 例如:FILE *p; /*p是一指向文件结构的指针变量*/n提示语言中标准设备文件是由系统控制的 它们由系统自动打开和关闭 用户在程序中可

8、以直接使用,无需再进行说明语言中提供了三个标准设备文件的指针 stdin 标准输入文件(键盘) stdout 标准输出文件(显示器) stderr 标准错误输出文件(显示器) FILE * 文件型指针名文件型指针名;程序设计基础(C语言) 指向被打开的文件filename文件名 所要打开的文件名称mode文件使用方式 用具有特定含义的符号表示 FILEFILE* * fp fp; ;fp=fopenfp=fopen(char char * *filenamefilename,char char * *modemode)程序设计基础(C语言) FILE * *fpfp;fp=fopenfp=fo

9、pen(“stu.datstu.dat”,“w”w”);); / /* *以写方式打开当前目录下的以写方式打开当前目录下的stu.datstu.dat文件文件 并将返回的指向并将返回的指向stu.datstu.dat文件的文件指针文件的文件指针 赋给文件类型指针变量赋给文件类型指针变量fpfp* */ /ifif(fpfp=NULL=NULL) printf printf(“cannot open filen” cannot open filen” );); exitexit(0 0);); 2.文件的操作程序设计基础(C语言) #include “stdio.h#include “stdio

10、.h” void main void main()() FILE FILE * *fpfp; fp=fopenfp=fopen(“readme.txtreadme.txt”,“w”w”);); ifif(fpfp=NULL=NULL) printfprintf(“file not found!”file not found!”);); fclosefclose(fpfp);); else else printf printf(“file opened ok!”file opened ok!”);); 可以在可以在fopenfopen打开文件时打开文件时检查函数的返回值是否检查函数的返回值是否为

11、为NULLNULL以确定文件是否以确定文件是否真正打开,若文件打开真正打开,若文件打开失败,还使用读写函数失败,还使用读写函数对文件进行读写操作将对文件进行读写操作将会出现错误。会出现错误。 2.文件的操作程序设计基础(C语言) #include “stdio.h#include “stdio.h” ” void main void main()() FILE FILE * *fpfp; fp=fopenfp=fopen(“readme.txtreadme.txt”,“w”w”);); if if (fpfp=NULL=NULL) printf printf(“file not found!”

12、file not found!”);); exitexit(0 0);); else else printf printf(“file opened ok!”file opened ok!”);); exitexit(0 0)也是一个库)也是一个库函数,定义在函数,定义在“stdio.hstdio.h”中,它起的作用是:中,它起的作用是:(1 1)关闭所有文件;)关闭所有文件;(2 2)程序正常退出;)程序正常退出; (3 3)返回操作系统;)返回操作系统; (4 4)将()将(0 0)返回操作)返回操作系统。系统。一般情况下:一般情况下:exitexit(0 0)表示在程序设计者控制表示在程

13、序设计者控制的范围内正常退出;的范围内正常退出;exitexit(!0!0)则表示程序)则表示程序非正常退出。非正常退出。2.文件的操作程序设计基础(C语言) 可以避免文件中数据的丢失否则容易导致对文件的误操作 尤其是刚对文件进行写操作,如不关闭文件,可能会丢失刚刚写入的数据n关闭文件采用 C库函数fclose程序设计基础(C语言) 返回值为整型 正常关闭时返回为0,否则返回为非0数,表示关闭出错函数的功能n关闭由文件指针指定的文件切断缓冲区与该文件的联系释放文件指针fclose (文件指针文件指针);程序设计基础(C语言) #include “stdio.h#include “stdio.h

14、” void main void main()() FILE FILE * *fpfp; fp=fopenfp=fopen(“readme.txtreadme.txt”,“r”r”);); if if (fpfp=NULL=NULL) printfprintf(“file not found!n”file not found!n”);); else else printfprintf(“file opened ok!n”file opened ok!n”);); fclosefclose(fpfp);); printfprintf(“file closed!n”file closed!n”);

15、); 2.文件的操作程序设计基础(C语言) 针对文本文件和二进制文件的不同性质进行分类操作,对文本针对文本文件和二进制文件的不同性质进行分类操作,对文本文件可按字符读写或按字符串读写;对二进制文件可按成块读写或文件可按字符读写或按字符串读写;对二进制文件可按成块读写或格式化读写。各种格式化读写。各种C C语言编译系统都提供了丰富的文件读写函数,语言编译系统都提供了丰富的文件读写函数,有一些库函数事实上已成为标准。有一些库函数事实上已成为标准。读写字符读写字符 C C提供提供fgetcfgetc和和fputcfputc函数对文本文件进行字符的读写。函数对文本文件进行字符的读写。 函数定义格式:函

16、数定义格式: fgetc和和fputcfgetc函数从输入流的当前位置返回一个字函数从输入流的当前位置返回一个字符,并将文件指针指示器移到下一个字符符,并将文件指针指示器移到下一个字符处,如果已经到文件尾部,函数返回处,如果已经到文件尾部,函数返回EOF,此时表示本次操作结束。此时表示本次操作结束。fputc函数完成将函数完成将字符的值写入所指定的流文件的当前位置字符的值写入所指定的流文件的当前位置处,并将文件指针后移一位。该函数的返处,并将文件指针后移一位。该函数的返回值是所写入字符的值,出错时返回回值是所写入字符的值,出错时返回EOF。 2.文件的操作程序设计基础(C语言) #includ

17、e stdio.h#include stdio.h main() main() FILE FILE * *fpfp; ; char c; char c; fp = fopen(test.txt,w fp = fopen(test.txt,w); /); /* *以写的方式打开文件以写的方式打开文件* */ / if(fp if(fp = NULL) = NULL) printf(File printf(File doesnt existn); doesnt existn); exit(0); exit(0); while (c= fgetchar while (c= fgetchar() !=

18、 n);() != n); / /* *只要输入字符为非空格符只要输入字符为非空格符* */ / fputc(c fputc(c,fpfp); /); /* * 写入文件一个字符写入文件一个字符 * */ / fclose(fp fclose(fp); ); 程序设计基础(C语言) fgetsfgets()函数从文件中读取至多()函数从文件中读取至多num-1num-1个字符,并将其放入个字符,并将其放入 strstr指向的数组中。函数形式为:指向的数组中。函数形式为: char char * *fgetsfgets(char char * *strstr,intint num num,FILE FILE * *

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论