天天动画片 > 八卦谈 > C语言实现最简单的2048存档读档功能(获取当前路径和文件IO)

C语言实现最简单的2048存档读档功能(获取当前路径和文件IO)

八卦谈 佚名 2023-09-08 03:53:51

简介

最近大一的学弟开始布置C语言的大作业了,于是在此提供一种比较简单的2048存档读档功能的实现

1 获取当前目录及存档文件

记得自己大一的时候在这里研究了很久,在这里提供C语言的实现思路
首先是用到的函数介绍:

getcwd()

按住Ctrl后点击getcwd可以知道getcwd接受两个变量:一个char*,用于以字符串形式保存绝对地,另一个变量是第一个变量字符串的大小,以防止出现路径长度大于字符串长度的情况。返回值就是当前路径的字符串形式。以下是常见用法的demo

对于这种用法有一个显而易见的问题:我们无法判断当前路径的长度,因此只能尽可能开大这个字符串的空间。但是另一方面,开过大的字符串难免会造成内存空间的浪费。
还记得之前说的getcwd的返回值是字符串首地址吗?在getcwd函数运行过程中,函数会自动申请空间来储存这个字符串。因此我们可以不给字符串申请空间来使getcwd自动申请内存空间,并将返回值首地址赋给用于储存的char*。样例如下:

fopen()

在获取到当前路径后,我们就可以用fopen函数打开存档文件,在此之前先复习下fopen的基本用法
fopen接受两个char*变量,第一个记录文件的路径,第二个表示文件的读取模式,返回值为File*(文件指针)
对于第一个变量,我们需要传入完整的文件路径,这就需要我们将文件名和路径两个字符串拼接在一起(不会的自行复习strcat()函数)

获取到文件名之后,按照fopen的访问规则打开文件即可,常用的访问规则有:

对我们要实现的功能进行分析,读档自然是使用"r+"模式,读取已有的存档,如不存在返回失败。
对于存档,覆盖已有存档或保存新存档,则使用"w+"模式
综上所述,对于存档打开过程,可以写出如下代码:


存档格式

在讨论存档格式前,我们先参考下常见ACM题目对于图论题存图的用例形式

image


由此可知,我们可以使用邻接矩阵的方式,在文件和内存之间相互转化

设计文件格式如下:

第一行,给出一个整数 n,表示方阵的边长(如不是方阵则设为 n m 两个整数分别表示长和宽)
以下 行,每行给出 个整数,表示当前位置的值

文件流的输入输出:fscanf()和fprintf()

由函数名就不难看出,这两个函数与scanf()printf()非常相似,事实上这两个函数在使用上只要在传参的最前面加上FILE* fp即可
例如从fp指向的文件读入一个整数到n:

再例如向fp指向的文件输出一个整数n

综上我们可以写出完整的存档读档代码如下:

测试读档功能:

image

测试存档功能:

image


本文标题:C语言实现最简单的2048存档读档功能(获取当前路径和文件IO) - 八卦谈
本文地址:www.ttdhp.com/article/38631.html

天天动画片声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
扫码关注我们