C++:C++的IO流

C语言实现定时任务 例:设置定时任务,每周周X的X时X分自动重启系统 思路:将设置好的重启时间保存到本地配置文件中,设置定时器定时一分钟,每一分钟信号触发一次事件,事件函数中获取配置文件信息与当前系统时间信息,将两个时间进行时间差计算,符合条件的自动重启系统. //创建定时器函数(通过信号触发事件timer_task函数启动) int create_timer() { struct sigevent evp; int ret = 0; memset(&evp, 0, sizeof(stru 阅读详情

C++的IO流

C语言中的输入输出常用的是scanf()和printf()。
scanf(): 从标准输入设备(键盘)读取数据,并将值存放在变量中。
printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)。注意宽度输出和精度输出控制。

当我们在进行输入输出的时候并不是直接输入输出的,而是有一个输入缓冲区和输出缓冲区的,这两个缓冲区可以实现“行”读取的行为,对于计算机而言是没有“行”这个概念,有了这部分,就可以定义“行”的概念,然后解析缓冲区的内容,返回一个“行”。

C++流是指信息从外部输入设备(如键盘)向计算机内部(如内存)输入和从内存向外部输出设备(显示器)输出的过程。这种输入输出的过程被形象的比喻为“流”。
它的特性是:有序连续、具有方向性

C++的IO流

C++系统实现了一个庞大的类库,其中ios为基类,其他类都是直接或间接派生自ios类
在这里插入图片描述
我们常用的cin是一个istream的对象,cout是一个ostream的对象。
C语言输入输出要指定类型,而C++中可以自动推导这里的类型进行输入输出。

#include <iostream>
using namespace std;
int main()
{
	int i = 1;
	double j = 2.2;
	printf("%d\n", i);
	printf("%lf\n", j);

	cout << i << endl;
	cout << j << endl;
	return 0;
}

本质上这里的<<是一个运算符重载,这里其实调用了operator<<。同时这里也有函数重载,重载了operator<<这个函数。是哪种类型它就会去调用那个对应的函数。
在这里插入图片描述
这里的operator<<会被定义为该类的友元函数,同时operator<<的返回值是一个ostream对象的引用,也就是说返回的是一个cout,这样也就支持了连续输出。
同理,cin也是一样的,支持连续输入。

有时候我们在写oj题时会需要连续输入,也就写出了这样的代码:

while(cin>>n)
{
    //...
}

那么这种编译器又是怎么支持的呢?
这里连续输入并不是因为这里返回值是一个bool,而是这里的返回值是一个cin,cin又重载了operator bool,这里面就会不断地检测它的标志还是否继续接受输入,就去看输入有没有值,有值就继续进行输入,没有值就会阻塞在这里,除非接收到程序猿给的结束信号,如ctrl+c,ctrl+c就会把这个标志置成false,然后再去检测operator bool时发现标志改变了,于是就结束这个循环。

注意:

  1. cin为缓冲流。键盘输入的数据保存在缓冲区中,当要提取时,是从缓冲区中拿。如果一次输入过多,会留在那儿慢慢用,如果输入错了,必须在回车之前修改,如果回车键按下就无法挽回了。只有把输入缓冲区中的数据取完后,才要求输入新的数据。不可能用刷新来清除缓冲区,所以不能输错,也不能多输
  2. 输入的数据类型必须与要提取的数据类型一致,否则出错。出错只是在流的状态字state中对应位置位(置1),程序继续。
  3. 空格和回车都可以作为数据之间的分格符,所以多个数据可以在一行输入,也可以分行输入。但如果是字符型和字符串,则空格(ASCII码为32)无法用cin输入,字符串中也不能有空格。回车符也无法读入。所以如果是 读取字符串的话可以使用getline(cin,str);, 这个就可以获取一行字符串。

文件流对象

C++根据文件内容的数据格式分为二进制文件和文本文件
文件的操作步骤:

  1. 定义一个文件流对象
    ifstream ifile(只输入用)
    ofstream ofile(只输出用)
    fstream iofile(既输入又输出用)
  2. 使用文件流对象的成员函数打开一个磁盘文件,使得文件流对象和磁盘文件之间建立联系
  3. 使用提取和插入运算符对文件进行读写操作,或使用成员函数进行读写
  4. 关闭文件
1.二进制文件的读写

写是ostream,读是istream

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

struct ServerInfo
{
	char _ip[32]; // ip
	int _port; // 端口
};

struct ConfigManager
{
public:
	ConfigManager(const char* configfile = "bitserver.config")
		:_configfile(configfile)
	{}

	//二进制读写:内存中是什么样子,读写就是什么样子
	ServerInfo Read()
	{
		// 这里注意使用二进制方式打开读
		ServerInfo info;
		ifstream ifs(_configfile.c_str());
		ifs.read((char*)&info, sizeof(info));
		return info;
	}

	void Write(const ServerInfo& info)
	{
		// 这里注意使用二进制方式打开写
		ofstream ofs(_configfile.c_str());
		ofs.write((char*)&info, sizeof(info));
	}

private:
	string _configfile;//配置文件
};

int main()
{
	ConfigManager cm;//创建一个配置文件

	ServerInfo winfo;//设置配置信息ip和port
	strcpy(winfo._ip, "127.0.0.1");
	winfo._port = 80;

	cm.Write(winfo);//往配置文件里写数据

	ServerInfo rinfo = cm.Read();//从配置文件里读数据

	return 0;
}

具体分析如下:
在这里插入图片描述
因此我们发现二进制读写的好处就是简单,内存中是什么样子的,读写就是什么样子的,而且快捷。但是它容易出错。

2.文本文件的读写
#include <iostream>
#include <string>
#include <fstream>
using namespace std;

struct ServerInfo
{
	char _ip[32]; // ip
	int _port; // 端口
};

struct ConfigManager
{
public:
	ConfigManager(const char* configfile = "bitserver.config")
		:_configfile(configfile)
	{}
	
	//文本读写:要进行转换处理
	ServerInfo ReadText()
	{
		ServerInfo info;
		ifstream ifs(_configfile.c_str());
		//不能包含空格,遇到空格会停止
		ifs >> info._ip;
		ifs >> info._port;
		return info;
	}

	void WriteText(const ServerInfo& info)
	{
		//方法1
		//char buff[128];
		//ofstream ofs(_configfile.c_str());
		//ofs.write(info._ip,strlen(info._ip));
		//ofs.put('\n');
		//itoa(info._port, buff, 10);//10表示十进制
		//ofs.write(buff, strlen(buff));
		//ofs.put('\n');

		//方法2
		ofstream ofs(_configfile.c_str());//ofstream重载了operator<<
		ofs << info._ip << endl;
		ofs << info._port << endl;
	}
private:
	string _configfile;//配置文件
};

int main()
{
	ConfigManager cm;//创建一个配置文件

	ServerInfo winfo;//设置配置信息ip和port
	strcpy(winfo._ip, "127.0.0.1");
	winfo._port = 80;

	cm.WriteText(winfo);//往配置文件里写数据

	ServerInfo rinfo = cm.ReadText();//从配置文件里读数据
	return 0;
}

打开文件,结果如下:
在这里插入图片描述
文本读写读取出来的数据是经过处理的,所以比较复杂,但是它非常的清除明了,不会出现错误。

madgwick算法基于MPU9250姿态融合漂移问题的原因 基于MPU9250的madgwick算法姿态漂移问题原因 0、声明 因为这个是现象是不是共性目前本人还没研究过,只是在个体问题研究的基础上得出的结论,或许我买到的MPU9250是一个盗版:),所以只具备参考性。 1、现象 使用MPU9250的加速度计、角速度计、磁力计(AK8963)原始数据输入到madgwick算法中,得到的姿态最终会在停止姿态变化后仍然漂移一小段时间。其中加速度计和角速度计读取速率为400hz,磁力计为100hz,加速度计采样范围±2g,角速度计采样范... 阅读详情

相关推荐

MIMO-OFDM 通信-感知一体化(ISAC)中的联合优化与性能权衡

本文深入探讨了MIMO-OFDM技术在通信-感知一体化(ISAC)系统中的核心作用与挑战。文章分析了如何通过联合优化资源分配、波束成形与波形设计,在有限的频谱与硬件资源下,实现通信速率与感知精度之间的最佳平衡,并指出了工程实践中面临的同步、干扰等关键难题。

dapp9builder的博客 216

【C++】IO流

简要讲述了C++中的文件IO操作

zzg的学习博客 330

【数据结构】平行四边形数量

平行四边形个数,哈希表,散列

cyy010617的博客 4009

【C++ 学习 ㊴】- 详解 C++ 的 I/O 流

C++ 的 I/O 流: 一、C++ 的 I/O 流 二、C++ 的标准 I/O 流 三、C++ 的文件 I/O 流

melonyzzZ的博客 869

光电式烟雾传感器实战指南(一) 光迷宫设计与散射原理篇

本文深入解析了光电式烟雾传感器的核心部件——光迷宫的设计原理与光散射机制。文章详细阐述了如何通过精心设计的光学结构实现‘透气不透光’,并重点探讨了前向散射(尤其是135°角)在提升烟雾监测系统灵敏度与可靠性中的关键作用,为DIY爱好者提供了从理论到实践的完整指南。

weixin_29229055的博客 587

基于GIS的生态安全网络格局构建(附练习数据下载)

基于GIS的生态安全网络格局构建(附练习数据下载)

qq_43173805的博客 3124

『C++』C++的IO流详解

C++的IO流详解

枫叶先生的博客 2304

【可信数据空间-连接器技术架构设计方案】

一句话概括连接器是可信数据空间的“数据保镖”和“外交官”。连接器就是一个部署在你本地的软件代理,它代表你安全地对外提供数据服务,确保在共享数据价值的同时,牢牢守住数据的所有权和控制权。它是实现“数据可用不可见”这一理想的关键技术部件。一个生动的比喻:银行的金库和接待员想象一下,你的数据就是藏在银行金库里的黄金和钞票。金库(你的内部数据库): 绝对安全,外人绝对不能进。接待员(连接器): 坐在银行大厅里,负责与客户打交道。客户向接待员提出请求:“我想取1000元。

u014716614的博客 2272

C++中的IO流

在C语言中,如果想要将一个整形变量的数据转化为字符串格式,如何去做?◉ 使用itoa()函数◉ 使用sprintf()函数但是两个函数在转化时,都得需要先给出保存结果的空间,那空间要给多大呢,就不太好界定, 而且转化格式不匹配时,可能还会得到错误的结果甚至程序崩溃。return 0;在C++中,可以使用stringstream类对象来避开此问题。在程序中如果想要使用stringstream,必须要包含头文件。

2202_75331338的博客 1367

MATLAB下pdf文件操作读取示例

当遇到一些需要大量数据的项目,数据的读取与储存显得尤为重要。怎样把数据从其他格式的文件中读取,并运用到程序中是很多时候我们要解决的问题。对于平常的.txt,和.xlsx文件,MATLAB有对应的函数帮助读取,但是遇到pdf文件时MATLAB很难读取内容。本文以一个操作实例提供了一个从pdf文件中读取数据的方法。

UESTC 五高考3模拟的博客 6558

鸿蒙录屏推流应用完整解决方案

本文介绍了鸿蒙录屏推流应用的完整解决方案。项目采用分层架构设计,包含录屏、编码、推流等功能模块,要求实现4小时稳定运行且延迟小于3秒。技术实现包括:1) 通过config.json配置应用权限和功能;2) 使用ScreenRecorderManager类管理录屏服务,实现视频采集、音频录制和编码参数配置;3) 核心功能包含初始化录屏器、开始/停止录屏等操作。该方案充分利用鸿蒙系统的多媒体API,实现了高性能的屏幕录制与实时推流功能。

huanghm88的专栏 291

C++ IO流详解:标准IO、文件IO与字符串IO实战

本文全面介绍C++中的IO流机制,包括标准IO流(控制台输入输出)、文件IO流(文件读写操作)和字符串IO流(内存数据格式化与解析)。重点讲解IO流类体系结构、状态标志管理、格式控制技巧以及实际应用场景。通过示例代码演示了整数/浮点数格式化输出、文件打开模式选择、字符串流数据解析等核心操作,帮助开发者掌握C++中高效灵活的IO处理方法。文章还强调了错误处理与缓冲区机制,为处理配置文件读写、数据序列化等实际问题提供解决方案。

今天比昨天更努力一点! 9934

【ODX介绍】-5-用于Flash刷写的ODX-F文件概述

用于Flash刷写的ODX-F文件概述

「汽车电子助手」的博客 2531

C++学习进阶:IO流

流(Stream)是计算机编程中用来处理输入/输出(I/O)操作的一种抽象概念。在编程中,流可以被视为数据的连续序列,这些数据从数据源(如文件、内存缓冲区、网络套接字等)流向数据接收者(如另一个程序、设备或内存中的数据结构)。IO流(Input/Output Streams)是标准库提供的一种用于处理输入和输出操作的机制。这些流封装了数据的读写过程,使得开发者可以更方便地处理文件、控制台、内存和网络中的数据。输入流(Input Streams):用于从数据源读取数据。例如,是所有输入流的基类,

weixin_73234157的博客 910

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C++:IO流

本篇讲解了C++IO流相关的内容

一名还在努力学习技术的程序员的博客 1030

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C++: IO流

文件 I/O 流在 C++ 中用于实现文件的读取和写入操作。它的主要组成部分包括文件流对象、文件打开和关闭、读取和写入文件数据、文件位置指针、文件状态检查以及错误处理。通过 ifstream、ofstream 和 fstream 对象,可以实现对文件的读取、写入和读写操作。

decade777555的博客 817

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Cpp::IO流(37)

芜湖,要结束喽!其实,“流” 的概念我们之前就有过了解,现在我们再来回顾一下“流” 即是流动的意思,是物质从一处向另一处流动的过程,是对一种有序连续且具有方向性的数据( 其单位可以是bit,byte,packet )的抽象描述而 C++流 是指信息从外部输入设备(如键盘)向计算机内部(如内存)输入和从内存向外部输出设备(显示器)输出的过程。这种输入输出的过程被形象的比喻为 “流”有序连续、具有方向性为了实现这种流动,C++定义了 I/O标准类库 ,这些每个类都称为流 / 流类,用以完成某方面的功能。

tan180°的博客 1109

C++:IO流

C++ IO流

2301_80418172的博客 1374

[C++]:IO流

C++IO 流全面解析!从基础概念到标准输入输出、文件操作与字符串流,深入理解其特性与应用,让数据在程序中流畅穿梭,为你的编程增添强大助力。

Bettysweetyaaa的博客 1168

C++:关于IO流

在C++中,额外增加了许多IO的特殊机制,这些机制都在头文件中。C++是在C语言基础上改进的语言,要兼容C语言的绝大部分内容,自然包括C语言本身的IO机制。对于标准输入而言,C++使用、,而C语言使用、。它们的功能相同,挑选一个使用即可,但是免不了会有用户两个版本交替使用,此时就可能带来同步问题。因此C++中没有自己的缓冲区,而是与共用缓冲区,这样就算混用两者,也不会造成输出错误。但是正因为兼容了,就要去做很多额外的工作,那么的效率就会下降,为此,C++也提供了接口用于处理C/C++之间的同步问题。默认,也

m0_61088872的博客 1149

C++数据的输入输出秘境:IO流

C++的输入输出都依靠IO流实现,本章为C++最后一章,后续如有遗漏将会继续补充

Zero_VPN的博客 1687

C++修炼:IO流

本文介绍了C++ IO流的相关知识,主要包括:1. C++ IO库通过继承体系实现,支持标准IO流、文件IO流和字符串IO流;2. IO流状态管理,包括goodbit、eofbit、failbit和badbit四种状态,以及如何恢复错误状态;3. 输出缓冲区的管理机制和触发刷新的五种情况;4. 标准IO流的使用方法;5. 文件IO流的分类(ofstream、ifstream、fstream)和多种文件打开方式;6. 字符串IO流的使用方法

但凡的博客 1475

【C++】:IO流

bad

m0_66182473的博客 897

39.C++进阶:C++的IO流|标准IO流|文件IO流|stringstream

本文摘要: C/C++输入输出机制对比分析。C语言通过scanf/printf实现基本I/O操作,依赖缓冲区管理,但存在数据类型匹配和空格处理等限制。C++采用面向对象的流式I/O,构建了以ios为基类的完整类体系,提供cin/cout等全局流对象,支持运算符重载实现自定义类型I/O。文件操作方面,C++通过ifstream/ofstream类实现文本和二进制文件读写,相比C语言更具类型安全性和扩展性。特别分析了istream到bool的类型转换机制,以及在线OJ中的循环输入处理技巧。通过Date类示例展示

ChoSeitaku的博客 664

[C++] : 谈谈IO流

谈谈C++中的IO流

jerryhe_com的博客 786
上一篇: 网络对战五子棋(来一起PK鸭)
下一篇: C++:二叉搜索树的特点以及简易实现
ETalien_
博客等级 码龄8年 154粉丝 199原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值