2024-2025-1 20241417 《计算机基础与程序设计》第十四周学习总结
2024-2025-1 20241417 《计算机基础与程序设计》第十四周学习总结
作业信息
这个作业属于哪个课程 | <班级的链接>(如2024-2025-1-计算机基础与程序设计) |
---|---|
这个作业要求在哪里 | <作业要求的链接>2024-2025-1计算机基础与程序设计第十四周作业 |
这个作业的目标 | <《C语言程序设计》第13-14章并完成云班课测试> |
作业正文 | https://www.cnblogs.com/lry666666/p/18637334 |
教材学习内容总结
- 文件的基本概念
- 文件的定义与分类:文件是存储在外部介质上数据的集合,可分为文本文件(以 ASCII 码形式存储,每个字符占一个字节,便于人阅读和编辑)和二进制文件(数据按其在内存中的存储形式原样存储,占用空间可能更小,读写效率更高,适合存储数值型数据等)。
- 文件指针
- 定义:
FILE
是一个结构体类型,文件指针是指向FILE
结构体的指针变量,用于标识文件在内存中的位置和状态等信息,通过文件指针来操作文件。例如FILE *fp;
声明了一个文件指针fp
。
- 定义:
- 文件的打开与关闭
- 打开文件:使用
fopen
函数打开文件,其一般形式为fp = fopen("文件名", "文件使用方式");
,其中文件使用方式包括"r"
(只读)、"w"
(只写,若文件不存在则创建,若存在则清空内容)、"a"
(追加写,在文件末尾添加数据)、"rb"
、"wb"
、"ab"
(二进制文件的相应读写方式)等。如果打开文件成功,fopen
函数返回文件指针,否则返回NULL
。 - 关闭文件:使用
fclose
函数关闭文件,fclose(fp);
,关闭文件后,文件指针与该文件脱离联系,同时系统会将缓冲区中尚未写入文件的数据写入磁盘,并释放文件指针占用的内存空间。关闭文件操作很重要,可避免数据丢失和资源浪费。
- 打开文件:使用
- 文件的读写操作
- 字符读写函数:
fgetc
:从指定文件中读取一个字符,如ch = fgetc(fp);
,读取成功返回读取到的字符,若读到文件末尾或出错则返回EOF
(-1
)。fputc
:向指定文件写入一个字符,如fputc(ch, fp);
,写入成功返回写入的字符,出错则返回EOF
。
- 字符串读写函数:
fgets
:从文件中读取一个字符串,fgets(str, n, fp);
,n
为要读取的字符个数(包括'\0'
),会读取到换行符'\n'
(如果文件中有),并将其作为字符串的一部分存储,若成功则返回字符串首地址,若读到文件末尾或出错则返回NULL
。fputs
:将字符串写入文件,fputs(str, fp);
,写入字符串str
(不包括'\0'
)到文件中,成功返回非负整数,出错返回EOF
。
- 格式化读写函数:
fscanf
:从文件按指定格式读取数据,如fscanf(fp, "%d%s", &num, str);
,按照格式字符串从文件中读取数据并存储到相应变量中,返回成功读取的数据项数,若遇到文件末尾或出错则返回EOF
。fprintf
:将数据按指定格式写入文件,fprintf(fp, "%d %s", num, str);
,将数据按格式写入文件,返回写入的字符数。
- 数据块读写函数:
fread
:用于从文件读取数据块到内存,fread(buffer, size, count, fp);
,buffer
是指向存储数据的内存区域的指针,size
是每个数据块的字节数,count
是要读取的数据块数量,成功则返回实际读取的数据块数量,若遇到文件末尾或出错则返回小于count
的值。fwrite
:将内存中的数据块写入文件,fwrite(buffer, size, count, fp);
,参数含义与fread
类似,成功返回实际写入的数据块数量。
- 字符读写函数:
- 文件的定位与随机读写
- 文件头定位:
rewind
函数将文件指针重新定位到文件开头,rewind(fp);
。 - 文件指针移动:
fseek
函数可将文件指针移动到指定位置,fseek(fp, offset, origin);
,offset
是偏移量(字节数),origin
指定起始位置(SEEK_SET
表示文件开头,SEEK_CUR
表示当前位置,SEEK_END
表示文件末尾)。例如fseek(fp, 10L, SEEK_SET);
将文件指针从文件开头向后移动 10 个字节。 - 获取当前位置:
ftell
函数用于获取文件指针当前相对于文件开头的偏移字节数,long pos = ftell(fp);
,返回值为文件指针当前位置,如果出错则返回-1L
。
- 文件头定位:
教材学习中的问题和解决过程(先问 AI)
- 问题 1:不理解文件指针的移动规则
- 问题 1 解决方案:重新复习 fseek 函数的参数含义。SEEK_SET 表示从文件开头开始计算偏移量,SEEK_CUR 表示从当前文件指针位置计算偏移量,SEEK_END 表示从文件末尾开始计算偏移量(偏移量为负数时向前移动指针,正数时向后移动指针)
- 问题 2:混淆文本文件和二进制文件的读写方式
- 问题 2 解决方案:深入理解文本文件和二进制文件的本质区别。文本文件以字符形式存储,每个字符占用一个字节,并且遵循特定的字符编码(如 ASCII、UTF-8 等),适合存储人类可读的文本数据;二进制文件则是按照数据在内存中的存储形式原样存储,没有特定的字符编码限制,更适合存储数值型数据、图像、音频等非文本数据
- 问题 3:忘记关闭文件导致资源未释放
- 问题 3 解决方案:养成良好的编程习惯,在每次打开文件后,立即在适当的位置(通常是文件操作完成后)添加 fclose 函数来关闭文件。可以使用代码注释来提醒自己关闭文件的重要性
基于AI的学习
代码调试中的问题和解决过程
- 问题1:定义字符数组时忘记给'\0'分配位置,导致编译错误
- 问题1解决方案:回顾并检查课本中字符数组定义
- 问题2:使用有关字符串的函数时,忘记添加string的头文件
- 问题2解决方案:提前加好
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 0/2 | 18/38 | |
第三周 | 500/1000 | 1/3 | 22/60 | |
第四周 | 300/1300 | 1/4 | 30/90 | |
第五周 | 300/1600 | 1/5 | 30/120 | |
第六周 | 300/1900 | 1/6 | 30/150 | |
第七周 | 300/2200 | 1/7 | 30/180 | |
第八周 | 300/2500 | 1/8 | 30/210 | |
第九周 | 300/2800 | 1/9 | 30/240 | |
第十周 | 300/3100 | 1/10 | 30/270 | |
第十一周 | 300/3400 | 1/11 | 30/300 | |
第十二周 | 300/3700 | 1/12 | 30/330 | |
第十三周 | 300/4000 | 1/13 | 30/360 | |
第十四周 | 300/4300 | 1/14 | 30/390 |