c程序设计 第13章 文件 答案解析.

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第十三章

例13.1 程序为:

#include

#include

void main()

{

FILE *fp;

char ch,filename[10];

scanf("%s",filename);

if((fp=fopen(filename,"w"))==NULL)

{

printf("cannot open file\n");

exit(0);

}

ch=getchar();

ch=getchar();

while(ch!='#')

{

fputc(ch,fp);putchar(ch);

ch=getchar();

}

putchar(10);

fclose(fp);

}

例13.2 程序为:

#include

#include

void main()

{

FILE *in, *out;

char ch,infile[10],outfile[10];

printf("Enter the infile name:\n");

scanf("%s",infile);

printf("Enter the infile name:\n");

scanf("%s",outfile);

if((in=fopen(infile,"r"))==NULL)

{

printf("cannot open file\n");

exit(0);

}

if((out=fopen(outfile,"w"))==NULL)

{

printf("cannot open file\n");

exit(0);

}

while(!feof(in)) fputc(fgetc(in),out);

fclose(in);

fclose(out);

}

注:在该程序的运行中,每复制一次就会产生一个乱码置于最后,并依次叠加。这不是个优秀的程序。

13.5.1 rewind函数:

#include

void main()

{

FILE *fp1,*fp2;

fp1=fopen("file1.c","r");

fp2=fopen("file2.c","w");

while(!feof(fp1)) putchar(getc(fp1));

rewind(fp1);

while(!feof(fp1)) putc(getc(fp1),fp2);

fclose(fp1);fclose(fp2);

}

例13.5

#include

#include

struct student_type

{

char name[10];

int num;

int age;

char sex;

}stud[10];

void main()

{

int i;

FILE *fp;

if((fp=fopen("file22.c","rb"))==NULL)

{

printf("can not open file\n");

exit(0);

}

for(i=0;i<10;i+=2)

{

fseek(fp,i*sizeof(struct student_type),0);

fread(&stud[i],sizeof(struct student_type),1,fp);

printf("%s %d %d %c\n",stud[i].name,stud[i].num,stud[i].age,stud[i].sex);

}

fclose(fp);

}

注:这个程序是对的,但常用于处理二进制文件,因为文本文件要发生字符转换,计算位置时常发生混乱。

习题

13.1 对c文件操作有些什么特点?什么是缓冲文件系统?什么是非缓冲文件系统?这两者的缓冲区有什么区别?

答:c语言把文件看作是一个字符的序列级,即由一个一个字符的数据顺序组成。根据数据的组织形式,可以分为:ASCII文件(文本文件)和二进制文件。一个c文件是一个字节流或二进制流(流式文件)。它允许对文件存取一个字符,这就增加了处理的灵活性。

缓冲文件系统:是指系统自动在内存中为每一个正在使用的文件开辟一个缓冲区,如果从磁盘向内存读入数据,则一次从磁盘文件将一批数据输入到内存缓冲区,然后再从缓冲区逐个地将数据送到程序数据区中去。

非缓冲文件系统:是指系统不自动开辟确定大小的缓冲区,而有程序为每个文件设定缓冲区。用缓冲文件系统进行的输入输出又称高级磁盘输入输出,用非缓冲文件系统进行的输入输出又称为低级输出输入系统。ANSI C标准不采用非缓冲文件系统,而只采用缓冲文件系统,即既用缓冲文件系统处理文本文件,也用它处理二进制文件,也就是将缓冲文件系统扩充为可以处理二进制文件。

13.2 什么是文件型指针?通过文件型指针访问文件有什么好处?

答:缓冲文件系统中,关键的概念是“文件指针”。每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息(如文件的名字,文件的状态及文件当前位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是由系统定义的,取名为FILE。这和一般使用指针变量的好处是一样的。

13.3 对文件的打开和关闭的含义是什么?为什么要打开和关闭文件?

答:打开的含义:带回指向a1文件的指针赋给fp,这样fp就和文件a1联系上了。或者说,fp指向a1文件。在使用完一个文件后应该关闭它,以防止它再被误用。“关闭”就是文件指针变量不指向该文件,也就是文件指针变量与文件“脱钩”,此后不能再通过该指针对原来与其联系的文件进行读写操作,除非再次打开,使该指针变量重新指向该文件。

13.4 程序为:

#include

#include

void main()

{

FILE *fp;

char ch,filename[10];

printf("please input the name of the file:\n");

scanf("%s",filename);

if((fp=fopen(filename,"w"))==NULL)

{

printf("cannot open file\n");

exit(0);

}

相关文档
最新文档