第十二章 文件第一节 概述
1.文件是指记录在介质上的数据的集合
2.分类按所依附的介质:卡片文件、纸带文件、
磁带文件、磁盘文件按内容:源程序文件、目标文件、
数据文件按数据的组织形式:字符代码文件二进制文件
3.对文件的操作是高级语言的一种重要功能缓冲文件系统非缓冲文件系统缓冲文件系统的特点非缓冲文件系统与缓冲文件系统的区别非缓冲文件系统与缓冲文件系统的各自的优点缓冲文件系统的各种操作,文件打开、关闭文件的顺序读写、随机读写文件出错信息控制第二节 文件( FILE) 类型 指针一般形式:
typedef struct{

}FILE;
/*结构体成员项,
用来存放文件信息 */
如,FILE *fp1,*fp2,*fp3;
/*三个指针变量,均指向 FILE 类型结构体数据 */
定义文件类型指针的一般形式:
FILE *文件结构体指针变量
1.文件的打开 (fopen函数 )
第三节 文件的打开与关闭
fopen(文件名,文件使用方式 )
调用方式:
如,fopen(,file”,“r”)
/*以只读方式打开文件 file*/
“r”,w”,a”
“r+”,w+”,a+”
“rb”,wb”,ab”
“rb+”,wb+”,ab+”
例:
FILE *fp;
if((fp=fopen(“file”,”r”))==NULL)
{
printf(“Cannot open this File\n”);
exit(0);
}
/*正常出口,返回系统 */
2.文件的关闭 (fclose函数 )
fclose(文件结构体指针变量)
调用方式:
如,fclose( fp)
第四节 文件的读写
1.输入 /输出一个字符
1)输出一个字符到磁盘文件一般形式,fputc(ch,fp);
/*把字符 ch的值输出到
fp所指向的文件中 */
#include,stdio.h”
main()
{ FILE *fp;
char ch;
if((fp=fopen(“file1.txt”,”w”))==NULL)
{ printf(“Cannot open this File\n”);
exit(0); }
else while((ch=getchar())!=’\n’)
fputc(ch,fp);
fclose(fp);
}
例,把字符 ch的值输出到 fp所指向的文件中
2)从磁盘文件中接收一个字符一般形式,ch=fgetc(fp);
/*从 fp指向的文件中读入一个字符并赋给字符变量 ch*/
例,把字符 ch的值输出到 fp所指向的文件中
#include,stdio.h”
main()
{ FILE *fp;
char ch;
if((fp=fopen(“file1.txt”,”r”))==NULL)
{ printf(“Cannot open this File\n”);
exit(0); }
while((ch=fgetc(fp))!=EOF)
putchar(ch);
fclose(fp);
}
2.输入 /输出一个字符串用 fgets函数读入一个字符串用 fputs函数输出一个字符串
1) fgets(str,n,fp)
2) fputs(str,fp)
例 1:#include,stdio.h”
main()
{ FILE *fp;
char str[81];
if((fp=fopen(“file2.txt”,”w”))==NULL)
{ printf(“Cannot open this File\n”);
exit(0); }
while(strlen(gets(str))>0)
{ fputs(str,fp);
fputs(“\n”,fp); }
fclose(fp);
}
运行时输入,I am a female.
hello
Happy new year
例 2:#include,stdio.h”
main()
{ FILE *fp;
char str[81];
if((fp=fopen(“file2.txt”,”r”))==NULL)
{ printf(“Cannot open this File\n”);
exit(0); }
while(fgets(str,81,fp)!=NULL)
printf(“%s”,str);
fclose(fp);
}
3.格式化的输入 /输出用 fprintf函数输出某种格式类型数据用 fscanf函数读入某种格式类型数据
1) fprintf(fp,“格式控制,,输出表列 )
2) fscanf(fp,“格式控制,,地址表列 )
例,将格式化数据写到磁盘文件中
#include,stdio.h”
main()
{ FILE *fp;
char name[20];
int num;
float score;
if((fp=fopen(“file2.txt”,”w”))==NULL)
{ … }
scanf(“%s,%d,%f”,name,&num,&score);
while(strlen(name>1)
{ fprintf(fp,“%s,%d,%f”,name,num,score);
scanf(“%s,%d,%f”,name,&num,&score); }
fclose(fp);
}
例,从磁盘文件中用格式输入数据
#include,stdio.h”
main()
{ FILE *fp;
char name[20];
int num;
float score;
if((fp=fopen(“file2.txt”,”r”))==NULL)
{ … }
scanf(“%s,%d,%f”,name,&num,&score);
while(fscanf(fp,“%s,%d,%f”,name,&num,&score)!=EOF)
printf(“%s,%d,%f”,name,num,score);
fclose(fp);
}
习题定义一个二维数组 str,找出每行中最大值,并按一一对应的顺序放入一维数组 s
中。即:第零行中的最大值,放入 s[0]
中,第一行中的最大值,放入 s[1]
中,……,。然后输出 s数组,并将结果保存在一个磁盘文件,test”中。
习题输出由 0~9数字组成的四位数,
1)允许四位数字相同,0不允许带头
2)不允许四位数字相同,0不允许带头要求把成绩输出到 file.doc文件中习题编一程序:能从刚才的 file.doc文件中找出所有素数。要求:不用数组、函数,
用循环控制完成( do-while)