C++: IO流

目录

1、C语言输入输出   

流的概念:

2、C++IO流

3、C++文件IO流


1、C语言输入输出   

        C语言中我们用到的最频繁的输入输出方式就是scanf () printf() scanf(): 从标准输入设备 ( ) 读取数据,并将值存放在变量中 printf(): 将指定的文字 / 字符串输出到标准输出设备 ( 屏幕 ) 注意宽度输出和精度输出控制。 C 语言借助了相应的缓冲区来进行输入与输出
输入输出缓冲流:
1. 可以 屏蔽掉低级 I/O 的实现 ,低级 I/O 的实现依赖操作系统本身内核的实现,所以如果能够屏 蔽这部分的差异,可以很容易写出可移植的程序
2. 可以 使用这部分的内容实现 读取的行为 ,对于计算机而言是没有 这个概念,有了这 部分,就可以定义“ 的概念,然后解析缓冲区的内容,返回一个 行”。

流的概念:

即是流动的意思,是物质从一处向另一处流动的过程 ,是对一种 有序连续具有方向性 据( 其单位可以是bit,byte,packet )的抽象描述。
C++ 流是指信息从外部输入设备(如键盘)向计算机内部(如内存)输入和从内存向外部输出设备(显示器)输出的过程。这种输入输出的过程被形象的比喻为“
它的 特性 是:
有序连续 具有方向性 为了实现这种流动, C++ 定义了 I/O 标准类库,这些每个类都称为流 / 流类,用以完成某方面的功 能。

2、C++IO流

C++ 系统实现了一个庞大的类库,其中 ios 为基类,其他类都是直接或间接派生自 ios
C++ 标准库提供了 4 个全局流对象 cin cout cerr clog ,使用 cout 进行标准输出,即数据从内 存流向控制台 ( 显示器 ) 使用cin进行标准输入即数据通过键盘输入到程序中,同时C++标准库还提供了cerr用来进行标准错误的输出,以及clog进行日志的输出 ,从上图可以看出, cout、 cerr、 clog ostream 类的三个不同的对象,因此这三个对象现在基本没有区别,只是应用场景不同。
在使用时候必须要包含文件并引入 std 标准命名空间。
使用文件 I/O 流需要包含 <fstream> 头文件,其中包含了用于文件操作的各种类和函数。
1. cin 为缓冲流。 键盘输入的数据保存在缓冲区中,当要提取时,是从缓冲区中拿 。如果一次输入过多,会留在那儿慢慢用,如果输入错了,必须在回车之前修改,如果回车键按下就无法 挽回了 只有把输入缓冲区中的数据取完后,才要求输入新的数据
2. 输入的数据类型必须与要提取的数据类型一致 ,否则出错。出错只是在流的状态字 state 中对应位置位(置1 ),程序继续。
3. 空格和回车都可以作为数据之间的分格符,所以多个数据可以在一行输入,也可以分行输
入。但如果是 字符型和字符串,则空格( ASCII 码为 32 )无法用 cin 输入,字符串中也不能有 空格 。回车符也无法读入。
4. cin cout 可以直接输入和输出内置类型数据,原因: 标准库已经将所有内置类型的输入和 输出全部重载了。
5. 对于自定义类型,如果要支持 cin cout 的标准输入输出,需要对 << >> 进行重载。

3、C++文件IO流

C++ 根据文件内容的数据格式分为 二进制文件 文本文件 。采用文件流对象操作文件的一般步骤:
1. 定义一个文件流对象
ifstream ifile( 只输入用 )
ofstream ofile( 只输出用 )
fstream iofile( 既输入又输出用 )
2. 使用文件流对象的成员函数打开一个磁盘文件,使得文件流对象和磁盘文件之间建立联系
3. 使用提取和插入运算符对文件进行读写操作,或使用成员函数进行读写
4. 关闭文件
  1. 读取文件: 使用 ifstream 对象可以通过 >> 运算符从文件中读取数据,也可以使用 getline() 函数逐行读取文本文件的内容。

  2. 写入文件: 使用 ofstream 对象可以通过 << 运算符向文件中写入数据,也可以使用 write() 函数写入二进制数据。

打开流对象的方式如下如所示:
代码示例:
#define  _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<fstream>
using namespace std;
class Date
{friend ostream& operator << (ostream& out, const Date& d);friend istream& operator >> (istream& in, Date& d);
public:Date(int year = 1, int month = 1, int day = 1):_year(year), _month(month), _day(day){}operator bool(){// 这里是随意写的,假设输入_year为0,则结束if (_year == 0)return false;elsereturn true;}
private:int _year;int _month;int _day;
};
struct ServerInfo
{char _address[32];int _port;Date _date;
};// 重载输入流运算符,用于从输入流中读取日期对象的年、月、日信息
istream& operator >> (istream& in, Date& d)
{in >> d._year >> d._month >> d._day; // 从输入流中依次读取年、月、日信息return in; // 返回输入流对象的引用
}// 重载输出流运算符,用于向输出流中输出日期对象的年、月、日信息
ostream& operator << (ostream& out, const Date& d)
{out << d._year << " " << d._month << " " << d._day; // 将年、月、日信息输出到输出流return out; // 返回输出流对象的引用
}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));}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.168.0.1", 80, { 2023, 4, 24 } };// 二进制读写ConfigManager cf_bin("test.bin");cf_bin.WriteBin(winfo);ServerInfo rbinfo;cf_bin.ReadBin(rbinfo);cout << rbinfo._address << " " << rbinfo._port << " "<< rbinfo._date << endl;// 文本读写ConfigManager cf_text("test.txt");cf_text.WriteText(winfo);ServerInfo rtinfo;cf_text.ReadText(rtinfo);cout << rtinfo._address << " " << rtinfo._port << " " <<rtinfo._date << endl;return 0;
}

        文件 I/O 流在 C++ 中用于实现文件的读取和写入操作。它的主要组成部分包括文件流对象、文件打开和关闭、读取和写入文件数据、文件位置指针、文件状态检查以及错误处理。通过 ifstreamofstreamfstream 对象,可以实现对文件的读取、写入和读写操作。打开文件时需要指定文件路径和打开模式,关闭文件可以释放资源。读取文件时可以使用 >> 运算符或 getline() 函数,写入文件时可以使用 << 运算符或 write() 函数。通过检查文件流的状态,可以确定文件操作是否成功,并在失败时进行错误处理。文件操作模式包括读取模式、写入模式和追加模式等,以确定对文件的操作方式。

文件打开模式:

ios_base::in 表示以读取模式打开文件。当以此模式打开文件时,可以从文件中读取数据,但无法向文件中写入数据。这种模式通常用于读取文本文件或二进制文件的内容。

ios_base::binary 表示以二进制模式打开文件。在此模式下,文件中的数据会按照二进制方式进行读写,而不会进行任何转换或处理。这种模式适用于处理二进制文件,如图像、音频或视频文件,以确保数据的准确性和完整性。

ios_base::out:以写入模式打开文件,允许向文件中写入数据。如果文件不存在,则创建新文件;如果文件已存在,则清空文件内容。

ios_base::app:以追加模式打开文件,允许向文件末尾添加数据。如果文件不存在,则创建新文件;如果文件已存在,则在文件末尾添加数据。

ios_base::ate:以定位模式打开文件,并将文件位置指针定位到文件末尾。可以结合 ios_base::inios_base::out 使用,用于在文件打开后立即将文件位置指针移动到文件末尾。

ios_base::trunc:在使用 ios_base::outios_base::app 模式时,如果文件已存在,则清空文件内容。通常与 ios_base::outios_base::app 一起使用,用于清空已存在文件的内容。

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

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

相关文章

基于STM32的蓝牙小车(虚拟串口模拟)的Proteus仿真

文章目录 一、前言二、仿真图1.要求2.思路3.画图3.1 电源部分3.2 超声波测距部分3.3 电机驱动部分3.4 按键部分3.5 蓝牙部分3.6 显示屏部分3.7 整体 4.仿真5.软件 三、总结 一、前言 proteus本身并不支持蓝牙仿真&#xff0c;这里我采用虚拟串口的方式来模拟蓝牙控制。 这里给…

如何在PostgreSQL中使用pg_stat_statements插件进行SQL性能统计和分析?

文章目录 一、启用pg_stat_statements插件二、查看统计信息三、定期重置统计信息四、注意事项 PostgreSQL中的pg_stat_statements是一个强大的插件&#xff0c;用于追踪执行时间最长的SQL语句。通过它&#xff0c;我们可以获取有关SQL语句执行频率、总执行时间、平均执行时间等…

Centos7.9 脚本一键部署nextcloud,配置Nginx代理Https。

目录 一键安装nextcloud 出现错误TypeError Cannot read properties of undefined (reading ‘writeText‘) 生成自签名SSL证书 编辑Nginx配置文件 启动Nginx 一键安装nextcloud 本脚本参考文章&#xff0c;本文较长建议先看完在操作&#xff01;&#xff01;&#xff01;…

【性能测试】ChaosTesting(混沌测试)ChaosBlade(混沌实验工具)(四)-k8s容器混沌实验

5. 创建 kubernetes 相关的实验场景 5.0 blade create k8s 5.0.1 介绍 创建 kubernetes 相关的实验场景&#xff0c;除了使用 blade 命令创建场景外&#xff0c;还可以将实验使用 yaml 文件描述&#xff0c;使用 kubectl 命令执行。目前支持的实验场景如下&#xff1a; [bl…

6、ES单机设置用户名密码、集群设置用户名密码、es-head登录、如何去掉密码

目录 一、ES单节点密码配置1、修改配置文件2、 重启es服务3&#xff0c;执行修改密码命令4、访问服务 二、ES集群密码配置1、确定主节点2、生成elastic-stack-ca.p123、生成elastic-certificates.p124、修改配置文件并重启集群5、进行密码配置6、验证 三、es-head登录增加密码的…

数据可视化(七):Pandas香港酒店数据高级分析,涉及相关系数,协方差,数据离散化,透视表等精美可视化展示

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

HarmonyOS开发案例:【图片编辑】

介绍 本篇Codelab是基于ArkTS的声明式开发范式的样例&#xff0c;主要介绍了图片编辑实现过程。样例主要包含以下功能&#xff1a; 图片的解码。使用PixelMap进行图片编辑&#xff0c;如裁剪、旋转、亮度、透明度、饱和度等。图片的编码。 相关概念 [图片解码]&#xff1a;读…

【书生浦语第二期实战营学习笔记作业(四)】

课程文档&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/xtuner/readme.md 作业文档&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/xtuner/homework.md 书生浦语第二期实战营学习笔记&作业(四) 1.1、微调理论讲解及 XTuner 介绍 两种Fin…

不要摆摊,不要开早餐店,原因如下

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 我最近开通了视频号会员专区嘛&#xff0c;专区有个问答功能可以提问&#xff0c;有个会员问了我问题&#xff0c;其中一条问答分享给大家&#xff1a; 松哥&#xff0c;突然想去兼职&#xff0c;早上卖点杂粮煎饼果…

C语言自定义类型【结构体】

结构体的概念 结构是一些值的集合&#xff0c;这些值被称为成员变量。结构的每个成员可以是不同类型的变量。 1.结构体的声明 1.1普通声明 我们假设要创建一本书的类型&#xff0c;那我们需要书名&#xff0c;作者&#xff0c;价格&#xff0c;书的ID 代码如下&#xff1a;…

2024年04月09日 Go生态洞察:2024年上半年Go开发者调查报告洞察

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a;…

Linux——web基础实验

实验前的安装 [rootwebserver ~]# yum -y install httpd [rootwebserver ~]# systemctl enable --now httpd Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service. [rootwebserver ~]# echo test for apach…

性能监控数据(本地、服务器)

CPU、内存、磁盘等的监控 一、mac本地性能监控 1. top 终端&#xff1a; top load Avg: 平均负载(1分钟&#xff0c;5 分钟&#xff0c;15 分钟)值不能超过 4&#xff0c;要不然就是超负荷运行 Tasks: 进程数 %Cpu(s): idle :剩余百分比 KiB Mem: free:剩余内存&#xff0…

再谈C语言——理解指针(五)(完结篇)

数组名的理解 在上⼀个章节我们在使⽤指针访问数组的内容时&#xff0c;有这样的代码&#xff1a; int arr[10] {1,2,3,4,5,6,7,8,9,10}; int *p &arr[0]; 这⾥我们使⽤ &arr[0] 的⽅式拿到了数组第⼀个元素的地址&#xff0c;但是其实数组名本来就是地址&#xf…

视频剪辑新高度:轻松为视频添加字幕,提升内容质量与传播力

视频已经成为最直观、最动人的信息传播方式。但是&#xff0c;仅仅依靠画面和声音&#xff0c;往往难以完全传达视频的核心内容或情感。这时&#xff0c;字幕的加入就显得尤为重要。它们不仅能够增强观众的观看体验&#xff0c;还能为视频增添独特的文字魅力。 首先&#xff0…

让你的电脑准时“打个盹”:Win10定时休眠

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 一、Windows 10任务计划程序 在快节奏的工作生活中&#xff0c;常常需要让电脑在特定时间执行某些任务&#xff0c;而Windows 10的任务计划程序就是为此而生的神器。它不仅可以自动更新系统、备份文件&#xff0c;甚…

九泰智库 | 医械周刊- Vol.23

⚖️ 法规动态 新疆药品和医疗器械产品注册费收费标准大幅降低平均降幅95% 近日&#xff0c;新疆自治区发展和改革委会同自治区财政厅印发《关于调整药品医疗器械产品注册费收费标准的通知》&#xff0c;明确自2024年4月29日起&#xff0c;取消药品补充申请注册费&#xff0c;药…

打造人脸磨皮算法新标杆,满足企业多元化需求

高清视频和图片已成为企业展示形象、传递信息的重要载体&#xff0c;拍摄过程中难以避免的皮肤瑕疵和纹理不均等问题&#xff0c;常常让精美的画面失色。美摄科技凭借其领先的人脸磨皮算法解决方案&#xff0c;为企业提供了高效、精细的图像处理服务&#xff0c;让每一帧画面都…

Git ignore、exclude for TortoiseGit 小结

1.Ignore Type&#xff1a;忽略类型&#xff0c;也即忽略规则&#xff0c;如何去忽略文件? 1.1.Ignore item(s) only in containing folder(s)&#xff1a;仅忽略在包含在文件夹中项目。 仅忽略该文件夹下选定的patterns。the patterns其实就是文件类型&#xff0c;比如.txt后…