程序设计第八章对文件输入和输出上课_第1页
程序设计第八章对文件输入和输出上课_第2页
程序设计第八章对文件输入和输出上课_第3页
程序设计第八章对文件输入和输出上课_第4页
程序设计第八章对文件输入和输出上课_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

基本要求掌握基本的标准设备输入/输出格式控制方法;掌握文本文件的读/写操作;考试不要用二进制方式向文件读/写操作文件的简单应用fopen()函数来实现打开文件fclose函数函数来实现关闭文件

fgets函数:从文件中读入字符串fputs函数:把字符串输出到文件中fprintf函数:按格式将内存中的数据转换成对应的字符,并以ASCII形式输出到文本文件中。文件:

在外部介质上数据的集合,有一个标识名以供区别。操作系统是以文件为单位对数据进行管理的.例:D:\CC\temp\file1.dat流(stream):数据从运行环境到程序,或从程序流至运行环境的传送通道。8.1

C文件的概念文件的分类1 文本文件(ASCII码文件):由字符组成的文件,以字符为单位存取;它的每一个字节放一个字符的ASCII码,存放一段字符后就“换行”其内容可直接显示8.1

C文件的概念8.1

C文件的概念2)二进制文件:由二进制数据组成,以字节为单位存取二进制文件在传送时均采用二进制流其内容不可直接显示二进制文件比文本文件节省外存空间和转换时间C语言中对文件的创建、读写都是用库函数来实现C语言中的文件属于流式文件,即:把文件中的数据看作一连串的字符(或字节),而不考虑记录的格式和界限文件缓冲区计算机系统专门为输入/输出设备开辟的一个临时存放信息的区域。目的:提高系统的处理效率。8.1

C文件的概念文件程序数据区输出文件缓冲区输入文件缓冲区8.2文件类型指针结构类型名FILE:存放文件的有关信息,通常在stdio.h中如下定义数据类型FILE:typedef

struct{

shortlevel;unsignedflags;charfd;/*缓冲区“满”或“空”的程度*//*文件状态标志*//*文件描述符*/unsignedcharhold;

/*如无缓冲区不

字符*/shortbsize;unsignedchar*buffer;unsignedar*curp;unsignedistemp;/*缓冲区的大小*//*数据缓冲区的位置*//*指针,当前的指向*//*临时文件,指示器*/shorttoken;}FILE;/*用于有效性检查*/结构体通过文件指针变量

文件信息定义文件类型的指针变量:FILE

*fp;当一个程序开始运行时,三个事先定义的变量被初始化。FILE

*stdin;FILE

*stdout;FILE

*stderr;输入流的文件指针,通常指键盘标准输出流的文件指针,通常指屏幕输出流的文件指针,通常指终端出错8.2文件类型指针8.3

文件的打开和关闭对文件读写之前:打开文件;对文件进行读写;在使用结束:关闭文件。打开文件要有三件事通知系统:打算

的文件名;怎样使用那个文件;到什么地方去找该文件的有关信息。打开文件作用:为文件建立相应的文件信息区和文件缓冲区用fopen()函数来实现打开文件fopen函数的调用方式为:FILE

*fp;fp=fopen(文件名,文件存取方式);例:FILE

*fp;fp=fopen(“test.dat”,“w”);fp=fopen(“D:\temp

test.dat”,

“r”);8.3.1

文件的打开文件存取方式:“r”

(只读read)为输入打开一个文本文件“w”

(只写write)为输出打开一个文本文件“a”

(追加append)向文本文件尾增加数据“rb”

(只读read

binary)为输入打开一个二进制文件“wb”

(只写write

binary)为输出打开一个二进制文件“ab”“r+”“w+”(追加append

binary)向二进制文件尾增加数据

(读写)为读/写打开一个文本文件(读写)为读/写建立一个新的文本文件“a+”

(读写)为读/写打开一个文本文件“rb+”“wb+”“ab+”(读写)为读/写打开一个二进制文件(读写)为读/写建立一个新的二进制文件(读写)为读/写打开一个二进制文件)fopen函数的返回值有两个:为空(NULL),表示出错(如,打开一个并不存在的文件;磁盘出故障;磁盘已满无法建立新文件等)打开文件失败;此时将带回一个空指针。为非空,表示打开文件成功。8.3.1

文件的打开一种常用的打开文件的方法:if((fp=fopen(“file1”,

“r”))==NULL){

printf(“Can

not

open

this

file\n”);exit(0);}关闭所有文件,终止正在执行的程序一些C编译系统可能不完全提供所有的文件存取模式(只能用“r”、“w”、“a”),有的C版本不用“r+”、“w+”、“a+”而用“rw”、“wr”、“ar”等。8.3.1

文件的打开用fclose函数来关闭文件文件处理即告结束,并

所有与之有关的资源调用fclose函数:fclose(文件指针);例如:fclose(fp);如果已经对该文件进行了写操作,在文件关闭前把缓冲区中的数据自动写回到该文件中,

缓冲区。fclose函数返回值:当成功地执行了关闭操作,则返回值是0;返回值非0,表示关闭文件时发生了错误。8.3.2

文件的关闭8.4

文件的读写fgetc和fputcfgetc从文件中读出一个字符函数返回值:读成功,带回所读的字符,失败则返回文件结束标志它们的定义形式为:例:FILE

*fp1,*fp2;int

fgetc(fp);8.4

文件的读写fputc向文件中写入一个字符函数返回值:读成功,带回所读的字符,失败则返回文件结束标志它们的定义形式为:例:int

fputc(c,f)char

c;FILE

*f;fgets和fputsfgets函数:从文件中读入字符串,调用形式如下:

fgets(str,n,fp);从fp所指文件中读入n-1个字符放入str为起始地址的空间内;如果在未读满n-1个字符时,已读到一个换行符或一个EOF,则结束本次读操作。读入结束后,系统将自动在最后加‘\0’,并返回str的值。失败则返回NULL存放字符串的起始地址int

类型变量

文件指针8.4

文件的读写fputs函数:把字符串输出到文件中调用形式如下:fputs(str,fp);str可以是字符串常量、指向字符串的指针、存放字符串的字符数组名;字符串中最后的‘\0’并不输出,也不自动加‘\n’;输出成功,函数返回值为0,否则为非0。待输出的字符串文件指针8.4

文件的读写fscanf和fprintffscanf函数只能从文本文件中按格式输入调用形式:fscanf(文件指针,格式字符串,指针列表)例:fscanf(stdin,“%d%d”,&a,&b);scanf(“%d%d”,&a,&b);fprintf函数按格式将内存中的数据转换成对应的字符,并以ASCII形式输出到文本文件中。调用形式:fprintf(文件指针,格式字符串,输出列表)例:fprintf(stdout,

%d

%d”,x,y);printf(“

%d

%d”,x,y);8.4

文件的读写rewind(fp):使fp的位置指针重新返回文件的开头,没有返回值。f

l:获得文件当前位置指针的位置调用形式:long

t;t=f

l(fp);调用正确时,返回相对文件开头的字节数;出错时,返回-1L。文件结束检测feof(fp):测试所指向的文件当前状态是否“文件结束”(返回值为1,否则返回值为0)。EOF标志只能判断文本文件;feof(fp)可用于二进制和文本文件8.5

文件的定位函数ferror(fp):检查当调用输入输出函数时是否出错。若返回值为0,说明未出错;否则出错;同一文件的每一次输入输出调用,均产生一个新的ferror函数值。clearerr(fp):使文件错误标志和文件结束标志置为0。只要出现错误标志,就一直保留,直到对同一文件调用clearerr函数或rewind函数,或任何其他一个输入输出函数8.6

文件的出错检测#include

<stdio.h>#include<stdlib.h>#include<string.h>int

main(){FILE

*fp;char

str[3][10],temp[10];int

i,

j,k,

n=3;printf

("Enter

strings:\n");for(i=0;i<n;i++)gets(str[i]); //由键盘出入字符串for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if

(strcmp(str[k],str[j])>0)k=j;if(k!=i){strcpy(temp,str[i]);strcpy(str[i],str[k]);strcpy(str[k],temp);}}书上例10.3if

((fp=fopen("ex10-8.txt","w+"))==NULL){printf("Cann't

open

file!");exit(0);}printf("\nThe

new

sequence:\n");for(i=0;i<n;i++){fputs(str[i],fp);fputs("\n",fp);printf("%s\n",str[i]);}在向文件写数据时,只输出字符串中的有效字符,不输出字符串结束标志‘\0’若无此句,则文件前后两次输出的字符串之间无分隔,连成一片在屏幕上显示/*

printf("%s\n",str[i]);

*/}printf(“%d\n”,i);

//以下从文件中读回字符串,rewind(fp);

//fp的位置指针重新返回文件的开头i=0;while(fgets(str[i],10,fp)!=NULL){printf("%s",str[i]);i++;}fclose(fp);return

0;}fgets函数遇到”\n”就结束字符串输入,”\n”作为最后一个字符也读入到字符数组#include

<stdio.h>#include<stdlib.h>#include<math.h>voidmain(){

FILE

*f,*f2;char

c,

*str,st[30],line;int

i; float

r;if

((f=fopen("ex10-3.txt","w"))==NULL){printf("Cann't

open

file!");

exit(0);}c='a';

i=5;

r=2.14;str="I'm

learning

C

language.";fprintf(f,"%4d",i);fprintf(f,"%4d

%6.2f\n",i+11,sqrt(9));fprintf(f,"%s\n",str);fprintf(f,"\n");fprintf(f,"i=%4d

r=%6.2f

c=%c\n",i,r,c);fclose(f);例:用格式化的方式读写文本文件st[24]='\0';

printf("%s",st);printf("\n");printf("\n");st[2]='\0';

printf("%s",st);printf("%4d",i);st[4]='\0';

printf("%s",st);printf("%6.2f",r)

温馨提示

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

评论

0/150

提交评论