【C++学习笔记】全局结构体在多文件中定义和声明——黑马程序员P70结构体案例1

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

黑马程序员P70 结构体-结构体案例1

学校正在做毕设项目,每名老师带领5个学生,总共有3名老师,需求如下:
1、设计学生和老师的结构体,其中在老师的结构体中,有老师名字和一个存放5名学生的数组作为成员;
2、学生的成员有名字、考试分数、创建数组存放3名老师,通过函数给每个老师及所带的学生赋值;
3、最终打印出老师数据以及老师所带的学生数据


以下是本篇文章正文内容
视频里,老师是把案例里的内容全部放在了一个文件里(.cpp),见结构体案例1,但在以后的编程中,我们不能每次都把所有的代码放一个文件里。因此我这里又额外创建了两个文件(.cpp),分别用来放AllocateSpace函数(用来给老师、学生赋值)和PrintInfo函数(用来打印老师、学生信息)。
那么问题来了,在每个.cpp文件里,由于都涉及到老师和学生的结构体,那就需要在开头定义结构体,但为了省事,我想找到一种只定义一次的方法。
还真被我找到了,我目前找的方法是“定义全局结构体”,解决方法是在头文件里定义结构体。

一、创建头文件(P70_case1.h)

#include<iostream>
using namespace std;
#include<string.h>

typedef struct student
{
	string name;
	int score;
};

typedef struct teacher
{
	string name;
	struct student sarray[5];
};

void AllocateSpace(struct teacher tarray[], int len);
void PrintInfo(struct teacher tarray[], int len);

二、创建main函数(P70_case1.cpp)

#include<iostream>
using namespace std;
#include<string.h>
#include "P70_case1.h"

int main()
{
	teacher tarray[3];

	int len = sizeof(tarray) / sizeof(tarray[0]);
	AllocateSpace(tarray, len);

	PrintInfo(tarray, len);

	system("pause");

	return 0;
}

三、创建AllocateSpace函数和PrintInfo函数

1、创建AllocateSpace函数(AllocateSpace.cpp)

#include "P70_case1.h"
#include <string.h>
#include <ctime>

//extern student sarry[];
//extern teacher tarry[];

void AllocateSpace(struct teacher tarray[], int len)
{
	string nameseed = "ABCDE";

	srand((unsigned int)time(NULL));

	for (int i = 0; i < len; i++)
	{
		tarray[i].name = "Teacher_";
		tarray[i].name += nameseed[i];

		for (int j = 0; j < 5; j++)
		{
			tarray[i].sarray[j].name = "Student_";
			tarray[i].sarray[j].name += nameseed[j];

			int random = rand() % 61 + 40;

			tarray[i].sarray[j].score = random;
		}
	}

	cout << endl;
}

2、创建PrintInfo函数(PrintInfo.cpp)

#include "P70_case1.h"
#include <string.h>

void PrintInfo(struct teacher tarray[], int len)
{
	for (int i = 0; i < len; i++)
	{
		cout << "Teacher's name: " << tarray[i].name << endl;

		for (int j = 0; j < 5; j++)
		{
			cout << "\tStudent's name: " << tarray[i].sarray[j].name
				<< "  Student's score: " << tarray[i].sarray[j].score << endl;

		}
	}
}

运行P70_case1.cpp即可

完结

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的基于socket的跨网段通信的Demo,使用C语言编写。 ```c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <arpa/inet.h> #include <sys/types.h> #include <sys/socket.h> #define PORT 8888 #define MAX_BUFFER_SIZE 1024 int main(int argc, char *argv[]) { int sockfd; struct sockaddr_in server_addr; char buffer[MAX_BUFFER_SIZE]; int ret; if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(EXIT_FAILURE); } memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(PORT); server_addr.sin_addr.s_addr = inet_addr("192.168.1.100"); if (connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) { perror("connect"); exit(EXIT_FAILURE); } while (1) { printf("Enter message: "); fgets(buffer, MAX_BUFFER_SIZE, stdin); if (send(sockfd, buffer, strlen(buffer), 0) == -1) { perror("send"); exit(EXIT_FAILURE); } if ((ret = recv(sockfd, buffer, MAX_BUFFER_SIZE - 1, 0)) == -1) { perror("recv"); exit(EXIT_FAILURE); } buffer[ret] = '\0'; printf("Received message: %s", buffer); } close(sockfd); return 0; } ``` 这个Demo实现了一个简单的客户端,可以与指定IP地址和端口号的服务器进行通信。在这个Demo,我们使用了TCP协议进行数据传输。 在main函数,首先创建了一个socket文件描述符,然后初始化了服务器地址结构体。在connect函数,使用了该地址结构体来连接服务器。 然后进入了一个无限循环,每次循环,从标准输入读取用户输入的信息,使用send函数将信息发送给服务器。然后使用recv函数接收服务器的响应,并将响应打印到标准输出。 最后关闭了socket文件描述符,并退出程序。 需要注意的是,在实际应用,我们需要考虑网络状况、数据的完整性、数据的安全性等问题,这里只是一个简单的Demo。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值