计算机二级C语言程序设计第12讲_第1页
计算机二级C语言程序设计第12讲_第2页
计算机二级C语言程序设计第12讲_第3页
计算机二级C语言程序设计第12讲_第4页
计算机二级C语言程序设计第12讲_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

第12讲文件内容提要文件概述标准文件操作文件概述文件是指存放在外存储器上的信息的集合数据文件的存储形式(1)文本文件(ASCII文件)按数据的ASCII形式存储(2)二进制文件按数据在内存中的二进制形式存储标准文件与非标准文件利用缓冲区将对磁盘文件的频繁逐次访问变为批量访问的做法称为标准文件操作

程序数据区输出文件缓冲区输入文件缓冲区磁盘输出输入输出输入文件的存取方式标准I/O提供了4种文件存取方法(1)读写一个字符(2)读写一个字符串,将多个字符组成的字符串写入文件或从文件中读出。(3)格式化读写,根据格式控制指定的数据格式对数据进行转换存取。(4)成块读写,也称做按记录读写。4种存取方式和C语言的对应的函数关系:标准文件FILE结构指针FILE类型保存被使用的文件的有关信息所有的文件操作都需要FILE类型的指针FILE是库文件中定义的结构体的别名注意不要写成structFILE举例FILE*fp;FILE类型typedefstruct{shortlevel;/*缓冲区满空程度*/unsignedflags;/*文件状态标志*/charfd;/*文件描述符*/unsignedcharhold;/*无缓冲则不读取字符*/shortbsize;/*缓冲区大小*/unsignedchar*buffer;/*数据缓冲区*/unsignedchar*curp;/*当前位置指针*/unsignedistemp;/*临时文件指示器*/shorttoken;/*用于有效性检查*/}FILE;文件的打开(fopen函数)函数原型FILE*fopen(char*,char*mode);参数说明:要打开的文件路径mode:打开模式返回值若成功,返回指向被打开文件的指针若出错,返回空指针NULL(0)文件的打开模式文件操作方式含义″r″(只读)为只读打开一个字符文件″w″(只写)为只写打开一个字符文件,文件指针指向文件首部″a″(追加)打开字符文件,指向文件尾,在已存在的文件中追加数据″rb″(只读)为只读打开一个二进制文件″wb″(只写)为只写打开一个二进制文件″ab″(追加)打开二进制文件,以向文件追加数据″r+″(读写)以读写方式打开一个已存在的字符文件″w+″(读写)为读写建立一个新的字符文件″a+″(读写)为读写打开一个字符文件,进行追加″rb+″(读写)为读写打开一个二进制文件″wb+″(读写)为读写建立一个新的二进制文件″ab+″(读写)为读写打开一个二进制文件进行追加文件的打开举例FILE*fp1,*fp2;/*以文本只读方式打开file1*/if(!(fp1=fopen("file1","r"))){printf("CannotOpenThisFile!\n");exit(0);/*退出程序*/}/*以二进制读写方式打开*/fp2=fopen("C:\\HOME\\","rb+");

文件的关闭(fclose函数)函数原型intfclose(FILE*fp);参数说明fp:要关闭的文件指针返回值若成功,返回0若出错,返回EOF(-1)不用的文件应关闭,防止数据破坏丢失文件的关闭举例FILE*fp;charfile[]="D:\\USER\\STUDENTS.DAT";if(!(fp=fopen(file,"rb+"))){printf("Openerror!\n",file);exit(0);}......fclose(fp);读写操作(1)读写文件中字符的函数:从磁盘文件读取字符的函数是fgetc(),形式为:int

fgetc(FILE*stream);详细说明

将一个字符写入磁盘文件的函数是fputc(),其形式为:int

fputc(int

ch,FILE*stream);详细说明

注:getc()和fgetc()功能相同,putc()和fputc()相同应用举例读写操作(2)读写文件中字符串的函数:从磁盘文件读取字符串的函数是fgets(),形式为:char*fgets(char*str

,intn,FILE*stream);详细说明

将一个字符串写入磁盘文件的函数是fputs(),其形式为:char*fputs(char*str

,FILE*stream);详细说明

应用举例读写操作(3)格式化读写函数函数原型int

fscanf(FILE*fp,char*format[,address,...]);int

fprintf(FILE*fp,char*format[,argument,...]);说明与printf和scanf函数类似从文件输入或输出到文件应用举例标准的随机读写(1)文件指针定位函数文件位置指针位置指针指向当前读写的位置每次读写文件,位置指针都会相应移动可以通过相关函数强制修改位置指针相关函数rewind函数详细说明fseek函数详细说明ftell函数详细说明标准的随机读写(2)文件随机读写函数:fwrite和freadsize_t

fwrite(void*buffer,

size_tsize,

size_tcount, FILE*fp);size_t

fread(void*buffer,

size_tsize,

size_tcount, FILE*fp);参数说明应用举例fgetc/getc函数函数原型intfgetc(FILE*fp);intgetc(FILE*fp);参数fp:文件指针返回值若成功,返回输入的字符若失败或文件结束,返回EOFfputc/putc函数函数原型intfputc(intc,FILE*fp);intputc(intc,FILE*fp);参数c:要输出到文件的字符fp:文件指针返回值若成功,返回输出的字符若失败或文件结束,返回EOF读写文件中字符的函数voidmain(){FILE*fp;/*定义FILE结构指针变量*/charch;if((fp=fopen(″data1.txt″,″r″))==NULL)/*打开并测试文件*/{ printf(″filecannotbeopened\n″); exit(1);/*若文件打开不成功,退出*/}while((ch=fgetc(fp))!=EOF)/*读文件并测试是否文件尾*/fputc(ch,stdout);/*输出到标准设备文件(显示器)显示*/fclose(fp);/*关闭文件*/}fgets函数函数原型char*fgets(char*s,intn,FILE*fp);返回值若成功,返回s首地址;若失败,返回NULL说明从fp输入字符串到s中输入n-1个字符,或遇到换行符或EOF为止读完后自动在字符串末尾添加'\0'fputs函数函数原型intfputs(char*s,FILE*fp);返回值若成功,返回输出字符个数(或最后的字符)若失败,返回EOF说明字符串的结束标志'\0'不会输出到文件也不会在字符串末尾自动添加换行符读写文件中字符串的函数#include〈stdio.h〉voidmain(){FILE*fp2;charbuffer[64];if((fp2=fopen(″data2.txt″,″r″))==NULL)/*以只读方式打开文件,且测试*/{printf(″can′topenfile\n″);exit(1);/*打开不成功退出*/}while(!feof(fp2))/*测试文件是否结束*/{if(fgets(buffer,64,fp2)!=NULL)/*读一行字符并测试是否为空*/printf(″%s″,buffer);/*显示该行字符*/}fclose(fp2);/*关闭文件*/}格式化读写函数/*2007-4*/#include<stdio.h>main(){FILE*fp;intk,n,a[6]={1,2,3,4,5,6};fp=fopen("d2.dat","w");fprintf(fp,"%d%d%d\n",a[0],a[1],a[2]);fprintf(fp,"%d%d%d\n",a[3],a[4],a[5]);fclose(fp);fp=fopen("d2.dat","r");fscanf(fp,"%d%d",&k,&n);printf("%d%d\n",k,n);fclose(fp);}输出结果:123456rewind函数函数原型voidrewind(FILE*fp);参数fp:文件指针功能使文件位置指针重新返回文件开头fseek函数(1)函数原型intfseek(FILE*fp,longoffset,intwhence);参数fp:文件指针offset:偏移量whence:起始位置功能随机改变文件的位置指针fseek函数(2)起始位置SEEK_SET(0):文件开始SEEK_CUR(1):文件当前位置SEEK_END(2):文件末尾举例fseek(fp,100L,SEEK_SET);fseek(fp,-10L,SEEK_CUR);fseek(fp,-20L,SEEK_END);ftell函数函数原型longftell(FILE*fp);参数fp:文件指针返回值若成功,返回当前文件指针位置若出错,返回-1Lfwrite和fread函数说明参数buffer:要读/写的数据块地址size:要读/写的每个数据项的字节数count:要读/写的数据项数量fp:文件指针返回值若成功,返回实际读/写的数据项数量若失败,一般返回0文件随机读写函数/*2006-9*/#include<stdio.h>main(){FILE*fp;inti;charch[]="abcd",t;fp=fopen("abc.dat","wb+");for(i=0;i<4;i++)fwrite(&ch[i],1,1,fp);fseek(fp,-2L,SEEK_END);fread(&t,1,1,fp);fclose(fp);printf(“%c\n”,t);/*输出c*/}2007年4月设有定义:FILE*fw;,请将以下打开文件的语句补充完整,以便可以向文本文件readme.txt的最后续写内容。fw=fopen(“readme.txt”,___________)"a"2007年4月有以下程序#include<stdio.h>main(){FILE*fp;inti,a[6]={1,2,3,4,5,6};fp=fopen(“d3.dat”,”wb+”);fwrite(a,sizeof(int),6,fp);fseek(fp,sizeof(int)*3,SEEK_SET);/*该语句使读文件的位置指针从文件头向后移动3个int型数据*/fread(a,sizeof(int),3,fp);fclose(fp);for(i=0;i<6;i++)printf(“%d,”,a[i]);}程序运行后的输出结果是()

A)4,5,6,4,5,6,B)1,2,3,4,5,6,C)4,5,6,1,2,3,D)6,5,4,3,2,1,2007年9月1、读取二进制文件的函数调用形式为:fread(buffer,size,count,fp);,其中buffer代表的是A)一个文件指针,指向待读取的文件B)一个整型变量,代表待读取的数据的字节数

C)一个内存块的首地址,代表读入数据存放的地址D)一个内存块的字节数2007年9月2、有以下程序#include<stdio.h>main(){FILE*fp;inta[10]={1,2,3,0,0},i;fp=fopen("d2.dat,"wb");fwrite(a,sizeof(int),5,fp);fwrite(a,sizeof(int),5,fp);fclose(fp);fp=fopen("d2.dat","rb");fread(a,sizeof(int),10,fp);fclose(fp);for(i=0;i<10;i++)printf("%d",a);}程序的运行结果是A)1,2,3,0,0,0,0,0,0,0,B)1,2,3,1,2,3,0,0,0,0,C)123,0,0,0,0,123,0,0,0,0,D)1,2,3,0,0,1,2,3,0,0,

2008年4月1、以下叙述中错误的是A)gets函数用于从终端读入字符串B)getchar函数用于从磁盘文件读入字符C)fputs函数用于把字符串输出到文件D)fwrite函数用于以二进制形式输出数据到文件2008年4月2、有以下程序#include<stdio.h>main(){FILE*fp;inta[10]={1,2,3},i,n;fp=fopen("d1.dat","w");for(i=0;i<3;i++)fprintf(fp,"%d",a[i]);fprintf(fp,"\n");fclose(fp);fp=fopen("d1.dat","r");fscanf(fp,"%d",&n);fclose(fp);printf("%d\n",n);}程序的运行结果是A)12300B)123C)1D)321

2008年4月3、以下程序从名为的文本文件中逐个读入字符并显示在屏幕上。请填空。#include<stdio.h>main(){FILE*fp;charch;fp=fopen(【15】);ch=fgetc(fp);while(!feof(fp)){putchar(ch);ch=fgetc(fp);}putchar('\n');fclose(fp);}"","r"2008年9月1、有以下程序#include<stdio.h>main(){FILE*

温馨提示

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

评论

0/150

提交评论