当前位置: 首页 > news >正文

C++ I/O操作---输入输出

本文主要介绍C++ I/O操作中的输入输出流。

目录

1 输入输出

2 输入输出流分类

3 C++中的输入输出流

4 iostream

5 std::ofstream

6 std::fstream

7 std::getline


1 输入输出

        C++的输入输出是数据在不同设备之间的传输,即在硬盘、内存和外设之间的传输。 

        数据如水流一样在各个设备之间传输,因此称为输入输出流。     

        输入操作:指数据传外设(一般是显示器)传入内存,或者从硬盘读取到内存,称为输入流,输入操作就是将外设数据或者硬盘数据转换成输入流,输入流在内存中存储。        

        输出操作:指数据从内存输出到外设(一般是显示器),或者输出保存到文件存储在硬盘中,此时的数据称为输出流,输出流在内存中,将输出流输出到外设或者硬盘的操作叫输出操作。

2 输入输出流分类

        根据I/O操作对象的不同,将I/O操作分为三类:

        (1)标准I/O——以标准输入、输出设备为操作对象

        (2)文件I/O——以磁盘文件为操作对象

        (3)字符串I/O——以内存中指定的空间(通常为字符数组)为操作对象

3 C++中的输入输出流

  1. istream(输入流):用于从文件、字符串或其他数据源读取数据的类。常用的成员函数有>>(插入运算符重载)和read()
  2. ostream(输出流):用于向文件、字符串或其他数据目标写入数据的类。常用的成员函数有<<(插入运算符重载)和write()
  3. ifstream(输入文件流):继承自istream,用于从文件中读取数据的类。常用成员函数有open()close()is_open()等。
  4. ofstream(输出文件流):继承自ostream,用于向文件中写入数据的类。常用成员函数有open()close()is_open()等。
  5. stringstream(字符串流):继承自istreamostream,用于在内存中读写字符串的类。常用成员函数有str()clear()seekg()等。

istream 和 ostream 类都在 <iostream>头文件中,ifstream和ofstream都在fstream。

4 iostream

iostream是C++标准库中的一个头文件,它包含了用于输入输出操作的类和函数。在C++程序中,我们使用iostream来处理文本、二进制数据以及控制台输入输出。

以下是一些常用的iostream类和函数:

  1. cin:用于从标准输入(通常是键盘)读取数据。
  2. cout:用于向标准输出(通常是屏幕)写入数据。
  3. cerr:用于向标准错误输出(通常是屏幕)写入错误信息。
  4. endl:用于插入换行符并刷新缓冲区。
  5. flush:用于清空输出缓冲区,但不插入换行符。
  6. getline(cin, str):从标准输入读取一行文本并将其存储到字符串变量str中。
  7. getline(cin, str, delimiter):从标准输入读取一行文本,直到遇到指定的分隔符,并将其存储到字符串变量str中。
  8. putchar(ch):将字符ch写入标准输出。
  9. puts(str):将字符串str写入标准输出,并在末尾添加换行符。
  10. scanf:从标准输入读取格式化的数据。
  11. printf:向标准输出写入格式化的数据。

以下是一个简单的示例,演示了如何使用iostream进行输入输出操作:

#include <iostream>
#include <string>int main() {std::string name;int age;// 从标准输入读取姓名和年龄std::cout << "请输入您的姓名:";std::cin >> name;std::cout << "请输入您的年龄:";std::cin >> age;// 将姓名和年龄输出到标准输出std::cout << "您的名字是:" << name << std::endl;std::cout << "您的年龄是:" << age << std::endl;return 0;
}

在上述代码中,我们使用了std::cout对象,它是std::ostream的一个实例。通过调用<<运算符,我们将字符串"Hello, World!"写入到屏幕上,并在末尾添加了一个换行符。std::cin是std::istream的一个实例,通过调用运算符>>,将外设输入的字符保存到输入流中,回车表示结束。

除了使用std::cout之外,你还可以使用其他std::ostream对象来将数据写入到文件中。例如,以下代码将字符串写入到名为"output.txt"的文件中:

#include <fstream>int main() {std::ofstream outputFile("output.txt");if (outputFile.is_open()) {outputFile << "This is some text." << std::endl;outputFile.close();} else {std::cerr << "Unable to open file for writing." << std::endl;}return 0;
}

在上述代码中,我们使用了std::ofstream对象来打开一个文件,并将字符串写入其中。如果文件成功打开,我们使用<<运算符将文本写入文件,并在末尾添加了一个换行符。最后,我们关闭了文件。

总之,std::ostream是一个非常重要的类,它提供了一种灵活的方式来将数据写入到各种输出设备中。通过使用std::ostream对象,你可以方便地实现各种输出操作。

5 std::ofstream

std::ofstream是C++标准库中的一个类,用于创建和写入文件。它属于<fstream>头文件。使用std::ofstream可以方便地将数据写入到文件中。

以下是一个简单的示例,演示如何使用std::ofstream创建一个文件并写入一些文本:

#include <iostream>
#include <fstream>int main() {// 创建一个名为"example.txt"的文件std::ofstream file("example.txt");// 检查文件是否成功打开if (!file.is_open()) {std::cerr << "无法打开文件" << std::endl;return 1;}// 向文件中写入文本file << "这是一个示例文本。" << std::endl;// 关闭文件file.close();std::cout << "文件已成功写入。" << std::endl;return 0;
}

在这个示例中,我们首先包含了<fstream>头文件,然后在main函数中创建了一个std::ofstream对象,并指定了要创建的文件名。接着,我们检查文件是否成功打开,如果成功打开,就向文件中写入一行文本。最后,我们关闭文件并输出一条消息表示文件已成功写入。

6 std::fstream

`std::fstream`是C++标准库中的一个类,用于文件的输入/输出操作。它提供了对文件的基本读写功能,包括打开、关闭、读取和写入等操作。使用`std::fstream`可以方便地处理文本文件和二进制文件。

以下是使用std::fstream进行文件读写操作的示例:

#include <iostream>
#include <fstream>
#include <string>int main() {// 打开一个文件用于写入std::ofstream outFile("example.txt");if (!outFile) {std::cerr << "无法打开文件" << std::endl;return 1;}// 写入一些文本到文件中outFile << "这是一段示例文本。" << std::endl;outFile << "使用std::fstream进行文件操作。" << std::endl;// 关闭文件outFile.close();// 打开一个文件用于读取std::ifstream inFile("example.txt");if (!inFile) {std::cerr << "无法打开文件" << std::endl;return 1;}// 从文件中读取文本并输出到控制台std::string line;while (std::getline(inFile, line)) {std::cout << line << std::endl;}// 关闭文件inFile.close();return 0;
}

这个示例中,我们首先使用std::ofstream创建一个名为example.txt的文件,并向其中写入一些文本。然后,我们使用std::ifstream打开同一个文件,并使用std::getline逐行读取文件内容,并将其输出到控制台。最后,我们关闭了两个文件流对象。

7 std::getline

std::getline是C++标准库中的一个函数,用于从输入流中读取一行文本。它的原型如下:

istream& getline(istream& is, string& str, char delim);

参数说明:

  • is:输入流对象,通常为std::cin或文件流对象。
  • str:存储读取到的文本的字符串对象。
  • delim:分隔符字符,默认为换行符('\n')。

返回值:

  • 返回引用到输入流对象的引用。

使用示例:

#include <iostream>
#include <string>int main() {std::string line;std::cout << "请输入一行文本:" << std::endl;std::getline(std::cin, line);std::cout << "你输入的文本是:" << line << std::endl;return 0;
}

相关文章:

C++ I/O操作---输入输出

本文主要介绍C I/O操作中的输入输出流。 目录 1 输入输出 2 输入输出流分类 3 C中的输入输出流 4 iostream 5 std::ofstream 6 std::fstream 7 std::getline 1 输入输出 C的输入输出是数据在不同设备之间的传输&#xff0c;即在硬盘、内存和外设之间的传输。 数据如水流…...

会 C# 应该怎么学习 C++?

会 C# 应该怎么学习 C&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「C的资料从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&a…...

CentOS 7 部署frp穿透内网

本文将介绍如何在CentOS 7.9上部署frp&#xff0c;并通过示例展示如何配置和测试内网穿透。 文章目录 &#xff08;1&#xff09;引言&#xff08;2&#xff09;准备工作&#xff08;4&#xff09;frps服务器端配置&#xff08;5&#xff09;frpc客户端配置&#xff08;6&#…...

高效网络爬虫:代理IP的应用与实践

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f91f; 代理 IP 推荐&#xff1a;&#x1f449;品易 HTTP 代理 IP &#x1f485; 想寻找共同学习交流的小伙伴&#xff0c…...

java设计模式-工厂方法模式

1.工厂方法(FactoryMethod)模式的定义 定义一个创建产品对象的工厂接口&#xff0c;将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。 2.工厂方法模式的主要优缺点 优点&#xff1a; 用户只需要知道具体工厂的名称…...

Python实验项目9 :网络爬虫与自动化

实验 1&#xff1a;爬取网页中的数据。 要求&#xff1a;使用 urllib 库和 requests 库分别爬取 http://www.sohu.com 首页的前 360 个字节的数据。 # 要求&#xff1a;使用 urllib 库和 requests 库分别爬取 http://www.sohu.com 首页的前 360 个字节的数据。 import urllib.r…...

实验三:指令调度和延迟分支

一、实验目的 加深对指令调度技术的理解。加深对延迟分支技术的理解。熟练掌握用指令调度技术来解决流水线中的数据冲突的方法。进一步理解指令调度技术对CPU性能的改进。进一步理解延迟分支技术对CPU性能的改进。 二、实验内容和步骤 首先要掌握MIPSsim模拟器的使用方法。见…...

【Oracle】PL/SQL语法、存储过程,触发器

一、Oracle数据类型 Orcle数据类型说明类比MySQL数据类型字符型CHAR固定长度的字符类型CHAR字符型VARCHAR2可变长度的字符类型VARCHAR字符型LONG大文本类型&#xff0c;最大2G数值型NUMBER数值类型&#xff0c;整数小数都可以&#xff0c;number(5)表示长度5的整数&#xff0c…...

2020年第九届数学建模国际赛小美赛C题亚马逊野火解题全过程文档及程序

2020年第九届数学建模国际赛小美赛 C题 亚马逊野火 原题再现&#xff1a; 野火是指发生在乡村或荒野地区的可燃植被中的任何不受控制的火灾。这样的环境过程对人类生活有着重大的影响。因此&#xff0c;对这一现象进行建模&#xff0c;特别是对其空间发生和扩展进行建模&…...

保姆级 Keras 实现 YOLO v3 三

保姆级 Keras 实现 YOLO v3 三 一. 分配 anchor box二. 正负样本匹配规则三. 为每一个 anchor box 打标签3.1 anchor box 长什么样?3.2 每一个 anchor box 标签需要填充的信息有哪些?3.3 ( Δ x , Δ y , Δ w , Δ h ) (\Delta x, \Delta y, \Delta w, \Delta h) (Δx,Δy,…...

HPM6750系列--第十篇 时钟系统

一、目的 上一篇中《HPM6750系列--第九篇 GPIO详解&#xff08;基本操作&#xff09;》我们讲解了HPM6750 GPIO相关内容&#xff0c;再进一步讲解其他外设功能之前&#xff0c;我们有必要先讲解一下时钟系统。 时钟可以说是微控制器系统中的心脏&#xff0c;外设必须依赖时钟才…...

【简单总结】中断类型号 中断向量 中断入口地址

通过中断类型号可以计算出中断向量的地址。 然后根据该地址可以在中断向量表中取出中断服务程序的入口地址&#xff08;中断向量&#xff09;。 而中断向量就是中断服务程序入口地址。 做个不严谨的图&#xff1a; 1&#xff1a;通过中断类型号找到中断向量 2&#xff1a;通…...

【Python百宝箱】从传感器到云端:深度解析Python在物联网中的多面应用

迈向智能未来&#xff1a;Python与物联网生态系统的完美融合 前言 随着物联网技术的不断发展&#xff0c;Python作为一种灵活且强大的编程语言&#xff0c;逐渐成为物联网开发的重要工具之一。本文将深入探讨物联网领域中常用的Python库和框架&#xff0c;涵盖了从轻量级通信…...

weston 1: 编译与运行傻瓜教程(补充)

系统kubuntu23.10 git clone https://gitlab.freedesktop.org/wayland/wayland.git 86588fbdebe7f6ac9363d98f524e4ae14bd4b019 meson build/ --prefix$WLD ninja -C build/ install git clone https://gitlab.freedesktop.org/wayland/wayland-protocols.git c4f559866f13…...

微服务保护--线程隔离(舱壁模式)

一、线程隔离的实现方式 线程隔离有两种方式实现&#xff1a; 线程池隔离 信号量隔离&#xff08;Sentinel默认采用&#xff09; 如图&#xff1a; 线程池隔离&#xff1a;给每个服务调用业务分配一个线程池&#xff0c;利用线程池本身实现隔离效果 信号量隔离&#xff1a…...

集群监控Zabbix和Prometheus

文章目录 一、Zabbix入门概述1、Zabbix概述2、Zabbix 基础架构3、Zabbix部署3.1 前提环境准备3.2 安装Zabbix3.3 配置Zabbix3.4 启动停止Zabbix 二、Zabbix的使用与集成1、Zabbix常用术语2、Zabbix实战2.1 创建Host2.2 创建监控项&#xff08;Items&#xff09;2.3 创建触发器&…...

K8S(七)—污点、容忍

目录 污点、容忍污点&#xff08;Taints&#xff09;&#xff1a;容忍&#xff08;Tolerations&#xff09;&#xff1a;如何一起使用污点和容忍&#xff1a;操作符&#xff08;Equal、Exists&#xff09;例子基于污点的驱逐基于节点状态添加污点 污点、容忍 官网地址&#xf…...

新视野大学英语1 词组 12.17

embarrassment和awkwardness的区别以及各自的组词。 "Embarrassment" 和 "awkwardness" 都可以用来描述一种尴尬或不舒服的感觉&#xff0c;但它们有一些微妙的区别。 "Embarrassment" 指的是由于尴尬、困窘或难堪的情况而产生的感觉。 这种感觉…...

springboot实战项目之使用AOP技术实现各种角色的鉴权功能

前言 项目开发需求&#xff0c;会员有不同的角色&#xff0c;不同的角色被赋予不同的权限&#xff0c;这就需要对会员的操作进行鉴权处理。 方案 采用aop&#xff0c;可实现满足这种需求&#xff0c;创建匿名类。对外提供接口的时候都会拦截&#xff0c;这种会有弊端&#x…...

华为配置基本QinQ示例

组网需求 如图1所示&#xff0c;网络中有两个企业&#xff0c;企业1有两个分支&#xff0c;企业2有两个分支。这两个企业的各办公地的企业网都分别和运营商网络中的SwitchA和SwitchB相连&#xff0c;且公网中存在其它厂商设备&#xff0c;其外层VLAN Tag的TPID值为0x9100。 现…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...