C++学习~~对于二进制文件的读写命名空间再认识异常处理

news2024/11/15 0:15:17

目录

1.将数据以二进制形式放到磁盘

2.将上述的数据读入内存并且显示在显示器上面

3.异常处理机制

4.抛出异常的应用实例


1.将数据以二进制形式放到磁盘

(1)使用student定义结构体数组stud,并对其进行初始化,创建输出文件流对象outfile,这个对象是属于这个ofstream类的,打开方式是ios::binary的方式,表示的就是以二进制的方式打开一个文件,如果不指定方式就是默认的ASCII方式;

(2)如果这个打开失败的话,就输出错误信息,并且退出这个程序;

(3)如果原来就存在这个stud.dat文件,我们就会删除原来的数据,写入新的数据,没有这个文件就会创建这个文件,然后写数据;

(4)使用这个write函数向这个stud,dat文件里面输出数据,因为这个成员函数的第一个参数的类型是char*类型的,但是我们这个参数是结构体student*类型的,所以在这个地方应该进行强制类型转换;

成员函数的第二个参数是sizeof(stud[i])表示的是一次性输出的字节数,这个地方指的就是结构体数组一个元素的字节数;

(5)我们之前不创建这个文件的话,程序执行之后这个文件就会自动生成,我们可以通过下面的方式找到文件,并且查看里面的内容;

 首先就是在这个文件里面找到这个创建的文件,其实这个文件就和我们的test.cpp在同一级目录下面,我们选择添加现有项,就可以看到这个文件,然后把这个文件添加进来;

这个时候我们已经添加进来了,但是这个时候我们无法打开,因为这个是二进制文件,我们可以使用二进制文件处理器进行这个处理之后再进行查看;

按照下面的,选择打开方式,然后选择这个二进制编辑器,这样的话,我们就可以看到我们之前的这个输入数据了;

 

2.将上述的数据读入内存并且显示在显示器上面

(1)这个是把文件里面的数据显示在这个显示器上面,我们还是创建一个对象infile对象,打开方式是ios::binary方式,和刚才的一样;

(2)然后我们进行的是这个read成员函数获取里面的数据,使用cout加上这个循环语句让这个原来的文件里面的结果显示在这个显示器上面; 

3.异常处理机制

(1)异常处理机制就是我们经常说的抛异常,这个在我们的软件开发里面很常见,例如这个triangle这个函数是求这个三角形的面积,我们使用的是这个海伦公式,这个公式里面使用到了sqrt函数,这个函数就是用来求解这个算数平方根的;

(2)包含相应的头文件之后,我们就可以使用这个程序进行这个计算这个三角形的面积 ,但是这个前提是我们建立的这个三角形符合三角形的构成条件,如果用户输入的这个三角形的三条边很笨就不符合这个三角形的构成条件,我们这个时候就需要自己的进行这个对应的设置,因为这个程序是无法进行判断的,在这个情况下,如果我们输入这个2 2 4三边长度,这个显然是不符合这个三角形的构成条件的,我们借助这个来介绍一下这个抛出异常机制;

(3)抛出异常机制使用的是这个try  catch语句,try语句是用来进行判断这个可能会出现问题的语句块,catch是用来捕获这个异常情况的;

(4)这样的话我们就可以使用这个机制对于这个是否构成三角形进行对应的判断,在这个triangle函数里面,我们使用这个if语句进行构成三角形三条边的条件判断,如果不符合这个三角形的三条边的构成条件,就会使用这个throw语句抛出异常;

(5)我们使用这个catch语句用来接收这个抛出的异常,需要注意的就是这个抛出异常的类型和接受异常的类型都应该是一样的,例如我们这里的就是string类型的;

4.抛出异常的应用实例

(1) 我们上面演示的是这个一个简单的判断三角形是否可以构成的的抛出异常机制,当我们可能会有多个异常的时候,我们可以把这些抛出的异常放到一个类里面去,这个样的话我们可以对于这个异常进行管理和接受;

当抛出的异常类型相同的时候,我们使用一个catch语句进行接收就已经可以了,但是这个抛出异常的类型和这个捕获异常的类型是一样的,当我们抛出的异常所属的类型不相同的时候,我们就需要使用多个catch语句进行这个异常的捕获(我们只需要知道这个在语法上面是允许通过的,也就是说在一个程序里面,并不是只能有一个try   catch语句存在,是可以存在多个的);

(2)下面的这个案例是只存在一个的catch语句的捕获异常,但是他可能会抛出多个异常,但是这些抛出的异常的类型是一样的,我们只需要使用一个catch语句进行这个异常的捕获就可以了,我们以这个作为案例进行介绍这个抛出异常类的封装;

(3)使用的场景就是我们注册的时候填写自己的身份证号,名字,地址,以及这个密码,我们输入的身份证号不满18位就会抛出异常,密码不足八位的话就会抛出异常,我们可以自己输入并进行这个测试;

(4)我们定义了两个类,一个类里面就是这个基本的信息,另外的一个类就是包括的这个可能的异常情况,我们定义一个flag作为标记,如果这个过程里面出现异常情况,就会让这个flag变为1,如果这个flag变为1,我们就可以根据这个错误信息进行对应的打印;

我们在这个exceptions类里面定义这个flag,我们要想使用,就要先创建一个exceptions类的对象,然后在这个出现异常的时候进行这个错误信息的打印,并且给这个flag赋值为1;

因为这个抛出异常的类型都是相同的string类型的,因此我们可以使用一个catch语句进行这个异常的捕获即可。

 

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

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

相关文章

朋友圈定时发送设置

人日常中不可缺少的一件事,同时也是企业用来触达客户的重要渠道,下面一起来了解下微信朋友圈怎么定时发送呢?

音乐传奇告别之作:《杰作》未解之谜❗❗

坂本龙一的《杰作》不仅是一部音乐会纪录电影,更是他赠予世界的一封深情告别信。 这部影片精心收录了这位音乐巨匠生前最后一场钢琴独奏音乐会的珍贵瞬间, 其中涵盖了《圣诞快乐,劳伦斯先生》、《末代皇帝》、《水》等二十首令人陶醉的经典…

设计模式20——职责链模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用,主要是下面的UML图可以起到大作用,在你学习过一遍以后可能会遗忘,忘记了不要紧,只要看一眼UML图就能想起来了。同时也请大家多多指教。 职责链模式(Chain …

手推车式电缆故障定位系统

武汉凯迪正大一体化电缆故障高压发生器用于测试各种型号的380V,600V,10kV,35kV,110kV,220kV,380kV电压等级的铜铝芯电力电缆、同轴通信电缆和市话电缆的各类故障,如电缆全长、开路、短路、断线、低阻故障、高阻故障、高阻泄露、高低阻抗接地、接地故障、铠装接地故障…

数据集——高分辨率图像分割成大小均匀图像(附Python代码)

将高分辨率图像分割成大小均匀的图像用于训练,可以提高训练效率,提高模型性能,并提供更大的灵活性。 目录 一、大小均匀图像用于训练优势二、代码2.1 代码参数修改2.2 代码2.3 输出2.4 分割结果 三、总结 一、大小均匀图像用于训练优势 内存…

3步操作助您轻松实现苹果手机照片一键传输至电脑

对于很多使用苹果手机的用户来说,随着手机中照片和视频数量的不断积累,如何将这些珍贵的回忆从手机转移到电脑,以便更好地保存、整理和分享,成为了一个值得关注的问题。那么,苹果手机怎么把照片导入电脑呢?…

职校老师的工资待遇怎么样

工资水平一直是教师们关注的焦点,毕竟,工资不仅关系到个人的生活品质,还影响着教师的职业满意度和工作动力。职校教师的工资待遇究竟是怎样的呢? 职校教师的工资水平受多种因素影响,包括地区、学校类型、个人资历和教学…

Qt 配置Eigen矩阵库 - 并简单测试

Qt 配置Eigen矩阵库 - 并简单测试 引言一、在Qt中配置Eigen二、低通Demo源码三、参考链接以及其他 引言 Eigen是一个开源的C模板库,提供了线性代数和矩阵运算的功能。它被设计为一个高性能、可扩展和易用的库,可以用于科学计算、机器学习和计算机图形学等…

Django 里如何使用 sqlite (操作步骤)

在 settings.py 里,已经设定好 sqlite 了 DATABASES {default: {ENGINE: django.db.backends.sqlite3,NAME: BASE_DIR / db.sqlite3,} }必须得设置好app # 在 settings.py 里INSTALLED_APPS [django.contrib.admin,django.contrib.auth,django.contrib.contentt…

安卓开发板_开发评估套件_4G/5G联发科MTK安卓主板定制开发

安卓开发板采用了联发科八核A53 CPU,主频2.0GHz,采用12nm制程工艺,拥有强大的通用计算性能。配备GE8300 GPU,支持1080P视频编码和H.264硬解码,能够解析目前流行的视频和图片格式,非常适合各种功能APP的测试…

16:00面试,16:08就出来了,问的问题有点变态。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到8月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…

封装--5.29

封装主要是封装属性,将改显示的显示,将改掩藏的掩藏(例如:一个女孩20岁了,但是她想告诉你她18岁怎么办,通过封装来解决) 编写规则: 定义时,在需要封装的属性前面加上pr…

《Navi韩语社》App:您的韩语学习与翻译的智能伴侣,支持韩文OCR文字识别提取,高精度韩语翻译!

《Navi韩语社》App,一款专为学习韩语和有韩语翻译需求的用户设计的多功能应用,它以翻译准确、功能丰富和操作简单的特点,成为了众多学习韩语的学生、计划去韩国旅游的背包客必备的韩语翻译工具。 🌟 精准翻译,一触即达…

linux的磁盘分区与管理

磁盘分区与管理 识别磁盘 一块硬盘的“艺术”之旅(硬盘空间使用,经历的步骤) •识别硬盘 > 分区规划 > 格式化 > 挂载使用 Unix/Linux的基本哲学理念:一切皆文件 /dev:存放设备(键盘、鼠标、光驱、硬盘……

springboot学生就业信息管理系统-计算机毕业设计源码95340

摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对学生就业信息管理系统等问题,对…

Java 实现二叉搜索树 代码

新建文件 创建TreeNode类,实例化 直接在BinarySearchTree类里面写就可以 static class TreeNode {public int key;public TreeNode left;public TreeNode right;TreeNode(int key) {this.key key;}}public TreeNode root; 插入节点 insert public boolean inser…

LabVIEW机器设备的振动监测

振动监测是工业和机械维护中重要的一部分,通过检测和分析机械振动,提前发现潜在故障,确保设备的可靠运行。LabVIEW是一种强大的图形化编程环境,非常适合用于振动监测系统的开发和实施。以下从多个角度详细介绍LabVIEW在振动监测中…

leetCode.87. 扰乱字符串

leetCode.87. 扰乱字符串 题目思路(该方法以前可以过,现在对时间复杂度的要求严格了许多,不能过去): 这里显示,能够让我自己后期复习的时候,可以掌握最基本的做法(尽管不能通过全部样…

端口扫描利器--nmap

目录 普通扫描 几种指定目标的方法 TCP/UDP扫描 端口服务扫描 综合扫描 普通扫描 基于端口连接并响应(真实) ​ nmap -sn 网段(0/24)-sn 几种指定目标的方法 单个IP扫描 IP范围扫描 扫描文件里的IP 扫描网段,(排除某IP) 扫描网段(排除某清单IP) TCP/UDP扫描 -sS …

echarts性能优化

echarts数据量多的时候优化方案&#xff1a; 渲染的数据太多时&#xff0c;渲染的速度会变慢。 let data [];for (let i 0; i < 100000; i) {let style {};if (i % 2 0) {style.color "red";}data.push({value: i,itemStyle: style,}); } myEcharts init(c…