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

班级链接 2024计算机基础与程序设计
作业要求 第十四周作业

教材学习内容总结

《C语言程序设计》第13-14章

第13章 文件操作

  • 二进制文件和文本文件:
    介绍了文件的两种基本类型,二进制文件和文本文件,以及它们的区别。
  • 文件的打开和关闭:
    介绍在C语言中打开和关闭文件的方式。
  • 按字符读写文件:
    介绍逐个字符读取和写入文件的方式。
  • 按格式读写文件:
    介绍使用格式化方法读写文件的方式。
  • 按数据块读写文件:
    介绍以数据块为单位进行文件读写的方法。
  • 文件的随机读写:
    介绍在文件中随机访问和修改数据的方式。
  • 标准输入/输出重定向:
    介绍了如何改变程序的标准输入和输出流。
    第14章 简单的游戏设计
  • 动画的基本原理:
    介绍了动画的基本概念和实现方法。
  • 迷宫游戏:
    讲解了如何设计和实现一个迷宫游戏。
  • Flappy bird游戏:
    介绍了如何开发一个简单的Flappy bird游戏。

教材学习中的问题与解决过程

问题1:fread 和 fwrite 与 fgets 和 fputs 有什么区别?
AI:

  • fread 和 fwrite 与 fgets 和 fputs 在C语言中都是用来处理文件读写的函数,但它们在用途和行为上有所不同:
  • fread 和 fwrite
  1. 二进制操作:fread 和 fwrite 用于读写二进制文件。它们可以处理任何类型的数据,包括文本和非文本数据。
  2. 缓冲区操作:fread 和 fwrite 直接操作内存缓冲区,可以读写任意大小的数据块。
  3. 返回值:fread 和 fwrite 返回成功读写的数据项数量,这可以用来检查操作是否成功。
  4. 参数:需要提供数据缓冲区的指针、数据项的大小和数量,以及文件指针。
  • fgets 和 fputs
  1. 文本操作:fgets 和 fputs 用于读写文本文件。它们处理的是字符串,并且会考虑到文本的行结束符(通常是换行符 \n)。
  2. 字符串操作:fgets 从文件中读取一行文本直到遇到换行符或EOF,并在末尾添加null字符;fputs 将一个字符串写入文件,不自动添加换行符。
  3. 返回值:fgets 返回一个指向缓冲区的指针,如果读取到文件末尾或发生错误则返回 NULL;fputs 返回一个整数,成功时为非负值,失败时返回 EOF。
  4. 参数:fgets 需要一个字符串缓冲区和一个文件指针;fputs 需要一个字符串和一个文件指针。
  • 区别总结
  1. 数据类型:fread 和 fwrite 用于二进制数据,而 fgets 和 fputs 用于文本数据。
  2. 格式化:fgets 和 fputs 处理的是格式化的字符串,而 fread 和 fwrite 不处理格式化,直接读写数据。
  3. 行处理:fgets 会自动在读取的字符串末尾添加null字符,并在遇到换行符时停止读取;fread 会继续读取直到指定的字节数。
  4. 返回值:fread 和 fwrite 返回的是成功读写的元素数量,而 fgets 返回的是指向缓冲区的指针(或 NULL),fputs 返回的是成功写入的字符数(不包括null字符)。

问题2:文件指针移动后如何确定其当前位置?
AI:
在C语言中,文件指针移动后,可以使用 ftell 函数来确定其当前位置。ftell 函数用于返回文件流中当前文件指针的位置,其原型如下:

long ftell(FILE *stream);
  • 参数:stream 是指向 FILE 对象的指针,该 FILE 对象标识了要操作的文件流。
  • 返回值:如果成功,ftell 返回文件指针的当前位置,以文件开始处的偏移量表示,类型为 long。如果失败(例如,因为文件未打开或文件不支持定位),则返回 EOF

使用示例

#include <stdio.h>

int main() {
    FILE *fp = fopen("example.txt", "r");
    if (fp == NULL) {
        perror("Failed to open file");
        return 1;
    }

    // 移动文件指针到文件末尾
    fseek(fp, 0, SEEK_END);

    // 获取当前文件指针的位置
    long position = ftell(fp);
    printf("Current position: %ld\n", position);

    fclose(fp);
    return 0;
}

在这个示例中,我们首先打开一个文件,然后将文件指针移动到文件末尾,最后使用 ftell 函数获取并打印当前文件指针的位置。

注意事项

  1. 文件类型:ftell 只能用于支持随机访问的文件,即可以前后移动文件指针的文件。对于不支持随机访问的文件(如某些管道或设备),ftell 可能返回 EOF
  2. 错误处理:如果 ftell 返回 EOF,应检查文件是否成功打开,以及文件是否支持定位操作。
  3. 平台差异:在不同平台上,ftell 的行为可能略有差异,特别是在处理大文件时。在64位平台上,可能需要使用 ftello 函数,它使用 off_t 类型返回文件指针位置,可以处理更大的文件偏移量。

通过使用 ftell 函数,你可以在文件指针移动后准确地确定其当前位置。

基于AI的学习

学习进度条

计划学习时间:25h
实际学习时间:25h

posted @ 2024-12-26 19:36  Xseventeen  阅读(7)  评论(0编辑  收藏  举报