C premier plus 第五版 结构和其他数据形式 14.18.9

从零搭建基于OpenSpec的现代化UI自动化测试框架实战指南 UI自动化测试是软件质量保障的关键环节,其核心在于通过脚本模拟用户操作,对Web应用界面进行功能验证。其原理在于利用浏览器驱动工具(如Selenium、Playwright)提供的API,实现对页面元素的定位、交互与断言。一个设计良好的自动化框架能显著提升测试脚本的可维护性、可读性和执行稳定性,从而在持续集成、回归测试等场景中发挥巨大价值。本文聚焦于如何构建一个现代化的UI测试框架,通过整合OpenSpec架构规范、Pytest测试引擎与Playwright浏览器自动化工具,形成清晰的页面对象模型(POM) 阅读详情

这是典型的结构嵌套的使用。

//基于第八题的结构嵌套使用(四架飞机,每架相同的配置)。

#include<stdio.h>
#include<stdlib.h>
#define FLIGHT 4
#define SEAT 12

void read_file(struct flight *,char *);
void load_data(struct flight *);//默认数据。
int choose_flight(void);
int choose_command(struct flight *);
void write_file(struct flight *,char *);

void show_number_empty(struct seat *);
void show_list_empty(struct seat *);
void show_list(struct seat *);
void assign_seat(struct seat *);
void delete_seat(struct seat *);
void confirm_seat(struct seat *);

struct seat
{
	int number;
	int assign;
	char lastname[20];
	char firstname[20];
};

struct flight
{
	int number;
	struct seat seats[SEAT];//结构嵌套。
};

struct flight flights[4]=//初始化4个航班的结构数组。
{
	{102},
	{311},
	{444},
	{519}
};

int main(void)
{
	int n;
	read_file(flights,"seat.dat");
	while(1)
	{
		n=choose_flight();
		if(n<0 || n>=FLIGHT)//n=0123
			break;
		while(choose_command(&flights[n]))//返回是个1.这就是choose_command()函数返回值使int类型的原因。
			continue;
	}
	write_file(flights,"seat.dat");
	puts("Quit");

	return 0;
}

void read_file(struct flight *p,char *filename)//读取文件操作。
{
	FILE *pseats;
	if((pseats=fopen(filename,"r+b"))==NULL)
	{
		printf("Can't open %s file,So load default data.\n",filename);//首次打开时显示这一句,因为没有数据。也因此也不能有exit(1),否则会直接退出程序。
	    load_data(p);//载入默认的数据。使程序更友好。
	}
	else
	{
		rewind(pseats);//文件起始位置。
		while(fread(p,sizeof(struct flight),FLIGHT,pseats)==1)
			continue;
		fclose(pseats);
		printf("Read %s successfully!",filename);//第二次打开文件以后都会显示。
	}
}

void load_data(struct flight *p)//载入默认的数据。
{
	int i,j;
	for(i=0;i<FLIGHT;i++)
		for(j=0;j<SEAT;j++)
		{
			p[i].seats[j].number=i*100+j;
			p[i].seats[j].assign=0;
		}
}

int choose_flight(void)
{
	char command[10];
	printf("To choose a flight,enter lts letter label:\n");
	printf("a) Flights 102\t valid number is 000 001 002 003 004 005 006 007 008 009 010 011\n");
	printf("b) Flights 311\t valid number is 100 101 102 103 104 105 106 107 108 109 110 111\n");
	printf("c) Flights 444\t valid number is 200 201 202 203 204 205 206 207 208 209 210 211\n");
	printf("d) Flights 519\t valid number is 300 301 302 303 304 305 306 307 308 309 310 311\n");
	printf("e) Quit\n");
	gets(command);
	switch(command[0])//清楚了多余输入。
	{
	case 'a': return 0;//int 返回值函数值的原因。使n=0123
	case 'b': return 1;
	case 'c': return 2;
	case 'd': return 3;
	default: return 4;
	}
}

int choose_command(struct flight *p)
{
	char command[10];
	printf("Flight %d:\n",p->number);
	printf("To choose a function,enter its letter label:\n");
	printf("a) Show number of empty seats\n");
	printf("b) Show list of empty seats\n");
	printf("c) Show alphabetical list of seats\n");
	printf("d) Assign a customer to a seat assignment\n");
	printf("e) Delete a seat asignment\n");
	printf("f) Confirm a seat assignment\n");
	printf("g) Exit to the top-level menu\n");
	gets(command);
	switch(command[0])
	{
	case 'a': show_number_empty(p->seats);return 1;
	case 'b': show_list_empty(p->seats);return 1;
	case 'c': show_list(p->seats);return 1;
	case 'd': assign_seat(p->seats);return 1;
	case 'e': delete_seat(p->seats);return 1;
	case 'f': confirm_seat(p->seats);return 1;//注意p->seats的表达式的意义。
	default: return 0;
	}
}

void show_number_empty(struct seat *p)//显示空位的个数。
{
	int n=0,i;
	for(i=0;i<SEAT;i++)
		if(p[i].assign==0)
			n++;
	printf("There are %d empty seats.\n",n);
}

void show_list_empty(struct seat *p)//显示空位的标号信息。
{
	printf("Empty seats:\n");
	for(int i=0;i<SEAT;i++)
		if(p[i].assign==0)
			printf("Number %d\t%d\n",p[i].number,p[i].assign);
}

void show_list(struct seat *p)//显示位置的所有信息,number,assign,lastname,firstname。
{
	printf("Seat list:\n");
	for(int i=0;i<SEAT;i++)
	{
		printf("number %d \t assign %d\t",p[i].number,p[i].assign);
		if(p[i].assign==1)
			printf("Full %s %s\n",p[i].firstname,p[i].lastname);
		else
			printf("empty!\n");
	}
}

void assign_seat(struct seat *p)//预约座位。
{
	int number;
	printf("Input the seat number:");
	scanf("%d",&number);
	while(getchar()!='\n')
		continue;
	for(int i=0;i<SEAT;i++)
		if(p[i].number==number)
		{
			if(p[i].assign==1)
				printf("No! %d seat is already assigned!\n",p[i].number);
			else
			{
				printf("Input firstname of the holder:");
				scanf("%s",p[i].firstname);
				printf("Input lastname of the holder:");
				scanf("%s",p[i].lastname);
				while(getchar()!='\n')
					continue;
				p[i].assign=1;//订了位子计一。
				printf("assign No.%d seat successfully!\n",p[i].number);
			}
		    return ;//该句很重要,如果有符合的数字,那么就退出函数1,而不会打印出下一句无效的提示。
		}
		printf("%d is a invaild seat number!\n",number);
}

void delete_seat(struct seat *p)//删除定位。
{
	int number;
	printf("Input the seat number:");
	scanf("%d",&number);
	while(getchar()!='\n')
		continue;
	for(int i=0;i<SEAT;i++)
		if(p[i].number==number)
		{
			if(p[i].assign==0)
				printf("No.%d seat is already empty!\n",number);
			else
			{
				p[i].assign=0;
				printf("delete NO.%d seat successfully!\n",number);
			}
			return ;//功能如上。
		}
		printf("%d is a invalid seat number\n",number);
}

void confirm_seat(struct seat *p)//查询座位情况。
{
	int number,i;
	printf("Input the seat number:");
	scanf("%d",&number);
	while(getchar()!='\n')
		continue;
	for(i=0;i<SEAT;i++)
		if(p[i].number==number)
		{
			if(p[i].assign==0)
				printf("No.%d seat is empty!\n",number);
			else
				printf("No.%d seat is assigned! its holder is %s %s\n",p[i].firstname,p[i].lastname);
			return ;
		}
		printf("%d is a invalid seat number\n");
}

void write_file(struct flight *p,char *filename)//写入文件。
{
	FILE *pseats;
	if((pseats=fopen(filename,"w+b"))==NULL)//先清空文件“w+b”.
	{
		printf("Can't open %s filename",filename);
	    exit(EXIT_FAILURE);
	}
	fwrite(p,sizeof(struct flight),FLIGHT,pseats);
	fclose(pseats);
}

借鉴于原题例子。 

 

UE5入门第二周总结:基于蓝图的国际象棋的实现 在C++的学习中,这是一个入门级别的项目。我们的目标是灵活运用蓝图的特性和强大的可视化功能,做出这一入门级项目的同时,思考如何优化并改进算法,并尽可能的用面向对象的方法实现,用蓝图中的继承和多态简化编码过程。 阅读详情

相关推荐

倾向得分匹配的stata命令_政策评估方法引荐|广义倾向得分匹配(GPSM)

和大家分享一下最近学习的进展,在痛苦读完stata journal和练习OA程序,已经可以基本完成广义倾向得分的估计了,在国内这一方法还没有形成广泛运用,因此学习资源也是有点稀缺的,在文章最后给各位提供数据和代码以供练习。有问题可以随时文末留言或者联系我哦。人文社会科学中一般无法在实验室中控制样本个体的特征,我们一般采用“准自然实验”的研究路径,也就是不随机安排样本接受处理与否。但放弃随机分组假定...

weixin_39550258的博客 1万+

记录:C语言初学者阅读《C Primer Plus》的经验总结

C语言入门推荐书籍

半汀烟雨·碎菁寒 3万+

FRM(Financial Risk Manager,金融风险管理师)知识点总结归纳

FRM知识点总结(150字) FRM考试分为两级:一级侧重基础理论和工具,包含风险管理基础、定量分析、金融市场产品、估值与风险建模四大模块,涵盖风险管理框架、统计学方法、衍生品定价及VaR计算等核心内容。二级聚焦实际应用,分为市场风险、信用风险、操作风险、流动性风险、投资管理和市场前沿六大模块,深入探讨高级风险度量技术(如极值理论)、信用风险模型、巴塞尔协议及新兴风险议题。考试体系贯穿"风险识别→度量→管理→监管"逻辑主线,强调定量分析与实务案例的结合,覆盖传统金融风险和区块链、ESG等

极客神殿 1441

C语言-C premier plus 6 (前六章)笔记和复习总结

写在前面的话:为了之后进一步学习,在家决定把C语言重新复习一遍。参考书是C premier plus 第六版。 概述一、概览二、C语言概述3数据和C、格式化输入输出四、运算符、表达式和语句五、 C控制语句:循环 一、概览 1.1 C的优点 自顶向下编程、可靠易懂、高效、可移植、较为灵活、面向编程人员 1.2 使用C语言七个步骤 1.定义程序目标 2.设计程序 3.编写代码 4.编译 // 由C编译器来完成。(编译器的是指是一段程序,调用运行期linker将C库中函数加入代码中,并转换为可执行代码) 5.运

weixin_46031140的博客 1254

三维点云孔洞修复(附Python代码和公共点云数据集链接)

(1)物体自身缺失(2)物体自身形状复杂,很多凹凸面不够规则甚至存在空腔,空腔内部无法被三维激光扫描仪扫描到(3)物体部分区域对激光扫描不敏感,未被扫描上(4)扫描仪的扫描稳定性。

yanghl1215的博客 6953

rockchip rk3566 android11 网口log报错: DMA engine initialization failed

问题描述:上电初始化前将网口插入,然后上电初始化网口能够正常使用,且能够找到PHY,ifconfig 查看能够有eth0 产生,网口正常使用且能够热插拔,但上电初始化时,不插入网口,就会报DMA engine initialization failed 错误,DMA 初始化的时候出错了。 分析:一般产生这个问题可以认为是GMAC 的工作时钟出问题了。先测量时钟引脚是否有时钟,时钟频率以及幅度等指标是否正常,主要确认以下几个方面: 1.IOMUX 出错,检查时钟脚寄存器值是否正确。 2.时钟方向以及配置

qq_48709036的博客 2万+

C++ premier -- 类

自认为学过c++的我,看过《c++ premier》的第十二章“类”后,不禁感到汗颜,很多关于类的特性我几乎都一无所知,还常常跟java混为一谈。折腾了一天,修改了多次,才算最终把一些问题搞清楚了。呵呵,现在我还不好意思说自己搞清楚了,谁知道还有多少我不知道的呢!所以真的是要stay foolish, stay hungry啊,很多问题并不是我们以为的那么显而易见的。   1. 类的声明与定义...

茅屋 609

ViViT视频分类实战:从Tubelet Embedding到4种Attention变体的保姆级解析

本文深入解析ViViT(Video Vision Transformer)在视频分类中的实战应用,重点介绍Tubelet Embedding技术和4种Attention变体的实现细节。通过对比分析Spatio-Temporal、Factorised Encoder等不同Attention机制的性能特点,提供工程优化策略和Kinetics数据集上的实战示例,帮助开发者掌握这一前沿视频理解技术。

weixin_29292535的博客 387

【C++ Primer Plus】基础知识

类是用户定义的类型一种数据类型。类描述了一种数据类型的全部属性(包括可使用它执行的操作),对象就是根据这些描述创建的实体。class 类名 {权限控制符 : 成员;class是定义类的关键字类名是类的标识符,其命名遵循标识符的命名规范。类名后面的一对大括号,用于包含类的成员,类的所有成员要在这一对大括号中声明。类中可以定义成员变量(也称为属性)和成员函数(也称为方法),成员变量用于描述对象的属性,成员函数用于描述对象的行为。

2302_76305195的博客 3769

实现边缘实时动物检测:YOLOv5模型优化与树莓派4B部署全攻略

本文介绍了基于高性能计算机训练YOLOv5目标检测模型,并部署到树莓派4B实现实时动物检测的全流程。主要内容包括:1)在高性能计算机上通过Anaconda创建虚拟环境,安装YOLOv5项目并进行模型训练;2)将训练好的best.pt模型迁移到树莓派,配置轻量级Miniconda环境;3)连接树莓派摄像头,运行实时检测程序。该系统兼顾了训练效率和边缘设备部署的实用性,可广泛应用于智慧农业、生态监测等场景。文中详细说明了数据准备、环境配置和部署步骤,为开发轻量级目标检测系统提供了完整参考方案。

m0_64661770的博客 201

用 SNC 和 SAP Single Sign-On Secure Login 把 SAP 登录这件小事,变成一件安全又不用输密码的事

在传统的 SAP 系统里,登录这件事看起来很朴素:用户打开 SAP GUI,输入一个 SAP 用户名,再输入一个 SAP 密码,点回车,进系统,开始干活。表面上没毛病,但从安全角度看,这种老办法问题很大。默认情况下,这些用户名和密码在网络上传输时是明文,也就是不加密传输。攻击者如果在公司网络里做监听,理论上可以直接截取到口令信息,这种风险对今天任何一家合规要求高、审计严格的企业来说,基本是不可接受的。(SAP Help Portal)SAP 给出的答案叫做 ,全称是 。SNC 做的事情可以概括成两类:一类是

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 377

《C premier plus》——字符串和字符串函数

将字符串赋给数组:字符串储存在静态存储区(static memory)中,程序运行后,为数组分配内存,再将字符串拷贝到数组中。 将字符串赋给指针:字符串储存在静态存储区(static memory)中,程序运行后,为指针分配内存,再将字符串首元素的地址拷贝到指针分配到的内存中。 如果只显示字符串,可以用指针存储,这样对内存的利用率比数组高。 如果要修改字符串,可以用数组存储,这样对于修改的只是字符串的副本。//至于为什么,你猜。 字符串输入与输出 scanf:大部分scanf函数应用,将从..

weixin_49113338的博客 424

16、树莓派Pico W:蓝牙与Wi-Fi应用指南

本文介绍了树莓派Pico W在蓝牙与Wi-Fi通信方面的应用,涵盖蓝牙配对原理、使用HC-06模块实现手机远程控制LED和传输内部温度,以及通过Wi-Fi进行网络连接、扫描和UDP协议下的设备控制。文章包含详细电路连接、代码实现与测试步骤,并提供拓展建议、常见问题解决方法及开发注意事项,帮助读者快速掌握基于Pico W的无线通信项目开发,适用于物联网入门与实践场景。

sun99的博客 290

C premier plus 第五版 结构和其他数据形式

14.18 编程练习 .6 “一个文件中存放着一个棒球队的信息。。。。” 利用程序清单14.14 booksave.c程序,可以解决这个问题。 #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;stdlib.h&gt; #define LEN 100 #define SIZE 30 struct athlete ...

LPJLBJ的博客 608

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C++ primer plus知识点,第三章

b,对类型名(如int)使用sizeof时,要带括号,格式为,sizeof (int), 如cout

babyxt的博客 461

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C Premier Plus自学——Chapter 3.数据类型(Data)和C

①关键字:基本数据类型由11个关键字定义:int、long、short、unsigned、char、float、double、signed、_Bool、_Complex和_imaginary。这些数值可以是正数或负数:int——给定系统的基本整型类型。C语言保证int至少为16位。short或short int——short整型的最大值不超过int整型的最大值,甚至可能更小。C语言保证short整型至少占用16位。long或long int——可存储至少与最大整数相当甚至更大的数值。

qq_51751684的博客 983

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

c++ premier -- 标准IO库

C++的输入输出由标准库提供。标准库定义了一族类型,支持对文件和控制窗口等设备的读写,还定义了其他一些类型,使string对象能够像文件一样操作,从而使我们无须IO就能实现数据与字符之间的转换。IO类型在三个独立的头文件中定义,iostream定义读写控制窗口的类型,fstream定义读写已命名文件的类型,而sstream所定义的类型则用于读写存储在内存中的stream对象。首先看一下各个类之间的...

茅屋 344

c++premierplus 1到5的细节

一到五章的简单重点

2302_80126238的博客 422

【C++ Premier 迭代器】

C++ Premier迭代器学习笔记

css1244的博客 380

《C++ primer》第三章

头文件中不应包含using声明。 String 1.1. 定义和初始化 (1) 默认初始化 (2) String s2(s1) (3) String s3(“weipengya”) (4) String s3 = “sdsf” (5) String s4(n,’c’) 1.2. string对象上的操作 (1) getline()读取一整行,参数是一个输入流和一个string对象,函数从给定的输入流中读入内容,直到遇到换行符为止(换行符也被读入),然后把所读内容存入到string对象中(不存换行符)。

weixin_43288822的博客 1391

c++ premier -- 容器

 呵呵,两个星期没有更新博客了。这两个星期基本一心一意都在做实验室的事,现在终于把算法写完了,测试效果也不错,总算有了自己原创的算法出来。不负我两个星期望着c++ premier却不敢翻开来看。今天早上把容器这两章给看了,我想整理一下,然后自己把它后面的综合应用给实现了。看完这一part就开始进入类方面的设计了,其实看这本书的目的就是要看类,然后实现一些数据结构。只剩两个星期了,希望能把这个目标完...

茅屋 334

C++ primer plus

https://github.com/lilinxiong/cppPrimerPlus-six-https://github.com/lilinxiong/cppPrimerPlus-six- 最近在看C++ primer plus这本书,就顺着思路对其中的重点进行总结。在图像算法这块,cpp和python算是最核心的两种开发语言了,其实大部分时间下用的都是python,只有在比较耗时的操作上用cpp封一下so,相对来说,python要更加熟悉一下,但是日常开发中也有更加关注数据结构的优化等等。 第二章

liguandong 4715

c++ premier -- 数组与指针

读完这一章,最大的收获就是之前对string和字符串(文中称为c风格字符串)的混淆,那个时候很懒的,在string和char*之间相互赋值转换时,如果成功了就成功了,不成功就都换成char*,也不知道是怎么回事,也不去研究是怎么回事。另外,好像我突然明白了多维数组的分析,之前看C专家编程的时候感觉记不下来,其实就是我没有很理解。   第4章的篇头的这段话我觉得很有意味,“C++语言提供了两种类...

茅屋 260

《C++Premier》读书笔记之二

C++内置数据类型:字符型,整型,浮点型

fangdi0410的专栏 631

C++Primer Plus第七章函数---C++编程 7.3编程练习2高尔夫程序求平均数的问题

这里写了三个函数,第一个函数,实现数据的输入,第二个函数实现显示,第三个函数实现就平均数,但是第二个函数并没有处理平均数的显示。2.编写一个程序,要求用户输入最多10个高尔夫成绩,并将其存储在一个数组中。程序允许用户提早结束输入,并在一行上显示所有成绩,然后报告平均成绩。请使用3个数组处理函数来分别进行输入、显示和计算平均成绩。

zhyjhacker的博客 313

C++ Primer Plus(速记版)-基本语言

左值和右值左值可以出现在赋值语句的左边或右边。右值只能出现在赋值的右边,不能出现在赋值语句的左边。变量是左值,因此可以出现在赋值语句的左边。数字字面值是右值,因此不能被赋值。初始化C++ 支持两种初始化变量的形式:复制初始化和直接初始化。// 直接初始化// 复制初始化使用多个初始化式初始化内置类型的对象只有一种方法:提供一个值,并且把这个值复制到新定义的对象中。对内置类型来说,复制初始化和直接初始化几乎没有差别。1.3 const 限定符const 变量不允许修改,会导致编译错误。

荒野 1761
上一篇: C primier plus 结构和其他数据形式 14.18.7
兰博詹
博客等级 码龄8年 1粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值