首页 > 编程语言 >2024-2025-1 20241421《计算机基础与程序设计》第十二周学习总结

2024-2025-1 20241421《计算机基础与程序设计》第十二周学习总结

时间:2024-12-15 15:09:04浏览次数:4  
标签:fp 文件 函数 写入 2024 2025 20241421 格式 指针

这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计
这个作业要求在哪里 2024-2025-1计算机基础与程序设计第十二周作业
这个作业的目标 复习巩固前面所学的内容
作业正文 https://www.cnblogs.com/118qa/p/18608015
教材学习内容总结
一、文件的基本概念
文件是存储在外部介质(如磁盘)上的数据集合,可以把它看作是程序与外部存储设备之间进行数据传输的桥梁。在 C 语言中,文件分为文本文件(以 ASCII 码形式存储字符,便于阅读)和二进制文件(以二进制形式存储数据,更紧凑高效)。
二、文件指针
定义:文件指针是指向一个结构体类型(FILE 类型)的指针变量,用于标识文件在内存中的相关信息以及操作文件的位置等。例如:FILE *fp;就定义了一个名为 fp 的文件指针。
作用:通过文件指针来操作文件,调用相关函数实现诸如打开、读写、关闭文件等操作,它就像是操控文件的一个把手。
三、文件的打开与关闭
打开文件:使用fopen函数来打开文件,其一般格式为FILE *fp = fopen("文件名", "文件使用方式");。“文件名” 要包含完整路径(若在当前目录可直接写文件名),“文件使用方式” 常见的有 “r”(只读方式打开文本文件)、“w”(只写方式打开文本文件,若文件存在则清空内容,不存在则创建)、“a”(追加方式打开文本文件,在文件末尾添加内容)、“rb”“wb”“ab”(对应二进制文件的读、写、追加操作)等。例如:FILE *fp = fopen("test.txt", "r");就是以只读方式打开当前目录下名为 “test.txt” 的文本文件。
关闭文件:当文件使用完毕后,务必用fclose函数关闭文件,格式为fclose(fp);(fp 为已打开文件的文件指针)。及时关闭文件可以避免数据丢失、释放相关系统资源等。
四、文件的读写操作
字符读写:
读字符:使用fgetc函数从指定文件中读取一个字符,例如char ch = fgetc(fp);(fp 为已打开的文件指针),它会返回读取到的字符,若读到文件末尾则返回EOF(值为 -1)。
写字符:通过fputc函数向文件写入一个字符,比如fputc('A', fp); 会把字符‘A’写入到由 fp 指向的文件中。
字符串读写:
读字符串:fgets函数用于从文件中读取一行字符串(遇到换行符或文件末尾或读取了指定长度 - 1 个字符就停止),其格式一般为char *fgets(char *s, int n, FILE *fp);,s 是存放读取字符串的字符数组,n 是最多读取的字符个数,fp 为文件指针。例如:char str[100]; fgets(str, 100, fp);。
写字符串:fputs函数可将字符串写入文件,格式如fputs("Hello", fp);,会把 “Hello” 字符串(不包含字符串结束标志‘\0’)写入到 fp 指向的文件中。
格式化读写:
读格式化数据:类似scanf函数的功能,不过针对文件操作,fscanf函数按照指定格式从文件中读取数据,例如fscanf(fp, "%d %s", &num, name);从 fp 指向的文件中按格式读取一个整数和一个字符串分别存入 num 变量和 name 字符数组中。
写格式化数据:与printf函数对应,fprintf函数按照给定格式将数据写入文件,比如fprintf(fp, "%d %s", 10, "test");会把整数 10 和字符串 “test” 按格式写入 fp 指向的文件中。
数据块读写:
读数据块:fread函数用于从文件中读取一块数据,格式为size_t fread(void *ptr, size_t size, size_t count, FILE *fp);,ptr 是存放读取数据的内存地址,size 是每个数据项的字节大小,count 是要读取的数据项个数,fp 是文件指针。例如读取一个结构体数组的数据可以这样操作。
写数据块:fwrite函数则相反,用于把一块数据写入文件,其参数含义和fread类似,比如将一个结构体数组的数据写入文件可使用fwrite。
五、文件定位
rewind 函数:能使文件指针重新定位到文件开头,格式为rewind(fp);(fp 为文件指针),方便重新从头读写文件。
fseek 函数:可以按照指定的偏移量和起始位置来移动文件指针,格式为fseek(fp, offset, origin);,fp 是文件指针,offset 是偏移的字节数(正数向前、负数向后移动),origin 是起始位置(如SEEK_SET表示文件开头、SEEK_CUR表示当前位置、SEEK_END表示文件末尾)。例如fseek(fp, 10L, SEEK_SET);会将文件指针从文件开头向后移动 10 个字节。
ftell 函数:用于获取文件指针当前相对于文件开头的位置(返回字节数),格式为ftell(fp);(fp 为文件指针),可以配合其他定位函数使用,了解文件指针所处的具体位置情况。
六、文件操作的错误处理
在文件操作过程中,可能会出现诸如文件不存在、权限不足等各种错误情况。一般可以通过检查函数返回值(如fopen返回NULL就表示打开失败)以及使用ferror函数(用于检测文件操作中是否发生错误,若有错误返回非 0 值)、clearerr函数(用于清除文件错误标志)等方式来进行错误处理,确保程序对文件操作的稳定性和可靠性。
教材学习中的问题和解决过程(先问 AI)
问题:只写方式("w")的选择情况
AI:当需要创建一个全新的文件来存储数据时,“w” 模式是很好的选择。例如,你要创建一个文本文件来记录用户的登录信息,包括用户名和密码。可以使用以下代码:

  • 上述代码定义了一个文件指针fp,以“w”模式打开(如果不存在就创建)名为“login_info.txt”的文件。如果打开文件成功,就使用fprintf函数将用户名和密码信息写入文件,最后关闭文件。
  1. 覆盖原有文件内容重新写入
    • 当你确定要丢弃文件原有的所有内容,重新写入新的数据时,“w”模式也适用。比如,有一个记录成绩的文件,每次考试后都需要更新成绩,而且不需要保留之前的成绩记录,就可以使用“w”模式。假设成绩数据存储在一个结构体数组中,代码示例如下:
    #include <stdio.h>
    struct Student {
        char name[20];
        int score;
    };
    int main()
    {
        FILE *fp;
        struct Student students[3] = {{"Alice", 90}, {"Bob", 85}, {"Charlie", 95}};
        int i;
        fp = fopen("scores.txt", "w");
        if (fp == NULL)
        {
            perror("Error opening file");
            return 1;
        }
        for (i = 0; i < 3; i++)
        {
            fprintf(fp, "%s %d\n", students[i].name, students[i].score);
        }
        fclose(fp);
        return 0;
    }
    

这里以 “w” 模式打开 “scores.txt” 文件,循环将新的学生成绩数据写入文件,原文件如果有内容会被清空后再写入新数据。
不过,在使用 “w” 模式时需要特别注意,因为它会无条件地清空文件内容。如果不小心用 “w” 模式打开了一个包含重要数据的文件,可能会导致数据丢失。所以在实际操作中,一定要谨慎确认文件操作的目的和要求是否与 “w” 模式的特性相匹配。
基于AI的学习

标签:fp,文件,函数,写入,2024,2025,20241421,格式,指针
From: https://www.cnblogs.com/118qa/p/18608015

相关文章

  • next_js 存在缓存中毒漏洞(CVE-2024-46982)
    免责声明:本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在使用本......
  • 2025全网最全Redis面试题合集
    1.使用Redis有哪些好处?(1)速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)(2)支持丰富数据类型,支持string,list,set,sortedset,hash(3)支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行(4)丰富的......
  • 2025最新Java八股文(完整版)
     JAVA基础八股文问:java中序列化是怎么实现的呢?1.实现Serializable接口,就会实现数据序列化的效果。2.调用json做序列化。(就比如:Jackson,fastjson等等)3.实现Enternalizable接口,就可以实现反序列化的效果。问:java的流有哪些呢?从方向方面,主要就是输入流和输出流。从单位方......
  • GESP2024年12月认证C++四级( 第一部分选择题(6-10))
    ......
  • GESP2024年12月认证C++四级( 第一部分选择题(1-5))
    ......
  • 2024-2025-1 20241417 《计算机基础与程序设计》第十二周学习总结
    2024-2025-120241417《计算机基础与程序设计》第十二周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>2024-2025-1计算机基础与程序设计第十二周作业这个作业的目标<复习前面所学,完成......
  • 学期2024-2025-1 学号20241424 《计算机基础与程序设计》第12周学习总结
    https://www.cnblogs.com/rocedu/p/9577842.html#WEEK12学期2024-2025-1学号20241424《计算机基础与程序设计》第12周学习总结作业信息|这个作业属于2024-2025-1-计算机基础与程序设计)||-- |-- ||这个作业要求在2024-2025-1计算机基础与程序设计第十二周作业||这个作业的......
  • 学期(2024-2025-1) 学号(20241420) 《计算机基础与程序设计》第十二周学习总结
    学期(2024-2025-1)学号(20241420)《计算机基础与程序设计》第十二周学习总结作业信息这个作业属于哪个课程<班级的链接>(2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(2024-2025-1计算机基础与程序设计第十二周作业)这个作业的目标<《C语言......
  • 2024-2025-1(20241321)《计算机基础与程序设计》第十二周学习总结
    这个作业属于哪个课程<班级的链接>(2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(2024-2025-1计算机基础与程序设计第十二周作业)这个作业的目标<深刻学习C语言,反思一周学习,温故知新>作业正文...本博客链接https://www.cnblogs.com/guc......
  • 重磅推荐 | 2024最全的数据资产入表实操资料大合集(8GB,共90份)
    1、《金融数据安全数据安全分级指南》.pdf2、《数据资产合规管理白皮书》(2024).pdf3、《数据要素场景创新发展报告》(2024).pdf4、《数据资产入表财务实操手册》.pdf5、《数据安全技术数据分类分级规则》.pdf6、《数据分类分级产品技术要求》.pdf7、《国家数据局《数字中......