C++中的I/O流

本节主要看代码理解

I/O流继承关系



iostream


主要类 cin cout cerr clog
 

while(cin>>str)
{
//处理
}


当接收ctrl z 或 ctrl c时,会停止, 原理:重载操作符bool,令指定istream为false

清理cin缓存

		if (cin.fail()){cin.clear();char ch;while (cin.get(ch)){//cout << ch;}}

cin.clear


ctrl z后cin都不可用,因为cin前会检查goodbit
cin.clear() 可恢复cin,使其可用

ctrl c 直接杀进程



四种文件状态,用一个整形表示,不同二进制位表不同状态
eofbit
failbit
badbit
goodbit
向int 中cin整形加字符(22s)
int会在第一个非整型前停下,剩下的加到缓存区,留给下个cin


cin.get(ch)


将cin缓存区第一个字符给ch并删除,类似pop,可用于清空缓存(结合clear)

 


I/O提速

解决cin,cout效率比printf/scanf低下
加上
ios_base::sync_with_stdio(false) //关闭C/C++同步
cin.tie(nullptr)//解除绑定关系
cout.tie(nullptr)//解除绑定关系
 


fstream



向文件写入/出数据


1.直接写二进制

struct ServerInfo
{//char _address[32];string _address;int _port;Date _date;
};struct ConfigManager
{
public:ConfigManager(const char* filename):_filename(filename){}// 二进制// 内存中怎么存,囫囵吞枣,怎么写出去void WriteBin(const ServerInfo& info){ofstream ofs(_filename, ios_base::out | ios_base::binary);ofs.write((const char*)&info, sizeof(info));}void ReadBin(ServerInfo& info){ifstream ifs(_filename, ios_base::in | ios_base::binary);ifs.read((char*)&info, sizeof(info));}// 21:15继续void WriteText(const ServerInfo& info){ofstream ofs(_filename);ofs << info._address << " " << info._port << " " << info._date;}void ReadText(ServerInfo& info){ifstream ifs(_filename);ifs >> info._address >> info._port >> info._date;}private:string _filename; // 配置文件
};//int main()
//{
//	ServerInfo winfo = { "192.0.0.1111111111111111111111", 80, { 2022, 4, 10 } };
//
//	// 二进制读写
//	ConfigManager cf_bin("test.bin");
//	cf_bin.WriteBin(winfo);
//
//	return 0;
//}//int main()
//{
//	// 二进制读写
//	ConfigManager cf_bin("test.bin");
//
//	ServerInfo rbinfo;
//	cf_bin.ReadBin(rbinfo);
//
//	cout << rbinfo._address << " " << rbinfo._port << " " << rbinfo._date << endl;
//
//	return 0;
//}


写string等有指针的会有大坑


2.都转成字符串(重载流插入流提取)

ofstream

int main()
{ofstream ofs("test.txt");//ofs.open("test.txt");ofs.put('x');ofs.write("hello\n", 6);ofs << "22222222" << endl;int x = 111;double y = 1.11;ofs << x << endl;ofs << y << endl;//ofs.close();return 0;
}

ifstream

int main()
{//ifstream ofs("test.cpp");ifstream ofs("D:\\360MoveData\\Users\\xjh\\Desktop\\8-10.png", ios_base::in | ios_base::binary);int n = 0;while (!ofs.eof()){char ch = ofs.get();//cout << ch;++n;}cout << n << endl;return 0;
}


 


stringstream


将其看成控制台我们与程序交互即可, 我们输入的是都字符串,但程序会根据接收值类型自动转为整形/浮点数, 还会对多参数对象自动调用构造函数(不是重载)

#include<sstream>//int main()
//{
//	int i = 123;
//	Date d = { 2022, 4, 10 };
//	ostringstream oss;
//	oss << i << endl;
//	oss << d << endl;
//
//	string s = oss.str();
//	cout << s << endl;
//
//	//istringstream iss(s);
//	//istringstream iss;
//	//iss.str("100 2024 9 9");
//	istringstream iss("100 2024 9 9");
//	int j;
//	Date x;
//	iss >> j >> x;
//
//	return 0;
//}// json库struct ChatInfo
{string _name; // 名字int _id;      // idDate _date;   // 时间string _msg;  // 聊天信息
};int main()
{// 结构信息序列化为字符串ChatInfo winfo = { "张三", 135246, { 2022, 4, 10 }, "晚上一起看电影吧" };ostringstream oss;oss << winfo._name << " " << winfo._id << " " << winfo._date << " " << winfo._msg;string str = oss.str();cout << str << endl << endl;// send(str);// str = recv()ChatInfo rInfo;istringstream iss(str);iss >> rInfo._name >> rInfo._id >> rInfo._date >> rInfo._msg;cout << "-------------------------------------------------------" << endl;cout << "姓名:" << rInfo._name << "(" << rInfo._id << ") ";cout << rInfo._date << endl;cout << rInfo._name << ":>" << rInfo._msg << endl;cout << "-------------------------------------------------------" << endl;return 0;
}

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

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

相关文章

Meta:大语言模型可以通过自我批判取得大幅提升!

夕小瑶科技说 原创 作者 | 谢年年 论文的审稿模式想必大家都不会陌生&#xff0c;一篇论文除了分配多个评审&#xff0c;最后还将由PC综合评估各位审稿人的reviews撰写meta-review。 最近&#xff0c;来自Meta的研究团队将这一模式引进到大模型的对齐训练中。模型同时扮演 执…

poker (GuanDan)

poker &#xff08;GuanDan&#xff09; 掼蛋 基础比大小规则: ①单牌 2最小与以往不太一样&#xff08;2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < 10 < J < Q < K < A < Joker&#xff09; 如果本级打9&#xff0c;那么9就比A大&#xff0c;…

EasyExcel相关整理

一、实体类常用注解 1、字段注解ExcelProperty&#xff0c;一般常用value标明表头&#xff0c;index标明列 2、实体类注解&#xff08;导出样式设置&#xff09; 3、导出特殊类型转换 二、导出 1、导出多个sheet 2、导出数据量大导致内存溢出 三、导入 待更新

安装Anaconda(过程)

Anaconda是一个开源的Python发行版本&#xff0c;用来管理Python相关的包&#xff0c;安装Anaconda可以很方便的切换不同的环境&#xff0c;使用不同的深度学习框架开发项目&#xff0c;本文将详细介绍Anaconda的安装。 一、安装 1、安装方式 官网&#xff1a;“https://www.…

JVM - GC垃圾回收

文章目录 目录 文章目录 1. 自动垃圾回收 1.1 垃圾回收区域 2. 方法区回收 3. 堆回收 3.1 对象已死&#xff1f; 3.1.1 引用计数算法 3.1.2 可达性分析算法 3.1.3 再谈引用 强引用 软引用 弱引用 虚引用 3.2 垃圾收集算法 3.2.1 分代收集理论 3.2.2 垃圾回收算…

FlinkCDC 3.2.0 新增优点 Pattern Replacement in routing rules

新增优点&#xff1a;Pattern Replacement in routing rules flinkcdc 3.2.0版本相较于3.1.0版本&#xff0c;避免了多表多sink多次写 route 路由的麻烦&#xff0c;类似于统一前后缀的形式多表多sink&#xff0c;通过<>正则&#xff0c;大大减少了书写 官网&#xff1…

小项目建议用redis替换mq

在简单的、性能要求高的场景下&#xff0c;Redis 可以很好地替代 RabbitMQ&#xff0c;但对于复杂的消息系统需求&#xff0c;RabbitMQ 仍然是更合适的选择。 部署和运维简化 用redis替换mq最大的好处是&#xff1a;部署和运维简化。如果已经在项目中使用 Redis&#xff0c;继…

Linux学习-Ansible(二)

基本配置 #主机清单文件 [rootharbor ansible]# cat hostlist [web] 192.168.29.161 192.168.29.162 [es] 192.168.29.171 192.168.29.172 192.168.29.173 #查看所有被管理的主机 [rootharbor ansible]# ansible all --list-hostshosts (5):192.168.29.161192.168.29.162192.1…

CMS需求文档

CMS需求文档 文章目录 CMS需求文档一、单体(分布式)架构二、技术三、面向用户四、功能列表1.1.用户管理1.2.权限体系1.3.多站点1.4.模板管理1.5.媒体管理(资源库)1.6.内容组织(分类)1.7.内容创作(稿件库)1.8.内容发布1.9.全文检索1.10.内容词汇1.11.性能优化1.12.日志记录1…

华为OD机试真题E卷-计算网络信号(含题目描述+解题思路+代码解析)

最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客 题目描述: 网络信号经过传递会逐层衰减,且遇到阻隔物无法直接穿透,在此情况下需要计算某个位置的网络信号值。注意:网络信号可以绕过阻隔物 array[m][n]的二维数组代表网格地图…

初始Linux 和 各种常见指令

目录 Linux背景 1. 发展史 Linux发展历史 1.历史 2. 开源 Linux下基本指令 01. ls 指令 02. pwd命令 03. cd 指令 04. touch指令 05.mkdir指令&#xff08;重要&#xff09;&#xff1a; 06.rmdir指令 && rm 指令&#xff08;重要&#xff09;&#xff1a; …

这项新技术让 AI 感知自己的情感——也感知你的情感

今天&#xff0c;位于纽约的新创公司Hume AI推出了一个全新的“共情语音界面”&#xff0c;使得可以在Anthropic、谷歌、Meta、Mistral以及OpenAI的大型语言模型中添加一系列情感表达的声音&#xff0c;以及对情感敏感的耳朵——这预示着一个时代的到来&#xff0c;届时AI助手可…

【Vue3】自动化路由配置:Vue3与unplugin-vue-router的完美结合

引言 在Vue3项目中&#xff0c;路由管理是构建复杂应用不可或缺的一部分。传统上&#xff0c;手动编写路由配置既繁琐又容易出错。本文将介绍如何利用unplugin-vue-router插件&#xff0c;实现Vue3项目的自动化路由配置&#xff0c;从而提升开发效率和准确性。 unplugin-vue-…

基于SpringBoot+Vue+MySQL的考研互助交流平台

系统展示 用户前台界面 管理员后台界面 系统背景 本文设计并实现了一个基于SpringBoot、Vue.js和MySQL的考研互助交流平台。该平台旨在为广大考研学子提供一个集资源共享、学习交流、经验分享、心理辅导等功能于一体的综合性在线社区。通过SpringBoot构建高效稳定的后端服务&am…

nnunetv2系列:2D实例分割数据集转换

nnunetv2系列&#xff1a;自定义2D实例分割数据集转换 这里主要参考官方源文件nnUNet/nnunetv2/dataset_conversion/Dataset120_RoadSegmentation.py&#xff0c;注释了一些不必要的操作。数据集下载链接: massachusetts-roads-dataset 重要提示: nnU-Net只能用于使用无损(或…

轻松实现游戏串流,内网穿透

一、部署Gemini Gemini使用教程 二、部署Moonlight 过程大概说一下&#xff0c;网上有太多太多moonlight的东西了 需要运行游戏的机器上安装GFE&#xff08;GeForce Experience&#xff09;&#xff0c;登录并开启GAMESTREAM&#xff08;游戏串流&#xff09;功能 注&…

信息安全考点-1

信息安全基础知识考试通常涵盖多个方面&#xff0c;旨在测试考生对于信息安全基本概念、原则和技术的理解。以下是信息安全基础知识考试中常见的考点&#xff1a; 1. 信息安全基本概念 信息安全的定义信息安全的目标&#xff08;机密性、完整性、可用性&#xff09;信息安全管…

网络安全 L2 Introduction to Cryptography 密码学

Definitions 1. crypto - hidden/secret grafia - writing 2. “the science and study of secret writing” 3. Cryptography is the science of protecting data, which provides means of converting data into unreadable form, so that 1. the data cannot be ac…

vue + Element UI table动态合并单元格

一、功能需求 1、根据名称相同的合并工作阶段和主要任务合并这两列&#xff0c;但主要任务内容一样&#xff0c;但要考虑主要任务一样&#xff0c;但工作阶段不一样的情况。&#xff08;枞向合并&#xff09; 2、落实情况里的定量内容和定性内容值一样则合并。&#xff08;横向…

情感支持与疏导:帮助自闭症家属走出困境

在自闭症儿童的康复旅程中&#xff0c;每一位家长都是最坚强的后盾&#xff0c;也是最需要关怀与支持的群体。他们面对的不仅是孩子成长道路上的重重挑战&#xff0c;更有自己内心世界的挣扎与煎熬。广州市星贝育园康复中心&#xff0c;作为一家专业的全托寄宿制儿童康复训练机…