C语言 ——— 将动态版本的通讯录实现为文件存储联系人模式

news2024/11/24 3:28:48

目录

前言

在退出通讯录之前

在运行通讯录之前 


前言

在这篇博客中,实现了动态版本的通讯录,接下来会增加函数,能用文件存储通讯录中的联系人

C语言 ——— 在控制台实现通讯录(增删查改、动态开辟内存空间)-CSDN博客


在退出通讯录之前

代码演示: 

//退出通讯录前,将联系人的信息保存到文件中
void SaveContact(Contact* con)
{
	//wb - 以二进制的形式写入数据
	FILE* pf = fopen("Contact.dat", "wb");

	//判断pf指针是否创建成功
	if (pf == NULL)
	{
		perror("SaveContact");
		return;
	}

	//写入数据
	for (int i = 0; i < con->sz; i++)
	{
		fwrite(con->date + i, sizeof(PeoInFo), 1, pf);
	}

	//关闭文件
	fclose(pf);
	pf = NULL;
}

代码验证:

在输入了联系人的信息后,查看当前代码目录:

因为存储的联系人的信息是以二进制的形式存储的,所以显示观看的时候是看不懂的 


在运行通讯录之前 

代码演示: 

//初始化时将文件中保存的信息加载到程序中
void LoadContact(Contact* con)
{
	//打开存储联系人信息的文件
	//rb - 以二进制的信息读文件
	FILE* pf = fopen("Contact.dat", "rb");

	//判断pf指针是否创建成功
	if (pf == NULL)
	{
		perror("LoadContact");
		return;
	}

	//读文件
	//先创建一个可以临时存放每一个联系人数据的结构体
	PeoInFo tmp = { 0 };

	//fread函数,读取到数据就返回1,没读取到数据返回0
	while (fread(&tmp, sizeof(PeoInFo), 1, pf))
	{
		//如果文件中存放的数据大于初始化时的数据,就要增容,判断增容是否成功
		if (CheckCapacity(con) == 0)
		{
			perror("CheckCapacity");
			return;
		}

		con->date[con->sz] = tmp;
		con->sz++;
	}


	//关闭文件
	fclose(pf);
	pf = NULL;
}

代码验证:

在上次退出通讯录前,已经存储了联系人的信息,所以运行通讯录时,直接打印所有联系人的信息,测试是否加载到了程序中: 

可以看到,成功将联系人的信息加载到了程序中 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2082840.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python如何调用函数库

python对函数库引用的第一种方式 格式是&#xff1a; import<库名> 例如&#xff1a; import turtle 如果需要用到函数库中函数&#xff0c;需要使用&#xff1a; <库名>.<函数名> 例如&#xff1a; import turtleturtle.fd(100) python对函数库引用的第…

书生大模型实战营第三期基础岛第四课——llamaindex+Internlm2 RAG实践

llamaindexInternlm2 RAG实践 基础作业&#xff1a;配置基础环境创建LLAMAINDEX文件夹存放课程相关文件创建模型下载脚本download_hf.py下载 Sentence Transformer 模型下载 NLTK 相关资源LlamaIndex HuggingFaceLLMLlamaIndex RAG新建脚本llamaindex_RAG.pyLlamaIndex web部署…

Ubuntu美化为类Windows风格

博主的系统为 Ubuntu22.04 参考文献&#xff1a;How to Make Ubuntu Look Like Windows 11 | 22.04 GNOME 43 / 42 | Linux AF Tech 可能遇到的bug的解决方法&#xff1a;如何在 Linux 中安装和更改 GNOME 主题 先来一下视频演示&#xff1a; 下面正式开始安装。在主文件夹下打…

国产编程语言:MoonBit(月兔)发布!【送源码】

MoonBit&#xff08;月兔&#xff09;&#xff0c;由中国开发者团队创建的编程语言&#xff08;类似 Rust&#xff0c;支持 GC&#xff09;&#xff0c;由粤港澳大湾区数字经济研究院&#xff08;IDEA 研究院&#xff09;基础软件中心负责人张宏波领导的团队开发&#xff0c;目…

SpringBoot项目目录介绍(SpringBoot学2)

1、主程序的入口 2、springboot的核心配置文件 修改 tomcat端口号 &#xff1a; server.port接端口号&#xff08;例&#xff1a;8081&#xff09; 然后运行就更改了端口号 同级目录下创建banner.txt文件 &#xff0c;在banner网址里面可以编辑我们想要的文本Spring Boot ban…

Go 安全使用goroutine

Go 安全使用goroutine go 正常使用goroutine开启一个携程很简单 var a int go func(){a11 }()这么用在日常工具什么的开发中肯定没问题&#xff0c;如果携程内有问题崩掉了&#xff0c;使用工具的人可以马上获得堆栈信息将其反应给开发人员。但是你如果在web服务器或者后台程…

stable-diffusion-webui 部署 ,启用 api 服务

stable-diffusion-webui 部署 &#xff0c;启用 api 服务 api 文档参考 https://profaneservitor.github.io/sdwui-docs/api/ api 源码路径是 stable-diffusion-webui/modules/api/api.py 我系统是 ubuntu22.04 conda 环境torchpgu , python 是 3.11.7 安装 stable-diffusi…

基于协同过滤算法Spring Boot+Vue的图书商城系统

基于协同过滤算法的图书商城系统 1、系统流程图 网络书城购物系统由用户端&#xff0c;管理员端两大模块组成&#xff0c;各个模块下边又有许多小模块组成&#xff0c;每个模块的作用各不相同&#xff0c;但彼此之间又存在一定关系&#xff0c;通过分析上述模块之间的联系以及…

java-Spring框架01

1.Spring概念 spring是一个轻量级的&#xff0c;IOC和AOP的一站式java开发框架&#xff0c;简化企业级开发。 轻量级&#xff1a;框架体积小&#xff08;核心模块&#xff09; IOC&#xff1a;inversion of Control 控制反转 把创建对象的控制权&#xff0c;反转给Spring框架…

SX_c语言字符串赋值 “multiple definition of .. first defined here”问题_21

字符串赋值问题&#xff1a; #include <stdio.h> #include <string.h>char* my_string_cat(int position, int slot, char* content){char* gnsst NULL;static char retvalue[50];memset(retvalue, \0, sizeof(retvalue));if(position 0){//头部if(slot 0){//卡…

【TroubleShoot】Unity中JDK版本问题

在默认安装了Android SDK及OpenJDK后&#xff0c;将项目切换到Android平台&#xff0c;编译时揭示JDK设置不正确。 那就看看吧&#xff0c;警告里提示&#xff1a;You are missing the recommended JDK. Install the recommended version using the Unity Hub。但这就是从Unity…

一天完成论文初稿?来看看这10个大幅提升论文写作效率的原则

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 论文写作对于科研人员尤其重要&#xff0c;我们必须通过写作来获得学位&#xff08;例如&#xff0c;论文&#xff09;、分享我们的研究发现&#xff08;专业会议论文和摘要&a…

【审批流】springboot+vue+activiti平台,直接接入业务表单,成熟工作流

软件资料清单列表部分文档清单&#xff1a;工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明书&#xff0c;需求调研计划&#xff0c;用户需求调查单&#xff0c;用户需求说明书&#xff0c;概要设计说明书&#xff0c;技术解…

【零基础入门】Linux环境搭建详解 | Ubuntu

文章目录 虚拟机安装对比Virtual Box 下载ubuntu 操作系统下载Virtual Box 安装安装ubuntu设置中文语言共享文件夹设置添加输入法安装步骤&#xff0c;参考官方教程 安装 vscode 虚拟机安装对比 VirtualBox和VMware两款虚拟化软件的对比 特性VirtualBoxVMware Workstation Pro许…

从python应用app向微软Microsoft Teams Channel发送消息message

一、简介 有这样的需求&#xff0c;web app需要提供功能可以发送消息到Teams来提醒用户。所以需要将发消息到Teams功能集成到web app中。由于我们的web app是python开发的&#xff0c;所以使用pyteams库。 先看效果&#xff1a;有标题、内容、链接、用户 二、步骤 2.1 首先在…

pikachu靶场XSS通关攻略

1.反射型xss(get) 在输入框中输入1 发现1会停留在页面上 可以尝试xxs攻击 当我们输入弹窗的js代码时 发现输入框的长度不允许我们输入过长的语句 我们可以打开网站控制台&#xff08;f12&#xff09;修补一下输入框的长度 我们把20改成50即可输入剩下的js代码 就会出现弹窗 …

-- 数据结构 顺序表 --Java

顺序表&#xff1a;使用一段物理地址连续的储存单元依此储存元素&#xff0c;一般使用数组实现顺序表的增删查改 实现 顺序表其实就是将元素储存到一个数组中&#xff0c;并且这个数组会根据你的插入的数据的增加而自动进行数组的扩容 字段的设计 使用了多态是为了能储存各种…

C++ | Leetcode C++题解之第377题组合总和IV

题目&#xff1a; 题解&#xff1a; class Solution { public:int combinationSum4(vector<int>& nums, int target) {vector<int> dp(target 1);dp[0] 1;for (int i 1; i < target; i) {for (int& num : nums) {if (num < i && dp[i - …

软考报名信息填错了,还可以修改吗?

软考报名信息的准确性至关重要&#xff0c;它直接关系到考生的考试资格及后续流程。若不慎填写错误&#xff0c;别担心&#xff0c;根据发现错误的时间点&#xff0c;下面是详细的修改指南。 一、报名审核前 情况说明&#xff1a;若您在报名审核前发现信息填写错误&#xff0c…

python库sqlacodegen生成sqlalchemy模型对象代码

工具介绍: 使用SQLAlchemy,需要将数据库表按照其识别的格式创建成Model,但一般情况下都是已经创建并定义好了数据库表,再创建Model。如果人工根据表结构写Model,不仅费时费力,还难免会出错。 而使用sqlacodegen,则可自动生成sqlalchemy表对象模型。 安装 首先进入虚…