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

目录

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语句进行这个异常的捕获即可。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么是React?

01 Why React? What is React? I think the one-line description of React on its home page (https://react.dev/) is concise and accurate: “A JavaScript library for building user interfaces.” 我认为React主页(https://react.dev/)上的一行描述既简洁又准确: …

微信聊天内容怎么监控? | 三款可以监控电脑微信聊天记录的软件大盘点

你是否听说过监控微信呢? 有时出于特定需求,比如家长对孩子上网行为的关心,或者企业对员工工作效率的监控,可能需要了解某些情况下的微信聊天记录。 但请注意,任何未经授权的监控行为都是违法的,并且可能…

PFC基础知识1

不同负载 1.当负载是电阻时, 阻值固定,阻性负载,相位相同,并且线性度非常好 ,输出的电流全部被利用 2.当负载有电感时,相位有偏差,电流滞后于电压90。电源需要输出电流,但是电感并未…

java Web开发中采用Servlet登录验证,中文用户名始终提示“用户名密码错误”以及输出中文乱码问题

采用Servlet登录验证,中文乱码问题解决 在Java Web开发中,往往采用Servlet完成前后端直接的控制和处理,例如:用户登录验证功能。 在采用如下Servle源码t完成用户名登录验证时,只要用户名涉及中文,对于正确…

APP原生开发与框架开发的优劣势

电话管家APP商用也有几年时间了,但是客户一直都有遇到一些问题。 为什么我们的APP老是要升级? 为什么有些手机使用体验不好? 为什么有些公司的APP几天就开发出来上线了? 为什么有些公司的APP那么便宜? 今天就来从…

Chromium源码学习(1)—— 拉取源码,编译

阅读建议:先简单过一下整个文章目录结构,大致了解一下各个步骤在干什么,然后在上手操作可能会事半功倍。也许你遇到的有些问题文章中已经提及到了,但是由于你没有往下看导致卡进度。 Chromium简介 Chromium项目于2008年发布&…

一个小技巧轻松提升量化精度!IntactKV:保持关键词元无损的大语言模型量化方法

目录 摘要关键词元(Pivot Tokens)方法概述实验验证1. 权重量化2. KV Cache 量化3. 权重和激活值量化 参考文献 本文介绍我们针对大语言模型量化的工作 IntactKV,可以作为插件有效提升 GPTQ、AWQ、QuaRot 等现有主流量化方法效果。论文作者来自…

Hadoop伪分布式安装教程

Hadoop伪分布式安装教程 一、安装背景1.1 软件列表1.2 系统软件列表 二、安装Hadoop2.1 安装 Java 环境2.1.1 前期准备2.1.2 文件传输2.1.3 解压文件2.1.4 配置 jdk 的环境变量2.1.5 输入 java、javac、java -version 命令检验 jdk 是否安装成功 2.2 Hadoop 下载地址[hadoop](h…

C语言序列化和反序列化--TPL(一)

TPL TPL说明网站 C语言中高效的序列化 您可以使用tpl快速轻松地存储和重新加载C数据。Tpl是一个用于序列化C数据的库。数据以自然二进制形式存储。该API很小,并试图保持“不碍事”。Tpl可以序列化许多C数据类型,包括结构。Tpl与文件、内存缓冲区和文件…

观成科技:Play勒索软件组织加密流量分析

1.概述 近年来,勒索软件组织的作业链条逐渐从“加密数据->收取赎金”转变到“数据窃取->加密数据->暗网披露窃取数据大小和内容描述->收取赎金”[1]。勒索软件组织在获取到受害者的访问权限后,不会立刻进行勒索,而是进行横向移动…

【ONE·Git || 基本用法入门】

总言 主要内容:主要介绍Git中常用的指令。   PS:多人协作与企业开发模型使用,此部分内容不作博文总结。             文章目录 总言1、初识Git1.1、版本控制器1.2、git安装 2、基本操作2.1、Git本地仓库2.1.1、创建Git本地仓库&…

【算法工程师】(三年面试五年模拟版)总结

写在前面: WeThinkIn (公主号) 学习经验分享 目录 1、机器学习基础 2、深度学习基础 2.1 1*1卷积的作用 注:卷积核的个数对应输出的通道数(channels),比如输入6*6*64,卷积核1…

Keil5 ~STM32报错Solutions#1

一、error: #268: declaration may not appear after executable statement in block

朋友圈定时发送设置

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

生态农业:引领未来农业新篇章

生态农业,正以其独特的魅力和创新理念,引领着未来农业发展的新篇章。在这个充满变革的时代,我们需要更加关注农业的可持续发展,而生态农业正是实现这一目标的重要途径。 生态农业产业的王总说:生态农业强调生态平衡和可…

五种不寻常的身份验证绕过技术

身份验证绕过漏洞是现代web应用程序中普遍存在的漏洞,也是隐藏最深很难被发现的漏洞。 为此安全防护人员不断在开发新的认证方法,保障组织的网络安全。尽管单点登录(SSO)等工具通常是对旧的登录用户方式的改进,但这些技术仍然可能包含严重的…

Ubuntu22.04之解决:Flameshot无法截图问题(二百三十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

qt中实现多语言功能

qt中实现多语言功能 原理: 其本质就是生成ts文件,然后使用Linguist软件手工翻译,再生成qm文件,最后在主程序的开始加载不同的qm文件,实现多语言。 步骤: 修改程序文件 在pro文件中加入说明 TRANSLATI…

Android环境下Mesa初始化流程重学习之eglCreateContext

Mesa初始化流程重学习之eglCreateContext 引言 没有啥好说的了,直接上手撸代码!总得找点事情干不是!我打工我快乐!我奋斗,我快乐! 一. 核心结构体之间的关联 二. eglCreateContext流程分析 eglCreateContext(...)//s…

docker-compose jira、bugzilla

一、jira 同这篇文章: linux docker 部署破解版本jira:8.4.0——测试体验(非商用)_jira docker-CSDN博客 直到构建完破解版本的镜像就可以了~ 二、bugzilla 1. 拉取镜像: 官网镜像搜索bugzilla,第一个就是: 直接…