结构体熟练掌握--实现通讯录

news2024/9/22 15:25:26

在这里插入图片描述

  • 魔王的介绍:😶‍🌫️一名双非本科大一小白。
  • 魔王的目标:🤯努力赶上周围卷王的脚步。
  • 魔王的主页:🔥🔥🔥大魔王.🔥🔥🔥
    在这里插入图片描述
    ❤️‍🔥大魔王与你分享:无人问津也好,技不如人也罢,你都要是安静下来去做自己该做的事,而不是让内心烦躁、焦虑,毁掉你本就不多的热情和定力。

文章目录

  • 一、前言
  • 二、介绍
  • 三、分布实现通讯录
    • 1.在test.c文件中创建基本格式
    • 2.创建结构体类型
    • 3.初始化通讯录
    • 4.实现AddContact函数
    • 5.实现ShowContact函数
    • 6.实现FindContact函数
    • 7.实现DelContact函数
    • 8.实现SearchContact函数
    • 9.实现ModifyContact函数
    • 10.实现SortContact函数
  • 四、总代码
    • contact.h
    • contact.c
    • test.c
  • 五、总结

一、前言

学习完结构体,我们一定会好奇它的应用场景,想要熟练掌握一个知识点,就必须让其在现实生活中熟练结合,本篇将通过结构体的灵活运用去实现简单通讯录,可以实现增加删除搜索修改展示排序六大功能。


二、介绍

test.c:测试文件
contact.h:头文件(只进行声明)
contact.c:源文件,进行函数的定义

我们会在contact.h头文件中进行声明,在contact.c源文件中进行定义,然后在test.c源文件中进行测试(也就是直接运用这些函数)。

除了头文件外,另外两个文件都要包含头文件,因为是头文件进行的声明,可以理解为另外两个文件都要用的东西我们会在头文件进行声明,之后只需要在另外两个文件中包含头文件便都可以使用了。


三、分布实现通讯录

1.在test.c文件中创建基本格式

#include "contact.h"

void menu()
{
	printf("**** 1.add    2.del    ****\n");
	printf("**** 3.search 4.modify ****\n");
	printf("**** 5.show   6.sort   ****\n");
	printf("**** 0.exit            ****\n");
}

int main()
{
	
	int input = 0;
	do
	{
		menu();
		printf("请选择:> ");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			//AddContact(&con);
			break;
		case 2:
			//DelContact(&con);
			break;
		case 3:
			//SearchContact(&con);
			break;
		case 4:
			//ModifyContact(&con);
			break;
		case 5:
			//ShowContact(&con);
			break;
		case 6:
			//SortContact(&con);
			break;
		case 0:
			printf("退出");
			break;
		default:
			printf("输入错误,请重新输入");
		}
	} while (input);
	return 0;
}

我们这时候就可以运行了,虽然什么都没有,不过程序是正确的。

2.创建结构体类型

我们会创建两个结构体类型,一个是存放数据的结构体类型,里面放的是一个用户的基本信息,另一个是我们直接应用的结构体,里面会有两个成员,第一个成员为上个结构体数组,因为我们的通讯录肯定不是只有一个人的信息,第二个成员为结构体数组中的成员个数。

#define NameMax 10
#define SexMax 5
#define AddrMax 10
#define TeleMax 11

//定义一个可以存放一个人数据的结构体类型
typedef struct PeoInfo
{
	char name[NameMax];
	int age;
	char sex[SexMax];
	char addr[AddrMax];
	char tele[TeleMax];
}PeoInfo;

//定义一个我们可以存放多人数据并进行判断和修改的结构体类型
typedef struct Contact
{
	PeoInfo date[100];
	int sz;
}Contact;
  • 解释:
  1. 我们进行define定义常量是为了以后方便修改,当我们发现某个不合适时,只需要在头文件中修改一下就可以了,也就是方便代码的维护。
  2. 两个结构体都进行重命名是为了在之后应用这个结构体时不再去写struct,比较方便。
  3. 因为不止一个文件要用到结构体,所以创建结构体在头文件进行。

3.初始化通讯录

void InitContact(Contact* pc)
{
	assert(pc);
	pc->sz = 0;
	memset(pc->date, 0, sizeof(pc->date));
}
  • 解释:
  1. 我们首先在测试文件的主函数内部用定义过的结构体创建
  2. 我们在测试时需要创建一个通讯录,创建的时候我们可以直接初始化为0,也可以像这样在创建完成后让通讯录中的值改为我们需要的(还是0,这种方法更好一些,因为可以改为别的值,而不是只能是0)。
  3. 我们这里用到了memset函数,对应的头文件是<string.h>,这个函数的作用就是让从给定地址开始前多少字节的内容都赋上一个特定的数值。

4.实现AddContact函数

void AddContact(Contact* pc)
{
	assert(pc);
	if (pc->sz == 100)
	{
		printf("人数已满\n");
		return;
	}
	printf("请输入要添加联系人姓名:> ");
	scanf("%s", pc->date[pc->sz].name);
	printf("请输入要添加联系人年龄:> ");
	scanf("%d", &(pc->date[pc->sz].age));
	printf("请输入要添加联系人性别:> ");
	scanf("%s", pc->date[pc->sz].sex );
	printf("请输入要添加联系人地址:> ");
	scanf("%s", pc->date[pc->sz].addr);
	printf("请输入要添加联系人电话:> ");
	scanf("%s", pc->date[pc->sz].tele);
	pc->sz++;
	printf("添加成功\n");
}
  • 解释:
  1. 首先判断是否满了(也就是我们规定的100人),如果没满,那么就执行后面的添加,如果满了,就退出函数。
  2. 为什么只有第二个加取地址呢,因为其他的都是结构体信息(PeoInfo)里不同类型的首元素地址(因为是数组,所以数组名表示首元素地址),而age的类型为int,表示的不是地址,所以需要取地址符。
  3. 每次添加一个人,结构体成员sz需要加1。

5.实现ShowContact函数

void ShowContact(const Contact* pc)
{
	assert(pc);
	printf("%-10s\t%-3s\t%-5s\t%-10s\t%-11s\n", "姓名", "年龄", "性别", "地址", "电话");
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		printf("%-10s\t%-3d\t%-5s\t%-10s\t%-11s\n", pc->date[i].name,
			pc->date[i].age,
			pc->date[i].sex,
			pc->date[i].addr,
			pc->date[i].tele);
	}
}
  • 解释:
  1. \t为水平制表符,也就是会空出来一段距离。
  2. 展示函数会从结构体数组的零下标开始逐个打印出全部人的信息。

6.实现FindContact函数

int FindContact(Contact* pc, char* arr)
{
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{

		int ret = strcmp(arr, pc->date[i].name);
		if (ret == 0)
			return i;//找到的话返回结构体的下标
	}
	return -1;
}

这个函数并不是六种功能的哪一个,我们之所以要专门分装出这么一个函数,是因为多个功能都需要用到这个函数,所以为了方便其他函数使用,我们把这个部分写成一个函数分离出来。

7.实现DelContact函数

void DelContact(Contact* pc)
{
	assert(pc);
	if (pc->sz==0)
	{
		printf("通讯录中没有信息\n");
		return;
	}
	printf("输入要删除人的姓名:>");
	char arr[10] = "0";
	scanf("%s", arr);
	int ret = FindContact(pc,arr);
	if (ret== -1)
	{
		printf("该姓名不存在\n");
		return;
	}
	int i = 0;
	for (i = ret; i < pc->sz - 1; i++)
	{
		pc->date[i] = pc->date[i + 1];
	}
	pc->sz--;
	printf("删除成功\n");
} 
  • 解释:
  1. 首先判断是否有成员,如果没有成员,就直接退出函数。
  2. 如果确实存在该成员,该成员的结构体下标会通过FindContact函数返回给ret,然后ret里存放的值就是该结构体数组中对应的下标。
  3. 如果确实存在该成员,我们删除的思路就是从被删除这个结构体下标开始,每个后面的覆盖前面的,最后个数sz再减1。

8.实现SearchContact函数

void SearchContact(const Contact* pc)
{
	assert(pc);
	if (pc->sz == 0)
	{
		printf("通讯录中没有信息\n");
		return;
	}
	printf("输入要查找人的姓名:>");
	char arr[10] = "0";
	scanf("%s", arr);
	int ret = FindContact(pc, arr);
	if (ret == -1)
	{
		printf("该姓名不存在\n");
		return;
	}
	printf("%-10s\t%-3d\t%-5s\t%-10s\t%-11s\n", pc->date[ret].name,
		pc->date[ret].age,
		pc->date[ret].sex,
		pc->date[ret].addr,
		pc->date[ret].tele);
}

首先判断是否含有信息,如果没有退出函数。
然后如果有这个人的信息,那个其对应的结构体下标已经通过FindContact函数返回给了ret,我们把该姓名的信息打印出来。

9.实现ModifyContact函数

如果不存在就退出,如果存在,我们将这个人的信息打印出来。

void ModifyContact(Contact* pc)
{
	assert(pc);
	if (pc->sz==0)
	{
		printf("通讯录中没有信息\n");
		return;
	}
	char arr[10] = "0";
	printf("请输入要修改人的名字:> ");
	scanf("%s", arr);
	int ret = FindContact(pc,arr);
	if (ret == -1)
	{
		printf("该联系人不存在\n");
		return;
	}
	printf("请输入要修改成的姓名:> ");
	scanf("%s", pc->date[ret].name);
	printf("请输入要修改成的年龄:> ");
	scanf("%d", &(pc->date[ret].age));
	printf("请输入要修改成的性别:> ");
	scanf("%s", pc->date[ret].sex);
	printf("请输入要修改成的地址:> ");
	scanf("%s", pc->date[ret].addr);
	printf("请输入要修改成的电话:> ");
	scanf("%s", pc->date[ret].tele);
	printf("修改成功\n");
	return;
}

这个的原理就是把找到的那个人对应的结构体下标返回给ret,然后让该下标的结构体成员重新赋一次值。

10.实现SortContact函数

int cmp(const void* e1, const void* e2)
{
	assert(e1 && e2);
	//return strcmp(((PeoInfo*)e1)->name, ((PeoInfo*)e2)->name);
	return ((PeoInfo*)e1)->age - ((PeoInfo*)e2)->age;
}

void SortContact(Contact* pc)
{
	assert(pc);
	qsort(pc->date, pc->sz, sizeof(pc->date[0]), cmp);
	
}
  • 注意:
    qsort第二个参数不是传数组能放多少元素,而是放了多少元素,因为如果没使用的位置也算进去,它会将它们这些没放的元素也参加排序。

四、总代码

contact.h

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>

#define NameMax 10
#define SexMax 5
#define AddrMax 10
#define TeleMax 11

//定义一个可以存放一个人数据的结构体类型
typedef struct PeoInfo
{
	char name[NameMax];
	int age;
	char sex[SexMax];
	char addr[AddrMax];
	char tele[TeleMax];
}PeoInfo;

//定义一个我们可以存放多人数据并进行判断和修改的结构体类型
typedef struct Contact
{
	PeoInfo date[100];
	int sz;
}Contact;

//初始化通讯录
void InitContact(Contact* pc);

//添加联系人
void AddContact(Contact* pc);

//展示添加上的联系人
void ShowContact(const Contact* pc);

//删除联系人
void DeleContact(Contact* pc);

//查找联系人
void SearchContact(const Contact* pc);

//修改联系人
void ModifyContact(Contact* pc);

//按名字大小排序
void SortContact(Contact* pc);

contact.c

#define _CRT_SECURE_NO_WARNINGS 1

#include "contact.h"


void InitContact(Contact* pc)
{
	assert(pc);
	pc->sz = 0;
	memset(pc->date, 0, sizeof(pc->date));
}

void AddContact(Contact* pc)
{
	assert(pc);
	if (pc->sz == 100)
	{
		printf("人数已满\n");
		return;
	}
	printf("请输入要添加联系人姓名:> ");
	scanf("%s", pc->date[pc->sz].name);
	printf("请输入要添加联系人年龄:> ");
	scanf("%d", &(pc->date[pc->sz].age));
	printf("请输入要添加联系人性别:> ");
	scanf("%s", pc->date[pc->sz].sex );
	printf("请输入要添加联系人地址:> ");
	scanf("%s", pc->date[pc->sz].addr);
	printf("请输入要添加联系人电话:> ");
	scanf("%s", pc->date[pc->sz].tele);
	pc->sz++;
	printf("添加成功\n");
}

void ShowContact(const Contact* pc)
{
	assert(pc);
	printf("%-10s\t%-3s\t%-5s\t%-10s\t%-11s\n", "姓名", "年龄", "性别", "地址", "电话");
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		printf("%-10s\t%-3d\t%-5s\t%-10s\t%-11s\n", pc->date[i].name,
			pc->date[i].age,
			pc->date[i].sex,
			pc->date[i].addr,
			pc->date[i].tele);
	}
}
int FindContact(Contact* pc, char* arr)
{
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{

		int ret = strcmp(arr, pc->date[i].name);
		if (ret == 0)
			return i;//找到的话返回结构体的下标
	}
	return -1;

}

void DelContact(Contact* pc)
{
	assert(pc);
	if (pc->sz==0)
	{
		printf("通讯录中没有信息\n");
		return;
	}
	printf("输入要删除人的姓名:>");
	char arr[10] = "0";
	scanf("%s", arr);
	int ret = FindContact(pc,arr);
	if (ret== -1)
	{
		printf("该姓名不存在\n");
		return;
	}
	int i = 0;
	for (i = ret; i < pc->sz - 1; i++)
	{
		pc->date[i] = pc->date[i + 1];
	}
	pc->sz--;
	printf("删除成功\n");
}

void SearchContact(const Contact* pc)
{
	assert(pc);
	if (pc->sz == 0)
	{
		printf("通讯录中没有信息\n");
		return;
	}
	printf("输入要查找人的姓名:>");
	char arr[10] = "0";
	scanf("%s", arr);
	int ret = FindContact(pc, arr);
	if (ret == -1)
	{
		printf("该姓名不存在\n");
		return;
	}
	printf("%-10s\t%-3d\t%-5s\t%-10s\t%-11s\n", pc->date[ret].name,
		pc->date[ret].age,
		pc->date[ret].sex,
		pc->date[ret].addr,
		pc->date[ret].tele);
}

void ModifyContact(Contact* pc)
{
	assert(pc);
	if (pc->sz==0)
	{
		printf("通讯录中没有信息\n");
		return;
	}
	char arr[10] = "0";
	printf("请输入要修改人的名字:> ");
	scanf("%s", arr);
	int ret = FindContact(pc,arr);
	if (ret == -1)
	{
		printf("该联系人不存在\n");
		return;
	}
	printf("请输入要修改成的姓名:> ");
	scanf("%s", pc->date[ret].name);
	printf("请输入要修改成的年龄:> ");
	scanf("%d", &(pc->date[ret].age));
	printf("请输入要修改成的性别:> ");
	scanf("%s", pc->date[ret].sex);
	printf("请输入要修改成的地址:> ");
	scanf("%s", pc->date[ret].addr);
	printf("请输入要修改成的电话:> ");
	scanf("%s", pc->date[ret].tele);
	printf("修改成功\n");
	return;
}

int cmp(const void* e1, const void* e2)
{
	assert(e1 && e2);
	//return strcmp(((PeoInfo*)e1)->name, ((PeoInfo*)e2)->name);
	return ((PeoInfo*)e1)->age - ((PeoInfo*)e2)->age;
}

void SortContact(Contact* pc)
{
	assert(pc);
	qsort(pc->date, pc->sz, sizeof(pc->date[0]), cmp);
	//qsort第二个参数不是传数组能放多少元素,而是放了多少元素,因为如果没使用的位置也算进去,它会将它们这些没放的元素也参加排序
}

test.c

#define _CRT_SECURE_NO_WARNINGS 1

#include "contact.h"

void menu()
{
	printf("**** 1.add    2.del    ****\n");
	printf("**** 3.search 4.modify ****\n");
	printf("**** 5.show   6.sort   ****\n");
	printf("**** 0.exit            ****\n");
}

int main()
{
	//创建通讯录
	Contact con;
	//初始化通讯录
	InitContact(&con);
	int input = 0;
	do
	{
		menu();
		printf("请选择:> ");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			AddContact(&con);
			break;
		case 2:
			DelContact(&con);
			break;
		case 3:
			SearchContact(&con);
			break;
		case 4:
			ModifyContact(&con);
			break;
		case 5:
			ShowContact(&con);
			break;
		case 6:
			SortContact(&con);
			break;
		case 0:
			printf("退出");
			break;
		default:
			printf("输入错误,请重新输入");
		}
	} while (input);
	return 0;
}

五、总结

在这里插入图片描述

💘原创不易,还希望各位佬佬支持一下 \textcolor{colourful}{💘原创不易,还希望各位佬佬支持一下} 💘原创不易,还希望各位佬佬支持一下

💓点赞,你的认可是我创作的动力! \textcolor{red}{💓点赞,你的认可是我创作的动力!} 💓点赞,你的认可是我创作的动力!

💕收藏,你的青睐是我努力的方向! \textcolor{orange}{💕收藏,你的青睐是我努力的方向!} 💕收藏,你的青睐是我努力的方向!

💞评论,你的意见是我进步的财富! \textcolor{aqua}{💞评论,你的意见是我进步的财富!} 💞评论,你的意见是我进步的财富!

✨请点击下面进入主页关注大魔王
如果感觉对你有用的话,就点我进入主页关注我吧!

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

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

相关文章

帮助中心在线制作工具推荐这4款,很不错哟!

根据用户咨询问题是否解决的情景&#xff0c;分为三个部分&#xff0c;首先帮助中心恰好有用户需要咨询的问题&#xff0c;用户可以通过点击相关问题即可解决自己的问题&#xff0c;其次&#xff0c;用户第一眼没有在帮助中心解决问题&#xff0c;有个搜索框&#xff0c;用户的…

为什么开发人员应该在 2023 年学习 Docker 和 Kubernetes

开发者你好&#xff0c;如果你想在 2023 年学习新的工具和技术&#xff0c;那么你应该考虑学习 Docker 和 Kubernetes&#xff0c;这是在这个微服务和云计算时代创建和管理容器的两个最重要的工具。随着微服务和云计算的兴起&#xff0c;Docker 和 Kubernetes 已经成为软件开发…

gg又来深圳

我们都喜欢的DGGgg是我在TCL的朋友&#xff0c;刚毕业的我们在TCL度过了一段非常欢快的时光&#xff0c;gg也是我们几十人中在TCL呆的特别久的&#xff0c;先是在深圳&#xff0c;然后转去了惠州&#xff0c;后面在惠州买房、结婚、定居、生娃。前几年举家回了西安、也从TCL离职…

ChatGPT到底是个啥 - 它甚至会和狗说话

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…

2023.2.12(总结)

今天主要就是下午进行了一个测试&#xff0c;有三个困难版的题目我没有写出来&#xff0c;打算今天晚上好好磨磨&#xff0c;这里主要就只放一个题目。 C - Don’t be cycle Editorial / Time Limit: 2 sec / Memory Limit: 1024 MB Score : 300300 points Problem Statemen…

Spring缓存指定Redis做为缓存中间件Demo笔记

文档地址D:/Test10/redisdemo和springcachedemo E:/FTPshangchuang/smbms 一下是SpringBoot整合Redis的初略配置,引入Redis依赖 想自己测试的话 链接&#xff1a;https://pan.baidu.com/s/14hdBzdjtFu0lYmZUhy_DuA 提取码&#xff1a;j0m8 Redis配置文件 package com…

总览 Java 容器--集合框架的体系结构

前言 我们在讲 Java 的数据类型的时候&#xff0c;单独介绍过数组&#xff0c;数组也确实是开发程序中常用的内存类型之一&#xff0c;不过 Java 内置的数组限制颇多&#xff0c;所以此后扩展出了List这种结构&#xff0c;与之类似的Set、Queue 这些内存中的容器都被放在了 Co…

浅谈明暗水印

前言 水印&#xff08;Watermark&#xff09;是一种能让人识别纸上图案的技术&#xff0c;当光线照射纸张时&#xff0c;纸张上会显现出各种不同阴影&#xff0c;这些阴影组成的图案就是水印。 水印常常起到验证货币、护照、邮票、政府文件或者其他纸制文件的真实性的作用。 …

什么是热迁移?90%的企业都理解错误

科技的发展&#xff0c;新冠的冲击&#xff0c;让市场竞争愈发激烈。尽管云计算服务为企业免除了基础硬件的建设和维护成本&#xff0c;当企业需要进行业务跨架调整、升级维护、环境测试等场景而进行云迁移&#xff0c;其过程中所带来的停机时间&#xff0c;就变得尤为头疼了。…

清亡之路(4):最受误解的东南互保

很多人一提“东南互保”&#xff0c;就认为是东南是在反叛。如果仔细看&#xff0c;其实根本谈不上造反&#xff0c;反而是更像是一种“遵旨行事”。本文就是说说这个问题。宣战是来真的吗&#xff1f;1900年6月21日&#xff0c;慈禧忍无可忍&#xff0c;决定和各公使馆翻脸&am…

给你的边框加点渐变

目录前言border-imageborder-image实现background父子divbackgorund一个div一个伪元素background-clip&#x1f9e8;&#x1f9e8;&#x1f9e8; 大家好&#xff0c;我是搞前端的半夏 &#x1f9d1;&#xff0c;一个热爱写文的前端工程师 &#x1f4bb;. 如果喜欢我的文章&…

spring cloud

文章目录 目录 文章目录 前言 一、spring cloud 二、ribbon负载均衡 三、openfeign 总结 前言 微服务就是一种将一个单一应用程序拆分为一组小型服务的方法&#xff0c;拆分完成后&#xff0c;每一个服务都运行在独立的进程中&#xff0c;服务于服务之间采用轻量级的通信机制来…

我不允许你还不知道CSS的filter的drop-shadow阴影用法以及与box-shadow的区别详解

这里有两个图片的阴影&#xff0c;你觉得哪个好看&#xff1f; 一个是使用box-shadow另一个是使用filter: drop-shadow 一、我们来了解一下CSS的filter&#xff08;过滤器&#xff09; 该CSS的filter属性可以实现很多效果 &#xff08;一&#xff09;filter: blur(5px) // 高…

Elasticsearch索引库和文档的相关操作

前言&#xff1a;最近一直在复习Elasticsearch相关的知识&#xff0c;公司搜索相关的技术用到了这个&#xff0c;用公司电脑配了环境&#xff0c;借鉴网上的课程进行了总结。希望能够加深自己的印象以及帮助到其他的小伙伴儿们&#x1f609;&#x1f609;。 如果文章有什么需要…

if从入门到出轨

if从入门到出轨(java版本) 为什么会产生很多if分支 在我们的日常生活中,会遇到很多判断逻辑,屁如,如果你在2月14号,心情很好,那么就给女朋友买了个iPhone 14 Pro Max 1TB 银白色,如果你女朋友在2月14号没有收到您老人家的礼物,那么你可能睡沙发或者轨搓衣板,或者直接和其他帅…

【Kafka】【十九】新消费组的消费offset规则

新消费组的消费offset规则 新消费组中的消费者在启动以后&#xff0c;默认会从当前分区的最后⼀条消息的offset1开始消费&#xff08;消费新消息&#xff09;。可以通过以下的设置&#xff0c;让新的消费者第⼀次从头开始消费。之后开始消费新消息&#xff08;最后消费的位置的…

电脑分盘怎么合并?只需1分钟,轻松学会

有些小伙伴喜欢将电脑进行分盘&#xff0c;以此将文件放进不同的分盘进行管理。但有时候&#xff0c;电脑磁盘分盘过多&#xff0c;管理起来又会有些麻烦。将一些闲置的磁盘进行合并很有必要。电脑分盘怎么合并&#xff1f;下面就跟着小编一起来看看吧。 电脑分盘怎么合并&…

Java 变量和数据类型,超详细整理,适合新手入门

目录 一、什么是变量&#xff1f; 二、变量 变量值互换 三、基本数据类型 1、八种基本数据类型 2、布尔值 3、字符串 四、从控制台输入 一、什么是变量&#xff1f; 变量是一种存储值的容器&#xff0c;它可以在程序的不同部分之间共享&#xff1b;变量可以存储数字、字…

二维数组的定义

1. 概念二维数组就是一种数组的数组&#xff0c;其本质上还是一个一维数组&#xff0c;只是它的数据元素又是一个一维数组。如果你对这个概念想象不出来&#xff0c;给大家举个栗子&#xff0c;相信吸烟的同学一下子就会明白。一根烟 一个变量一包烟 20根烟 一维数组一条烟 …

TIA博途中DB数据块清零的具体方法示例

TIA博途中DB数据块清零的具体方法示例 TIA中数据块如何实现清零? 在TIA指令集内有多个移动指令可对DB块内数据进行清零处理。对于S7-1500 CPU或ET200SP CPU来说,可使用BLKMOV、FILL以及SCL的POKE_BLK指令。但是这些指令对DB块清零时,要求DB块必需为非优化DB。 对于优化的DB…