2024-2025-1 20241316 《计算机基础与程序设计》第十二周学习总结
2024-2025-1 20241316 《计算机基础与程序设计》第十二周学习总结
作业信息
这个作业属于哪个课程 | 2024-2025-1-计算机基础与程序设计 |
---|---|
这个作业的目标 | 无 |
作业正文 | ... 本博客链接 |
教材学习内容总结
一、文件概述
- 文件概念
- 解释文件是存储在外部介质(如磁盘)上的数据集合。在C语言中,文件可以是文本文件(由字符序列组成,每个字符占一个字节,便于人类阅读)或二进制文件(以字节序列存储数据,数据的存储格式和内存中的存储格式相似,更适合计算机存储和读取)。
- 举例说明文本文件和二进制文件的区别,如一个整数1234在文本文件中存储为字符'1'、'2'、'3'、'4'对应的ASCII码,而在二进制文件中则按照整数在内存中的存储方式(例如4个字节的二进制表示)存储。
- 文件指针
- 介绍文件指针的定义,
FILE *
类型的指针用于指向一个文件结构体,这个结构体包含了文件的各种信息,如文件名、文件状态和当前文件位置等。 - 说明文件指针在文件操作中的核心地位,所有对文件的读写操作都是通过文件指针来完成的。
- 介绍文件指针的定义,
二、文件的打开与关闭
- fopen函数
- 详细讲解
fopen
函数的语法,FILE *fopen(const char *filename, const char *mode);
,其中filename
是文件名(包括路径),mode
是文件打开模式,如"r"
(只读)、"w"
(只写,会清空文件原有内容)、"a"
(追加,在文件末尾添加内容)等用于文本文件,"rb"
、"wb"
、"ab"
等用于二进制文件。 - 解释不同打开模式的适用场景,以及如果文件打开失败,
fopen
函数返回NULL
。
- 详细讲解
- fclose函数
- 强调文件使用完毕后需要关闭的重要性,使用
fclose
函数int fclose(FILE *stream);
来关闭文件,其中stream
是之前打开文件时返回的文件指针。 - 说明关闭文件的主要作用,包括释放文件资源、将缓冲区的数据写入文件等。如果关闭成功,
fclose
函数返回0,否则返回EOF
(通常是 - 1)。
- 强调文件使用完毕后需要关闭的重要性,使用
三、文件的读写操作
- 字符读写
- fgetc和fputc函数
- 介绍
fgetc
函数int fgetc(FILE *stream);
用于从指定文件指针stream
指向的文件中读取一个字符,返回值是读取到的字符(如果遇到文件末尾,返回EOF
)。 - 讲解
fputc
函数int fputc(int c, FILE *stream);
用于将一个字符c
写入指定文件指针stream
指向的文件中,写入成功返回写入的字符,失败返回EOF
。 - 通过简单的代码示例展示如何逐字符读取和写入文件,如复制一个文本文件的内容到另一个文件。
- 介绍
- fgetc和fputc函数
- 字符串读写
- fgets和fputs函数
- 讲解
fgets
函数char *fgets(char *str, int n, FILE *stream);
用于从文件中读取一行字符串(包括换行符),str
是存储读取字符串的字符数组,n
是最多读取的字符数,返回值是指向str
的指针(如果遇到文件末尾或者读取错误,返回NULL
)。 - 介绍
fputs
函数int fputs(const char *str, FILE *stream);
用于将一个字符串str
写入文件,写入成功返回非负整数,失败返回EOF
。 - 给出读取和写入字符串的实际应用场景,如读取配置文件中的一行配置信息并进行修改后重新写入。
- 讲解
- fgets和fputs函数
- 格式化读写
- fscanf和fprintf函数
- 详细说明
fscanf
函数int fscanf(FILE *stream, const char *format,...);
的用法,它类似于scanf
函数,但是从文件中按照指定格式format
读取数据,参数列表根据格式字符串的要求来确定。 - 讲解
fprintf
函数int fprintf(FILE *stream, const char *format,...);
,它类似于printf
函数,用于按照指定格式format
将数据写入文件,参数列表也是根据格式字符串的要求来确定。 - 通过实际例子,如从一个包含学生成绩信息的文本文件中读取学生姓名和成绩,经过计算后将新的成绩信息重新写入文件,展示格式化读写的操作。
- 详细说明
- fscanf和fprintf函数
- 二进制文件读写
- fread和fwrite函数
- 介绍
fread
函数size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
用于从二进制文件中读取数据,ptr
是存储读取数据的内存地址,size
是每个数据项的大小,count
是读取的数据项数量,返回值是实际读取的数据项数量。 - 讲解
fwrite
函数size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);
用于将数据写入二进制文件,参数含义和fread
类似,返回值是实际写入的数据项数量。 - 以结构体数据的存储和读取为例,展示二进制文件读写在处理复杂数据结构时的优势,如将一个包含多个成员的结构体数组存储到二进制文件中,然后再读取出来恢复数据结构。
- 介绍
- fread和fwrite函数
四、文件定位
- ftell函数
- 解释
ftell
函数long ftell(FILE *stream);
用于获取文件指针当前位置相对于文件开头的偏移量(字节数),返回值是偏移量。如果出错,返回 - 1L。 - 说明可以通过这个偏移量来记录文件读取或写入的位置,方便后续的操作,比如在文件中间某个位置插入数据。
- 解释
- fseek函数
- 详细讲解
fseek
函数int fseek(FILE *stream, long offset, int whence);
,用于移动文件指针的位置。stream
是文件指针,offset
是偏移量,whence
指定偏移的起始位置(可以是SEEK_SET
(文件开头)、SEEK_CUR
(当前位置)、SEEK_END
(文件末尾))。 - 举例说明如何使用
fseek
函数来实现随机读写,如跳转到文件中间读取特定的数据记录,或者在文件末尾向前移动一定字节数来修改最后几条记录。
- 详细讲解
- rewind函数
- 介绍
rewind
函数void rewind(FILE *stream);
,它的作用是将文件指针重新定位到文件开头,相当于fseek(stream, 0L, SEEK_SET);
,方便重新读取文件内容。
- 介绍
这只是一个大致的知识框架,具体内容还可能包括文件操作的错误处理(如检查ferror
和feof
函数的返回值)等相关知识,不同教材在内容深度和细节上可能会有所不同。