C++:IO流

目录

一. C语言的输入输出方式

二. C++的输入输出

2.1 C++标准IO流 

2.2 文件IO流

2.3 字符串IO流


一. C语言的输入输出方式

一般C语言通过scanf和printf来实现输入输出,scanf和printf都需要显示地指定数据类型。同时,C语言还支持fscanf/fprintf以及sscanf/sprintf,它们的功能分别为对文件写入/读取数据,和对字符串写入/读取数据。

图1.1 C语言输入输出相关函数

为了提高读写数据的效率,将内存中的数据写入磁盘文件时,并不是拿到数据后立刻写入,而是将数据先存储在输出缓冲区中,等缓冲区满了后再集中写入到磁盘文件。从磁盘文件中读取数据同样也要有输入缓冲区作为中间媒介。

图1.2 数据输入和输出的方式

二. C++的输入输出

2.1 C++标准IO流 

C++中使用cin作为标准输入流,cout作为标准输出流,<<为流插入操作符,>>为流提取操作符。

对于内置内类型,可以直接使用cin/cout配合<</>>执行输入输出,对于自定义类型数据,可以通过重载运算符实现输入和输出。

一般来说:标准输出流为屏幕,标准输入流为键盘。

2.2 文件IO流

  • C++分别定义了用于向文件中写数据和从文件中读数据的类:ofstream/ifstream
  • 还定义了既支持读数据、也支持写数据的类:iofstream

在实例化上面的类时,我们一般显示地指定其操作的文件的文件名,以及文件的打开方式,文件的打开方式定义在命名空间std::ios_base中,常用的文件打开方式有:in -- 只读、out -- 只写、binary -- 二进制的方式读/写。

支持多种方式打开文件,用|分割,如:std::ios_base::in | std::ios_base::binary表示以二进制的方式读文件内容。

使用上面三个类要包头文件:#include<fstream>

图2.1 ofstream和ifstream的构造函数声明

这几个类的成员函数很多,但常用的只有下面三个:

  1. operator<<  --  向文件中写数据。
  2. operator>>  --  从文件中读取数据。
  3. get() -- 从文件中读取单个字符。

下面的代码中定义了名为ManagerStuInfo的类,其中有WriteBinary和ReadBinary函数,实现将struct student中的内容以二进制的方式写进指定文件中。先将winfo对象中的内容写入文件,然后再读取到rinfo对象中。

#include<iostream>
#include<fstream>
#include<string>

struct student
{
	std::string name;
	int age;
	int stuId;
};

class ManagerStuInfo
{
public:
	ManagerStuInfo(const char* filename = "test.txt")
		: _filename(filename)
	{ }

	//二进制写文件函数
	void WriteBinary(const student& st)
	{
		std::ofstream ofs(_filename, std::ios_base::out | std::ios_base::binary);
		ofs << st.name << std::endl;
		ofs << st.age << std::endl;
		ofs << st.stuId << std::endl;
	}

	//二进制读文件函数
	void ReadBinary(student& st)
	{
		std::ifstream ifs(_filename, std::ios_base::in | std::ios_base::binary);
		ifs >> st.name;
		ifs >> st.age;
		ifs >> st.stuId;
	}

private:
	std::string _filename;
};

int main()
{
	//写文件
	student winfo = { "zhangsan", 20, 1234 };
	ManagerStuInfo msw;
	msw.WriteBinary(winfo);

	//读文件
	student rinfo;
	ManagerStuInfo msr;
	msr.ReadBinary(rinfo);

	std::cout << rinfo.name << std::endl;
	std::cout << rinfo.age << std::endl;
	std::cout << rinfo.stuId << std::endl;

	return 0;
}

2.3 字符串IO流

C++标准库中定义了ostringstream和istringstream,分别用于向字符串中写数据和从字符串中读取格式化的数据。同时还有stringstream既支持字符串写也支持字符串读。

上面三个类被定义在头文件<sstream>中。

字符串IO的类与文件IO的实例化和使用方法与文件IO基本相同,str成员函数的功能是获取stringstream内部的string成员。

#include<iostream>
#include<string>
#include<sstream>

struct student
{
	std::string name;
	int age;
	int stuId;
};

int main()
{
	//向字符串写数据
	student winfo = { "zhangsan", 20, 1234 };
	std::ostringstream oss;
	oss << winfo.name << " ";
	oss << winfo.age << " ";
	oss << winfo.stuId << " ";

	//从字符串中读数据
	student rinfo;
	std::string str = oss.str();
	std::istringstream iss(str);
	iss >> rinfo.name >> rinfo.age >> rinfo.stuId;

	std::cout << rinfo.name << std::endl;
	std::cout << rinfo.age << std::endl;
	std::cout << rinfo.stuId << std::endl;

	return 0;
}

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

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

相关文章

【大数据】可视化仪表板 - Superset的安装和使用

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

MYSQL中 find_in_set() 函数用法详解

MYSQL中 find_in_set() 函数用法详解 官方涵义&#xff08;MySQL手册中语法说明&#xff09; FIND_IN_SET(str,strlist) &#xff1a; str 要查询的字符串&#xff0c;strlist 需查询的字段&#xff0c;参数以”,”分隔&#xff0c;形式如 (1,2,6,8,10,22)&#xff1b;该函数的…

接口如何运用pytest+HttpRunner展开测试?

目录 前言&#xff1a; 一、 什么是接口测试 二、 引入自动化背景 三、 自动化技术选型 四、 自动化测试用例 五、自动化成果 前言&#xff1a; pytest和HttpRunner都是Python编程语言中常用的接口测试框架。 pytest是一种成熟的、灵活的、社区支持良好的测试框架&…

vr沉浸式仿真实训展厅中控系统提高课堂纪律

为解决实训教学过程中“看不到、进不去、成本高、危险大”的问题&#xff0c;VR智能中控系统为职业教育及高等教育老师提供一个数字化、沉浸式、集中管控的实训教学工具。 VR智能中控系统通过对VR教学课堂的实时监控、数据的收集和分析&#xff0c;为气象学院的教学提供更多帮助…

2023年05月份青少年软件编程Scratch试卷三级真题

2023-05 Scratch三级真题 分数&#xff1a;100 题数&#xff1a;38 测试时长&#xff1a;60min 一、单选题(共25题&#xff0c;共50分) 1. 关于变量&#xff0c;下列描述错误的是&#xff1f;&#xff08;A&#xff09;&#xff08;2分&#xff09; &#xff08;变量那一栏…

【深度学习】基于Qt的人脸识别系统,门禁人脸识别系统,Python人脸识别流程,树莓派

文章目录 人脸识别过程人脸检测人脸对齐人脸特征提取特征距离比对人脸识别系统 人脸识别过程 在深度学习领域做人脸识别的识别准确率已经高到超出人类识别&#xff0c;但综合考虑模型复杂度&#xff08;推理速度&#xff09;和模型的识别效果&#xff0c;这个地方还是有做一些…

基于Java物流管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

STM32单片机(四)第一节:OLED调试工具

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

从业务出发,K8S环境自建和非自建整体架构设计比较

新钛云服已累计为您分享751篇技术干货 随着数字化转型的大潮到来&#xff0c;越来越多的企业开始上云&#xff0c;同时也纷纷加入到微服务和K8S队伍中。但在K8S整体环境究竟应该用自建的还是非自建&#xff1f;以及他们需要用到的服务&#xff0c;究竟应该自建还是直接用PAAS服…

C++【STL】之list的使用

文章目录&#xff1a; list介绍list使用1. 默认成员函数1.1 构造函数1.2 拷贝构造1.3 赋值重载1.4 析构函数 2. 迭代器3. 容量操作4. 数据访问5. 数据修改5.1 插入删除5.2 交换调整清理 6. 其他操作6.1 链表拼接6.2 链表移除6.3 排序6.4 链表逆置 list介绍 list是可以在常数范围…

java 版本企业电子招投标采购系统源码之登录页面

​ 信息数智化招采系统 服务框架&#xff1a;Spring Cloud、Spring Boot2、Mybatis、OAuth2、Security 前端架构&#xff1a;VUE、Uniapp、Layui、Bootstrap、H5、CSS3 涉及技术&#xff1a;Eureka、Config、Zuul、OAuth2、Security、OSS、Turbine、Zipkin、Feign、Monitor、…

轻量服务器架设网站打开速度慢,如何加速?

轻量服务器非常适合流量适中的小、中型网站&#xff0c;虽作为轻量级主机包&#xff0c;但它一般与云服务器使用同样的 CPU、内存、硬盘等底层资源。只是&#xff0c;轻量服务器的资源(可用的存储空间、RAM 和 CPU等硬件/内存容量)更低&#xff0c;虽然这些对于较中、小的网站来…

性能优化-内存优化

8-《内存优化》 一.基础知识1.Java的内存分配区域2.Java的引用类型3.Java的垃圾回收机制&#xff1a;三个问题4.Android的内存管理机制 二. Android的内存泄漏、内存溢出、内存抖动概念0.内存泄露1.内存溢出![在这里插入图片描述](https://img-blog.csdnimg.cn/8b73ef844f26470…

png转jpg,直接改后缀?

通过把.png改为.jpg可以改变图片的格式么&#xff1f; 将PNG文件扩展名改为JPEG的扩展名&#xff08;.jpg或.jpeg&#xff09;不会更改图像的格式。它只是更改了文件扩展名&#xff0c;这可能导致一些图像查看器和编辑器无法正确识别和处理该文件。 PNG和JPEG是两种不同的图像文…

Python自动人工智能训练数据增强工具 | DALI介绍(含代码)

Python自动人工智能训练数据增强工具 | DALI介绍(含代码) 文章目录 Python自动人工智能训练数据增强工具 | DALI介绍(含代码)自动数据增强方法DALI 和条件执行使用 DALI 自动增强使用 DALI 的自动增强性能尝试使用 DALI 进行自动增强 深度学习模型需要数百 GB 的数据才能很好地…

练习:逻辑回归

练习2&#xff1a;逻辑回归 介绍 在本练习中&#xff0c;您将实现逻辑回归并将其应用于两个不同的数据集。还将通过将正则化加入训练算法&#xff0c;来提高算法的鲁棒性&#xff0c;并用更复杂的情形来测试模型算法。 在开始练习前&#xff0c;需要下载如下的文件进行数据上…

研一,有点迷茫。

作者&#xff1a;阿秀 校招八股文学习网站&#xff1a;https://interviewguide.cn 这是阿秀的第「277」篇原创 小伙伴们大家好&#xff0c;我是阿秀。 最近回答了不少大一大二研一在读的学习圈中学弟学妹的咨询问题&#xff0c;基本都是计算机学习、进度、疑惑等等相关的问题&a…

Mock和Vite-plugin-Mock的区别是什么?

简介 我不知道大家和我是否有一样的疑问&#xff0c;之前Mock.js用的挺好&#xff0c;为啥又出现了一个vite-plugin-mock,而且这个插件还依赖于Mock.js.那么他的优势到底是什么呢&#xff1f;如果你也有这样的疑问&#xff0c;本文最后会给出答案解开这个谜底 前言 我之前已经…

MVC、MVP、MVVM:详解2

概述 MVC、MVP、MVVM 都是在 Android 开发中经常用到的架构思想&#xff0c;它们都是为了更好地分离代码、提高代码可复用性、方便维护等目的而设计的。下面对这三种架构思想进行简单的介绍和比较。 MVC MVC 架构是最早被使用的一种架构&#xff0c;它把程序分成了三个部分&…

EasyExcel实现execl导入导出

引言 在实际开发中&#xff0c;处理 Excel 文件是一个常见的需求。EasyExcel 是一个基于 Java 的开源库&#xff0c;提供了简单易用的 API&#xff0c;可以方便地读取和写入 Excel 文件。本文将介绍如何使用 EasyExcel 实现 Excel 导入功能&#xff0c;以及一些相关的技巧和注…