C语言讲义第12章.ppt
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
fwrite(内存地址,长度,次数,文件指针);
float x;
fread ( &x , sizeof(float), 1, fp);
fwrite( &x , 4 , 1 , fp);
19
若有以下的定义和说明
#include”stdio.h” struct std { char num[6];
char name[8]; float mark[4]; } a[30]; FILE *fp;
文件尾部,此时可以进行追加或读操作。
10
如果是二进制文件,则在方式后加“b”。
如果不能正确完成文件的打开操作,函数fopen将返 回错误信息,即返回空指针值NULL。
if ( (fp=fopen (“file1.C”, “r” ) )= =NULL) { printf(“cannot open this file\n”);
main( )
printf(“%d,%f\n” ,_r_.n_u_m__,_r_.t_o_t_a_l _);
{ FILE *f;
f=fopen( “bin.dat”, “rb”); }
reout(f);
}
fanf 函数 是格式化的读写函数,与printf和scanf相仿,但 其读写对象不是终端而是磁盘文件。 fprintf(文件指针,格式字符串,输出列表); fscanf(文件指针,格式字符串,输入列表);
设文件中以二进制形式存有10个班的学生 数据, 且已正确打开,文件指针定位于文件 开头,若要从文件中读30个学生的数据放入 ss数组中,以下不能实现此功能的语句是
A) for (i=0;i<30;i++) fread(&a[i], sizeof(struct std), 1L, fp);
B) for (i=0;i<30;i++,i++) fread(a+i, sizeof(struct std), 1L, fp);
打开文件file1.c读其内容
if((fp=fopen(“file1.c”, “r”))= =NULL)
{ printf(“cannot open file1.c\n”); exit(0); }
ch=fgetc(fp); 读文件中的一个字符到ch
while(ch!=EOF)
{ putchar(ch);
13
文件的读写
r读 文件
程
序
w写 文件
1、fputc 把一个字符写到文件中 fputc(ch, fp);
ch为要输出的字符(常量或变量)。fp:要写入的文件。
fp=fopen(“FILE1.OUT”, “w”); fputc(‘A’, fp); /* 将字符‘A’写入FILE1.OUT */
14
2、fgetc 从指定文件中向程序中的变量读入一 个字符
由每个文件自己开辟。
5
文件类型指针 每个被使用的文件都在内存中开辟一个区,用来存
放文件的有关信息(文件的名字、文件的状态及当前 位置等)。这些信息保存在一个结构体类型的变量中 的。该结构体类型是由系统定义的,名为FILE。
typedef struct { int -fd; /* 文件号 */
int -cleft ; /* 缓冲区中剩下的字符 */ int -mode; /* 文件操作模式 */ char *-nextc; /* 下一个字符的位置 */ char *-buff; /* 文件缓冲区位置 */
12
2、文件的关闭 fclose
文件使用完毕后,应当关闭。关闭就意味着 释放文件指针以供别的程序使用,同时也释放文 件缓冲区的内存,避免文件中数据的丢失,使指 针与文件脱钩。
fclose (文件指针) fclose (fp)
flose 亦有返回值,正常关闭返回值为0,否则为 非0。关闭是否出错可由ferror函数来检验。
{ int a[10],i,j,t;
if(a[j]>a[j+1])
FILE *fp;
{ t=a[j];
if(fp=fopen(“FILE.OUT”, “w”))= =NULL) a[j]=a[j+1];
{ printf(“cannot open \n”); exit(0); } a[j+1]=t;
for(i=0;i<10;i++)
if((fp=fopen(“file1.out”, “w”))= =NULL)
{ printf(“error\n”); exit(0); }
ch=getchar( ); 从键盘读入一个字符到ch while(ch!=‘#’) 判断输入是否结束 { fputc(ch, fp);
ch=getchar( ); 向文件输出字符
int num; float s[4]; } student[50];
并且结构体数组student中的元素都已有 值,若要将这些元素写到硬盘文件fp中, 以下不正确的形式是:
A) fwrite(student, sizeof(struct st), 50, fp);
B) fwrite(student, 50*sizeof(struct st), 1, fp);
文件
程序
文件
文件有两种形式:
1) ASCII文件(文本文件):每字节代表一个字符。
2) 二进制文件:按内存中数据的存放方式。
3
文本文件: 文 以ASCII表示的文件:记事本,*.cpp等 件
二进制文件:
用二进制形式表示的文件:可执行程序*.EXE等
56:ASCII表示为 00110101 00110110,占两字节
用“r+”, “w+”, “a+”方式打开的文件可以输入输出数据。
用“ r+ ”方式打开的文件应事先存在,以便计算机从中读出数据。
用“w+”方式一样建立一个新文件,向其输入数据,然后可以读 取该文件的数据。若打开一个已存在的文件,一样删除其原有的 内容。
用“a+”方式打开已有的文件,打开文件时,文件的位置指针在
#include “stdio.h”
reout(__F__IL__E__*_f_____)
struct rec { int num;
float total; };
{ struct rec r; while (!feof(f)) { fread(&r, _si_z_e_o_f(_r_e_c_), 1, f );
C) fread(a, sizeof(struct std), 30L, fp);
D) for (i=0;i<30;i++) fread( a[i], sizeof(struct std), 1L, fp);
20
若有以下结构体类型
#include”stdio.h” struct st { char name[8];
C) fwrite(student, 25*sizeof(struct st), 25, fp);
D) for (i=0;i<50;i++) fwrite( student+i, sizeof(struct st), 1, fp);
21
下面程序从一个二进制文件中读入结构体数据,并把 结构体数据显示在终端屏幕上。
} FILE; 6
可以定义文件型指针变量
FILE *fp;
fp是一个指向FILE类型结构体的指针变 量。可以使fp指向某一个文件的结构体变量, 从而通过该结构体变量中的文件信息能够访问 该文件。通过文件指针变量能够找到与它相关 的文件。
如果有n个文件,一般应设n个指针变量,
使它们分别指向n个文件,以实现对文件的访
}
fclose(fp); 关闭文件
}
18
fread函数和fwrite函数 用fread和fwrite可以一次读写一个若干长度的数据块
fread(内存地址,长度,次数,文件指针); int a[10]; fread ( a, sizeof(int), 10, fp); fwrite( a, sizeof(int), 10, fp);
判断文件是否结束
ch=fgetc(fp); } putchar(‘\n’);
ch=getchar( ); while (ch!=‘\n’)
fclose(fp); 关闭文件
{..... }
}
判断键盘输入 是否结束
16
EOF为文本文件的结束标志,-1。
while(!feof(fp)) { ch=fgetc(fp);
如果希望向一个已经存在的文件的尾部添加新数据, 保留原有的数据,用“a”方式打开,但文件必须事先存 在,打开文件时,文件的位置指针在文件尾部。
9
文件的使用方式 “r+” 读写 “w+” 读写 “a+” 读写 “rb+” 读写 “wb+” 读写 “ab+” 读写
含义 为读/写打开一个文本文件 为读/写建立一个新的文本文件 为读/写打开一个文本文件 为读/写打开一个二进制文件 为读/写建立一个新的二进制文件 为读/写打开一个二进制文件
56:二进制表示为 111000,占六个二进制位
不同的文件操作的函数、格式不同
4
C文件是一个字节流或二进制流,对文件的存储是以字 节为单位的。
缓冲文件系统: 系统自动在内存为正在处理的文件开辟缓冲区,对
文件的输入输出操作通过缓冲区进行。
输出文件缓冲区 程序数据区
磁盘
输出文件缓冲区
非缓冲文件系统:系统不为文件开辟缓冲区,缓冲区
第十二章 文件
1
键盘
输入
显示器
输出
文件
内 存
文件
光笔....
打印机...
编译系统已经以函数的形式做好了对标准外设(键 盘、屏幕、打印机、文件)的接口,使用时只需按 照要求的格式调用即可。
scanf("%d",&x); printf("%d",x);
2
文件:存储在外部介质上数据的集合。
键盘
程序
屏幕
..... }
当feop(fp)的值为1时文件结束,用此可以判断 文本文件和二进制文件是否结束。
17
从键盘输入一些字符,把它们送入磁盘文件file1.out中去,直到输入 一个#为止。
#include “stdio.h”
main( )
{ FILE *fp;
char ch;
打开文件file1.out输入数据
含义 为输入打开一个文本文件 为输出打开一个文本文件 向文本文件末尾增加数据 为输入打开一个二进制文件 为输出打开一个二进制文件 向二进制文件末尾增加数据
8
文件
r
程序
w 文件
r、w是针对内存而言,用“ r ”方式打开的文件应事 先存在,不能用“r”打开一个并不存在的文件。
用“w”打开一个原来不存在的文件,系统先建立此 文件,然后再向其输入数据。若打开一个已存在的文件, 则打开时将其原来的内容删除,再向其输入数据。
ch=fgetc(fp);
fp:输入文件的指针; ch:程序中的字符变量, 在程序中预先定义。
如果在执行fgetc( )读字符时遇到文件结束符, 函数返回一个文件结束标志EOF。
15
将一个磁盘文件中的字符读出到屏幕上显示
#include “stdio.h”
main( )
{ FILE *fp;
char ch;
fprintf(fp , “%d, %f \n”, i, t );
fscanf(fp, “%d, %f ”, &i, &t);
23
写程序对10个数进行排序,并将结果输出到文件FILE1.OUT中去。
#include”stdio.h”
for(i=0;i<10;i++)
main( )
for(j=0;j<9-i;j++)
}
{ scanf(“%d”, &a[i]);
for(i=0;i<10;i++)
fprintf(fp, “%5d”, a[i]);
fprintf(fp, “%5d”, a[i]);
}
fprintf(fp, “\n”);
fprintf(fp, “\n”);
fclose(fp);
} 24
问。
7
文件的打开与关闭 使用与文件有关的函数必须有:#include “stdio.h” 1、文件的打开(fopen) FILE *fp; fp=fopen(文件名,使用文件方式);
fp=fopen(“A1.C”, "r");
文件的使用方式 “r” 只读 “w” 只写 “a” 追加 “rb” 只读 “wb” 只写 “ab” 追加
exit(0); }
文本文件
内存 将回车换行符转换成换行符
文本文件
内存 将换行符转换成回车换行符
二进制文件不进行这种转换
11
系统定义的三个标准文件指针: stdin: 标准输入文件(键盘) stdout: 标准输出文件(显示器) stderr: 标准错误输出文件(显示器)
这些设备文件由系统控制,自动打开和关闭, 直接使用,无需进行说明。