第10章、利用文件保存数据nullC语言程序设计C语言程序设计
第 10章 利用文件保存数据上一章内容回顾上一章内容回顾定义和使用结构体变量
结构体数组
结构体指针*/27本章学习目标本章学习目标理解C文件的有关概念
掌握文件的操作
理解文件的随机读写*/27内容进度内容进度C文件的有关概念
文件的打开与关闭
文件的顺序读写*/27C文件的相关概念C文件的相关概念文件(file)
存储在外部介质(如磁盘)上的数据的集合
程序文件:存放程序的文件
.c
.obj
.exe
数据文件:存储程序运行时读写的数据
.dat
输入输出流(stream)
输入...
nullC语言程序
C语言程序设计
第 10章 利用文件保存数据上一章内容回顾上一章内容回顾定义和使用结构体变量
结构体数组
结构体指针*/27本章学习目标本章学习目标理解C文件的有关概念
掌握文件的操作
理解文件的随机读写*/27内容进度内容进度C文件的有关概念
文件的打开与关闭
文件的顺序读写*/27C文件的相关概念C文件的相关概念文件(file)
存储在外部介质(如磁盘)上的数据的集合
程序文件:存放程序的文件
.c
.obj
.exe
数据文件:存储程序运行时读写的数据
.dat
输入输出流(stream)
输入:文件内存
输出:内存文件
流式文件
C语言把文件看作一个个字符(字节)的序列,由一个个的字符数据按顺序组成
输入输出流的开始和结束受程序控制,不受物理符号(如回车换行符)控制*/27文件名文件名文件名用于标识唯一一个文件
由文件路径、文件名主干、文件后缀三部分组成
d:\cc\temp\file1.dat
文件路径表示文件在外部存储设备中的位置
文件名主干即文件标识,简称文件名
文件后缀表示文件的性质*/27文件分类文件分类ASCII文件
也称文本文件(text)
每一个字节放一个ASCII代码
字符数据只能以ASCII形式存储
二进制文件
把内存中的数据按其在内存中的存储形式原样输出到磁盘上
数值数据可用ASCII形式,也可按二进制形式存储*/27文件缓冲区文件缓冲区缓冲文件系统
系统自动在内存区为程序中每一个正在使用的文件开辟一个文件缓冲区
数据从内存输出到磁盘时
先将数据送到内存的缓冲区,缓冲区满后一起送到磁盘
数据由磁盘读入到内存时
先将一批数据送到内存的缓冲区,缓冲区满后逐个将数据送到内存程序数据区(给程序变量)
缓冲区的大小由各个具体的C编译系统确定*/27文件指针文件指针文件信息区
内存中有一个文件信息区,用于存储文件的相关信息,如文件名、文件状态及文件当前位置等
文件信息保存在一个结构体变量中,结构体类型由系统声明,取名为FILE,定义FILE类型的信息包含在头文件stdlib.h中,不同的C编译系统的FILE类型不完全相同
定义FILE类型的变量
FILE f;
f中存放文件的相关信息
定义指向文件型数据的指针变量
FILE *fp;
fp指向某一个文件的文件信息区,通过该文件信息区中的信息能够访问该文件
指向文件信息区的指针变量也称为指向文件的指针变量*/27内容进度内容进度C文件的有关概念
文件的打开与关闭
文件的顺序读写*/27文件的打开与关闭文件的打开与关闭打开文件
在读写文件之前应先打开文件
打开文件是指为文件建立相应的信息区和文件缓冲区
通常在打开文件时,指定一个指针变量指向该文件
关闭文件
是指撤销文件信息区和文件缓冲区,使文件指针变量不再指向该文件*/27打开文件打开文件fopen函数
用于打开文件,为文件建立相应的信息区和文件缓冲区
fopen(文件名,使用文件方式);
fopen的返回值是指向被打开文件的指针,即返回被打开文件的文件信息区的起始地址
试图使用读方式打开一个不存在的文件、磁盘出故障、磁盘已满无法建立新文件时,会导致出错,fopen将返回一个空指针值NULL
文件出错时,可通过exit(0)关闭所有文件,终止正在执行的程序*/27关闭文件关闭文件fclose函数
用于关闭文件,撤销文件信息区和文件缓冲区,使文件指针变量不再指向该文件
fclose(文件指针);
使用完文件若不关闭将导致数据丢失,向文件写入数据时,先将数据输出到缓冲区,缓冲区满后才输出到文件,用fclose关闭文件时,先把缓冲区的数据输出到磁盘文件,然后释放文件指针变量
如果顺利关闭了文件,返回0,否则返回EOF(-1)*/27内容进度内容进度C文件的有关概念
文件的打开与关闭
文件的顺序读写*/27文件的顺序读写文件的顺序读写对文件数据读写的顺序与数据在文件中的物理顺序一致
顺序写时,先写入的数据存放在文件中前面的位置,后写如的数据存放在文件后面的位置
顺序读时,先读文件中前面的数据,后读文件中后面的数据
*/27向文件读写一个字符向文件读写一个字符例10.1从键盘输入一些字符,逐个把它们送到磁盘上,直到输入一个“#”为止
*/27/*从键盘输入一些字符,逐个把它们送到磁盘上,直到输入一个“#”为止*/
#include
#include
void main()
{
FILE *fp;
char ch,filename[10];
printf("请输入所用的文件名");
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL) /*打开输出文件*/
{
printf("无法打开此文件\n"); /*打开文件出错时,给予提示信息*/
exit(0); /*终止程序*/
}
ch=getchar(); /*接收上面scanf语句最后输入的回车符*/
printf("请输入一个准备存储到磁盘的字符串(以#结束):");
ch=getchar(); /*接收从键盘输入的第一个字符*/
while(ch!='#') /*输入#时结束循环*/
{
fputc(ch,fp); /*向磁盘文件输出一个字符*/
putchar(ch); /*将输出到磁盘文件的字符输出到屏幕上*/
ch=getchar(); /*再接收一个键盘输入字符*/
}
fclose(fp); /*关闭文件*/
putchar(10); /*换行符的ASCII代码是10,向屏幕输出换行符*/
}向文件读写一个字符向文件读写一个字符例10.2将一个磁盘文件中的内容复制到另一个磁盘文件中,将10.1中的file1.dat文件中内容复制到磁盘文件file2.dat中*/27/*将一个磁盘文件中的内容复制到另一个磁盘文件中*/
#include
#include
void main()
{
FILE *in,*out;
char ch,infile[10],outfile[10]; /*两个存放文件名的数组*/
printf("请输入读入文件(源数据文件)的名字:");
scanf("%s",infile);
printf("请输入输出文件(接收文件)的名字:");
scanf("%s",outfile);
if((in=fopen(infile,"r"))==NULL) /*打开输入文件*/
{
printf("无法打开输入文件\n"); /*打开文件出错时,给予提示信息*/
exit(0); /*终止程序*/
}
if((out=fopen(outfile,"w"))==NULL) /*打开输出文件*/
{
printf("无法打开输出文件\n"); /*打开文件出错时,给予提示信息*/
exit(0); /*终止程序*/
}
while(!feof(in)) /*遇到输入文件的结束标志时结束循环*/
{
ch=fgetc(in); /*从输入文件读入一个字符,暂存于变量ch中*/
fputc(ch,out); /*将ch写到输出文件*/
putchar(ch); /*将ch显示到屏幕*/
}
putchar(10); /*换行符的ASCII代码是10,向屏幕输出换行符*/
fclose(in); /*关闭输入文件*/
fclose(out); /*关闭输出文件*/
}向文件读写一个字符串向文件读写一个字符串*/27向文件读写一个字符串*/27向文件读写一个字符串例10.3从键盘读入若干字符串,按字母顺序排序,然后把排好序的字符串送到磁盘文件保存/*从键盘读入若干字符串,按字母顺序排序,然后把排好序的字符串送到磁盘文件保存*/
#include
#include
#include
void main()
{
FILE *fp;
char str[3][10],temp[10]; /*存放字符串的二维数组str,临时数组temp*/
int i,j,k,n=3;
printf("Enter strings:\n"); /*提示输入字符串*/
for(i=0;i0) /*比较字符串大小*/
k=j;
if(k!=i) /*将str[i]与str[k]的值对换*/
{ strcpy(temp,str[i]);
strcpy(str[i],str[k]);
strcpy(str[k],temp);
}
}
if((fp=fopen("string.dat","w"))==NULL) /*打开磁盘文件*/
{
printf("Can't open file!\n");
exit(0);
}
printf("\nThe new sequence:\n");
for(i=0;i
#define SIZE 10
struct student_type
{
char name[10];
int num;
int age;
char addr[15];
}stud[SIZE]; /*结构体数组,包括10个学生数据*/
void save() /*定义save函数,向文件输出数据*/
{
FILE *fp;
int i;
if((fp=fopen("stu.dat","wb"))==NULL) /*打开输出文件stu.dat*/
{
printf("Can't open the file!\n");
return;
}
for(i=0;i总结本章内容总结C文件的有关概念
文件的打开与关闭
文件的顺序读写*/27
本文档为【第10章、利用文件保存数据】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。