IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 游戏筑基开发之利用文件函数读出文件数据及处理(反序列化)(C语言) -> 正文阅读

[C++知识库]游戏筑基开发之利用文件函数读出文件数据及处理(反序列化)(C语言)

游戏筑基开发之利用文件函数读出文件数据及处理(反序列化)(C语言)

文件格式如下(txt文件):
效果图

TIPS:最后一行,即50行末尾有一个\n(换行符)

具体实现如下:

可优化,思路仅供参考。

Ini.h

#ifndef INI_H_
#define INI_H_
#define N 1024

typedef struct tagIniNode
{
	int value[N];//将字符型转化为int型保存
}TIniNode, *PTIniNode;

typedef struct tagIni
{
	//没有必要用到二级指针,因为我们已知存储类型(且均为相同类型)
	//而二级指针存储地址,可以存储不同的数据类型
	PTIniNode pNodes;//在多个文件情况下,用于存储多个节点
	int len;//文件个数
	int lenMax;//最大存储文件个数长度
}TIni, *PTIni;

//初始化配置文件
PTIni InitIni();

//反向初始化
void UnInitIni(PTIni *ppIni);

//从文件中加载存档文件(反序列化)
void LoadIni(PTIni pIni, const char* const pPath);
#endif // !INI_H_

Ini.c

#include "Ini.h"
#include <stdio.h>
#include <string.h>

//初始化配置文件
PTIni InitIni()
{
	PTIni pIni = malloc(sizeof(TIni));
	pIni->len = 0;
	pIni->lenMax = 100;
	pIni->pNodes = malloc(sizeof(TIniNode) * pIni->lenMax);
	return pIni;
}

//反向初始化
void UnInitIni(PTIni *ppIni)
{
	if (*ppIni == NULL)
		return NULL;
	free((*ppIni)->pNodes);
	free(*ppIni);
}

//从文件中加载存档文件(反序列化)
void LoadIni(PTIni pIni, const char* const pPath)
{
	FILE *pFile = fopen(pPath, "r");
	if (NULL == pFile)
	{
		printf("打开文件失败!");
		return;
	}
	while (0 == feof(pFile))
	{
		char buffer[1024] = { 0 };
		fgets(buffer, 1024, pFile);
		int strLen = strlen(buffer);
		if (strLen == 0)
		{
			fclose(pFile);
			return;
		}
		int temp = 0;
		memset(pIni->pNodes[pIni->len].value, -1, sizeof(int) * 1024);
		for (int i = 0, j = 0; i < strLen; i++)
		{
			if (buffer[i] != ';' && buffer[i] != '\n')
				temp = temp * 10 + (buffer[i] - 48);
			else if (';' == buffer[i])
			{
				//取出的实体暂时保存于value二维数组内,相当于一个中间容器,起暂存作用
				pIni->pNodes[pIni->len].value[j++] = temp;
				temp = 0;
			}
		}
		pIni->len++;
	}
	fclose(pFile);
	pFile = NULL;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-12 16:25:18  更:2021-08-12 16:25:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 9:23:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码