当前位置:文档之家› C语言文件习题

C语言文件习题

输入函数:
ch = fgetc(fp); fp为已经打开的文件的指针 函数功能: 从指定的文件中读取一个字符。即: 从fp所指向的文件(该文件必须是以读或读写方式 打开的)中读取一个字符返回,读取的字符赋给变 量ch。 若读取字符时文件已经结束或出错: 对于ASCII文件,文件结束时,返回文件结束 标记EOF(-1); 对于二进制文件,要使用feof函数来判断文件 是否结束。
例:fp = fopen ("file1", "r")) 按指定的文件使用方式打开指定的文件。 若文件打开成功,则返回值为非NULL指针; 若文件打开失败,返回NULL。
20
11.2 文件处理
文本文件的三种基本打开方式
“r”:只读方式。为读(输入)文本文件打开文 件。若文件不存在,则返回NULL。 “w”:只写方式。为写(输出)文本文件打开 文件。若文件不存在,则建立一个新文件; 若文件已存在,则要将原来的文件清空。 “a”:追加方式。在文本文件的末尾增加数 据。若文件已存在,则保持原来文件的内容, 将新的数据增加到原来数据的后面;若文件 不存在,则创建。
17
类型说明语句typedef: 定义新的类型来代替已有 类型:typedef int INT
11.2 文件处理
二.如何引用文件结构——文件指针
C语言中对文件的操作都要通过指向该 文件结构的指针。 文件指针变量说明形式: FILE * 文件型指针变量名; 例如: FILE * fp; /* fp 是一个指针变量 */
7
从文件数据的组织形式(存储格式)看

ASCII文件(或称文本文件,即TEXT文件)
文本文件中的数据采用ASCII码格式存储, 全部数据转换为ASCII码。每个ASCII字符占1 个字节。ASCII文件使用文本编辑器可直接阅读。

二进制文件
对数据在内存中的二进制存储格式不做任何 转换,直接存入文件,形成二进制文件。二进 制文件在操作系统下不能直接阅读。
28
11.3 文件顺序读写
一.文件顺序操作
对文件的操作(文件读写)必须按文件中字符的 先后顺序进行,只能在操作了第i个字符之后,才 能操作第i+1个字符。 在对文件操作时,文件的位置指针由系统自 动向前(文件尾方向)移动。
29
11.3 文件顺序读写
进行顺序操作的函数:
字符输入输出函数 字符串输入输出函数 格式化输入输出函数 数据块输入输出函数 fgetc fgets fscanf fread fputc fputs fprintf fwrite
在83年以后ANSI C标准中取消了非缓冲文件系 统,对文本文件和二进制文件均统一采用缓冲文 件系统进行处理。
本课程学习:
缓冲式文件操作方式下,对磁盘文件进行基本 操作。对文本文件和二进制文件有不同的处理方 式。使用标准输入/输出库(stdio.h)函数来实现文 件操作。
14
第十一章 文件
文件概述 文件处理 文件顺序读写 文件随机操作 文件检测 文件实例
12Biblioteka 11.1 文件概述 从C语言对文件的处理方法看
缓冲文件系统 非缓冲文件系统 缓冲文件系统:对每个正在使用的文件, 系统自动在内存中为其开辟一个文件缓冲区。 称为高级文件操作。 非缓冲文件系统:系统不会自动开辟缓冲 区,文件缓冲区是由程序自己设置的。称为 低级文件操作。

13
11.1 文件概述
10
11.1 文件概述
从用户观点看
普通文件(也称为磁盘文件) 特殊文件(也称为标准设备文件或标准I/O文 件) 普通文件是以磁盘为对象且无其它特殊性 能的文件。 特殊文件是以终端为对象的标准的设备文 件。

11
11.1 文件概述
在C语言中,“文件”的概念具有更广泛的意 义。与每台主机相连的所有输入输出设备都看作 是一个文件。即将实际的物理设备抽象为逻辑文 件,它们也被称为设备文件。 例如: 键盘是输入文件 stdin(标准输入文件) 显示器是输出文件 stdout(标准输出文件) 打印机是输出文件 PRN
25
关闭文件(fclose)
fclose函数的调用形式: FILE * fp; ….. fclose ( fp ); fp:已经打开的文件指针。 函数功能
关闭fp指定的文件,切断缓冲区与该文件的联系, 并释放文件指针。 若文件关闭成功,返回值为0; 若文件关闭失败,返回非0值。

26
11.2 文件处理
系统标准设备文件
标准设备文件由系统自动打开和关闭,其 文件结构的指针由系统命名,用户在程序中 可直接使用。 C语言中提供了三个标准设备文件的指针:

stdin
标准输入文件(键盘)
stdout
stderr
标准输出文件(显示器)
标准错误输出文件(显示器)
27
第十一章 文件
文件概述 文件处理 文件顺序读写 文件随机操作 文件检测 文件实例
5
三.系统对文件的处理过程
系统对文件的处理过程就是对文件进行输入 /输出操作的过程。 写文件称为输出
输出文件缓冲区
程序 数据区
输入文件缓冲区 计算机内存
文件
计算机外存
读文件称为输入
6
11.1 文件概述
四.文件的分类
文本文件
二进制文件 缓冲文件系统
普通文件(磁盘文件)
特殊文件(标准设备文件)
非缓冲文件系统
8
11.1 文件概述
例如:将整数1024分别存储到ASCII文件和二进 制文件中,将采用不同的编码形式,占用不同的 字节长度。
内存中的存储形式: 补码 0000 0100 0000 0000
ASCII文件:ASCII码
’1’
’0’
’2’
’4’
占4个字节
二进制文件:补码 0000 0100 0000 0000 占2个字节
掌握本章内容的捷径:
1. 对文件永远是:打开——操作——关闭 2. 学会文件操作库函数(即标准I/O库函数) 的用法
2
第十一章 文件
文件概述 文件处理 文件顺序读写 文件随机操作 文件检测 文件实例
3
11.1 文件概述
一.文件的定义
存储在外部介质上(如磁盘和磁带等 外存储器)的数据或信息的集合。
例如:程序文件中保存着程序,而数据文件 中保存着数据。 main.c C语言源程序 文本文件 main.obj 目标文件 二进制文件 main.exe 可执行文件 二进制文件
4
11.1 文件概述
二.文件的性质
文件是一个有序的数据序列,数据之 间有着严格的排列次序关系,可以按照 它们的排列顺序,依次进行访问,也可 以按照需要,访问任意位置上的数据。
32
11.3 文件顺序读写
输出函数:
fputc( ch, fp );
函数功能:
ch为需要输出的字符
将一个字符输出到指定文件中。即将字符变 量ch中的字符输出到fp所指向的文件。
若输出操作成功,该函数返回输出的字符; 否则,返回EOF。
33
例:显示一个文本文件的内容
#include <stdio.h> int main ( ) { FILE * fp; char filename[20], ch; printf ("Enter filename:"); scanf("%s",filename); /* 输入文件名 */ if ((fp=fopen(filename, "r"))==NULL) /* 打开 */ { printf(“file open error.\n”); /* 出错处理 */ exit (0); } while ( ( ch = fgetc(fp) )!=EOF) /* 读字符 */ putchar(ch); fclose (fp); /* 关闭文件 */ }
30
scanf getchar gets...
键盘文件 内存
磁盘文件
fscanf fgetc fgets fread...
printf putchar 显示器文件 puts...
fprintf 磁盘文件 fputc fputs fwrite...
31
二.字符输入输出( fgetc / fputc )
22
11.2 文件处理
常见文件打开操作
if ((fp = fopen ("filename", "r")) == NULL ) { printf ("Cannot open file.\n"); exit (0); /*打开文件出错,调用库函数终止程序*/ } 含义:以只读方式打开文件名为filename的文件。 文件名可以是从盘符开始的完整路径名,也可 以是相对路径。
16
文件结构类型FILE: typedef struct { int _fd; /*文件位置指针,即当前文件的读写位置*/ int _cleft; /* 文件缓冲区中剩余的字节数 */ int _mode; /* 文件操作模式 */ char * nextc; /*用于文件读写的下一个字符位置*/ char * _buff; /* 文件缓冲区位置(指针) */ } FILE ; 文件结构变量在打开文件时由操作系统自动建立, 用户使用文件时无需重复定义。 在使用文件的时候要使用文件包含命令: #include <stdio.h>
23
11.2 文件处理
练习:以下可作为函数fopen中第一个 参数的正确格式是: A. c:user\text.txt B. c:\user\text.txt C. "c:\user\text.txt" D. "c:\\user\\text.txt"
相关主题