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++中的输入输出流
istream
(输入流):用于从文件、字符串或其他数据源读取数据的类。常用的成员函数有>>
(插入运算符重载)和read()
。ostream
(输出流):用于向文件、字符串或其他数据目标写入数据的类。常用的成员函数有<<
(插入运算符重载)和write()
。ifstream
(输入文件流):继承自istream
,用于从文件中读取数据的类。常用成员函数有open()
、close()
、is_open()
等。ofstream
(输出文件流):继承自ostream
,用于向文件中写入数据的类。常用成员函数有open()
、close()
、is_open()
等。stringstream
(字符串流):继承自istream
和ostream
,用于在内存中读写字符串的类。常用成员函数有str()
、clear()
、seekg()
等。
istream 和 ostream 类都在 <iostream>头文件中,ifstream和ofstream都在fstream。
4 iostream
iostream
是C++标准库中的一个头文件,它包含了用于输入输出操作的类和函数。在C++程序中,我们使用iostream
来处理文本、二进制数据以及控制台输入输出。
以下是一些常用的iostream
类和函数:
cin
:用于从标准输入(通常是键盘)读取数据。cout
:用于向标准输出(通常是屏幕)写入数据。cerr
:用于向标准错误输出(通常是屏幕)写入错误信息。endl
:用于插入换行符并刷新缓冲区。flush
:用于清空输出缓冲区,但不插入换行符。getline(cin, str)
:从标准输入读取一行文本并将其存储到字符串变量str
中。getline(cin, str, delimiter)
:从标准输入读取一行文本,直到遇到指定的分隔符,并将其存储到字符串变量str
中。putchar(ch)
:将字符ch
写入标准输出。puts(str)
:将字符串str
写入标准输出,并在末尾添加换行符。scanf
:从标准输入读取格式化的数据。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的输入输出是数据在不同设备之间的传输,即在硬盘、内存和外设之间的传输。 数据如水流…...
会 C# 应该怎么学习 C++?
会 C# 应该怎么学习 C? 在开始前我有一些资料,是我根据自己从业十年经验,熬夜搞了几个通宵,精心整理了一份「C的资料从专业入门到高级教程工具包」,点个关注,全部无偿共享给大家!!&a…...
CentOS 7 部署frp穿透内网
本文将介绍如何在CentOS 7.9上部署frp,并通过示例展示如何配置和测试内网穿透。 文章目录 (1)引言(2)准备工作(4)frps服务器端配置(5)frpc客户端配置(6&#…...
高效网络爬虫:代理IP的应用与实践
💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台🤟 代理 IP 推荐:👉品易 HTTP 代理 IP 💅 想寻找共同学习交流的小伙伴,…...
java设计模式-工厂方法模式
1.工厂方法(FactoryMethod)模式的定义 定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。 2.工厂方法模式的主要优缺点 优点: 用户只需要知道具体工厂的名称…...
Python实验项目9 :网络爬虫与自动化
实验 1:爬取网页中的数据。 要求:使用 urllib 库和 requests 库分别爬取 http://www.sohu.com 首页的前 360 个字节的数据。 # 要求:使用 urllib 库和 requests 库分别爬取 http://www.sohu.com 首页的前 360 个字节的数据。 import urllib.r…...
实验三:指令调度和延迟分支
一、实验目的 加深对指令调度技术的理解。加深对延迟分支技术的理解。熟练掌握用指令调度技术来解决流水线中的数据冲突的方法。进一步理解指令调度技术对CPU性能的改进。进一步理解延迟分支技术对CPU性能的改进。 二、实验内容和步骤 首先要掌握MIPSsim模拟器的使用方法。见…...
【Oracle】PL/SQL语法、存储过程,触发器
一、Oracle数据类型 Orcle数据类型说明类比MySQL数据类型字符型CHAR固定长度的字符类型CHAR字符型VARCHAR2可变长度的字符类型VARCHAR字符型LONG大文本类型,最大2G数值型NUMBER数值类型,整数小数都可以,number(5)表示长度5的整数,…...
2020年第九届数学建模国际赛小美赛C题亚马逊野火解题全过程文档及程序
2020年第九届数学建模国际赛小美赛 C题 亚马逊野火 原题再现: 野火是指发生在乡村或荒野地区的可燃植被中的任何不受控制的火灾。这样的环境过程对人类生活有着重大的影响。因此,对这一现象进行建模,特别是对其空间发生和扩展进行建模&…...
保姆级 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详解(基本操作)》我们讲解了HPM6750 GPIO相关内容,再进一步讲解其他外设功能之前,我们有必要先讲解一下时钟系统。 时钟可以说是微控制器系统中的心脏,外设必须依赖时钟才…...
【简单总结】中断类型号 中断向量 中断入口地址
通过中断类型号可以计算出中断向量的地址。 然后根据该地址可以在中断向量表中取出中断服务程序的入口地址(中断向量)。 而中断向量就是中断服务程序入口地址。 做个不严谨的图: 1:通过中断类型号找到中断向量 2:通…...
【Python百宝箱】从传感器到云端:深度解析Python在物联网中的多面应用
迈向智能未来:Python与物联网生态系统的完美融合 前言 随着物联网技术的不断发展,Python作为一种灵活且强大的编程语言,逐渐成为物联网开发的重要工具之一。本文将深入探讨物联网领域中常用的Python库和框架,涵盖了从轻量级通信…...
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…...
微服务保护--线程隔离(舱壁模式)
一、线程隔离的实现方式 线程隔离有两种方式实现: 线程池隔离 信号量隔离(Sentinel默认采用) 如图: 线程池隔离:给每个服务调用业务分配一个线程池,利用线程池本身实现隔离效果 信号量隔离:…...
集群监控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 创建监控项(Items)2.3 创建触发器&…...
K8S(七)—污点、容忍
目录 污点、容忍污点(Taints):容忍(Tolerations):如何一起使用污点和容忍:操作符(Equal、Exists)例子基于污点的驱逐基于节点状态添加污点 污点、容忍 官网地址…...
新视野大学英语1 词组 12.17
embarrassment和awkwardness的区别以及各自的组词。 "Embarrassment" 和 "awkwardness" 都可以用来描述一种尴尬或不舒服的感觉,但它们有一些微妙的区别。 "Embarrassment" 指的是由于尴尬、困窘或难堪的情况而产生的感觉。 这种感觉…...
springboot实战项目之使用AOP技术实现各种角色的鉴权功能
前言 项目开发需求,会员有不同的角色,不同的角色被赋予不同的权限,这就需要对会员的操作进行鉴权处理。 方案 采用aop,可实现满足这种需求,创建匿名类。对外提供接口的时候都会拦截,这种会有弊端&#x…...
华为配置基本QinQ示例
组网需求 如图1所示,网络中有两个企业,企业1有两个分支,企业2有两个分支。这两个企业的各办公地的企业网都分别和运营商网络中的SwitchA和SwitchB相连,且公网中存在其它厂商设备,其外层VLAN Tag的TPID值为0x9100。 现…...
【漏洞复现】系列集合
该篇文章仅供学习网络安全技术参考研究使用,请勿使用相关技术做违法操作 Apache Apache_HTTPD_未知后缀名解析Apache_HTTPD_换行解析(CVE-2017-15715)Apache_HTTPD_多后缀解析Apache_HTTP_2.4.50_路径穿越(CVE-2021-42013)Apache_HTTP_2.4.49_路径穿越(CVE-2021-41…...
TCP报文头(首部)详解
本篇文章基于 RFC 9293: Transmission Control Protocol (TCP) 对TCP报头进行讲解,部分内容会与旧版本有些许区别。 TCP协议传输的数据单元是报文段,一个报文段由TCP首部(报文头)和TCP数据两部分组成,其中TCP首部尤其重…...
第4章-第1节-初识Java的数组
1、数组 属于Java内存层面的一款容器(crud操作)。 概念: 内存中的一块存储区域(空间),内部有一组连续的小区域(元素空间),有数据类型的限定,可以存入一组匹配类型的数据,并且根据需要可以改动元素空间中的数据内…...
大数据技术10:Flink从入门到精通
导语:前期入门Flink时,可以直接编写通过idea编写Flink程序,然后直接运行main方法,无需搭建环境。我碰到许多初次接触Flink的同学,被各种环境搭建、提交作业、复杂概念给劝退了。前期最好的入门方式就是直接上手写代码&…...
IDEA中工具条中的debug按钮不能用了显示灰色
IDEA中工具条中的debug按钮不能用了显示灰色 1. 问题描述 IDEA上的DEBUG按钮突然变成了灰色: 2. 解决办法 一通搜索,终于找到解决办法 点击 File -> Project Structure如下图操作 3. 重启,解决 4. 参考 https://www.cnblogs.com…...
【MySQL内置函数】
目录: 前言一、日期函数获取日期获取时间获取时间戳在日期上增加时间在日期上减去时间计算两个日期相差多少天当前时间案例:留言板 二、字符串函数查看字符串字符集字符串连接查找字符串大小写转换子串提取字符串长度字符串替换字符串比较消除左右空格案…...
C++相关闲碎记录(14)
1、数值算法 (1)运算后产生结果accumulate() #include "algostuff.hpp"using namespace std;int main() {vector<int> coll;INSERT_ELEMENTS(coll, 1, 9);PRINT_ELEMENTS(coll);cout << "sum: " << accumulate(…...
18、vue3(十八):菜单权限,按钮权限,打包,发布nginx
目录 一、菜单权限和路由拆分 1.思路分析 2.深拷贝插件 3.代码实现 4.效果展示...
04 在Vue3中使用setup语法糖
概述 Starting from Vue 3.0, Vue introduces a new syntactic sugar setup attribute for the <script> tag. This attribute allows you to write code using Composition API (which we will discuss further in Chapter 5, The Composition API) in SFCs and shorte…...
vite+ts——user.ts——ts接口定义+axios请求的写法
import axios from axios; import qs from query-string; import {UserState} from /store/modules/user/types;export interface LoginData{username:string;password:string;grant_type?:string;scope?:string;client_id?:string;client_secret?:string;response_type?:…...
电子商务网站设计包括哪些内容/东莞seo建站如何推广
修改hosts 文件内容: 进入etc 文件夹,找到hosts 文件,把该文件复制出来,修改完里面的内容后,先把etc中的hosts 文件删除,然后在把修改后的文件脱机去 可能需要管理员的密码,你输入你的登陆密码就…...
做的网站.如何在局域网内访问/无锡百姓网推广
昨天开始接到用户提报,说是iprocess没有同步个人账号。这个简单,在我们本身的程序上跑一下就可以添加。所以很简单运行一下。com.staffware.sso.data.vException: SAL system error what?报错了?我晕,当时简单的认为&a…...
深圳最好的网站建设/如何在百度推广自己的产品
来源|新榜(ID:newrankcn)同样是在抖音里化妆、跳舞、才艺展示,甚至都是漂亮小哥哥小姐姐,但有人能拍出100W点赞爆款,有人只有5个,比如本人。虽然人类的本质是复读机,但你一定不甘心只…...
php如何做网站/seo排名大概多少钱
捡拾的过程中累加捡拾硬币,要求最后捡拾的硬币累加和是最大的。捡拾的过程中,相邻的两个硬币不能同时被捡拾。比如:有以下几个硬币值:[5, 1, 2, 10, 5, 2], 可以捡拾的方案有,(5, 2, 5) 或 (5, 10, 2)解题思路…...
东莞网站建设服务商/seo在线优化排名
开发前言 环境配置参考: Ubuntu20.04下ESP32环境搭建 VSCode开发配置(使用本地已经存在的配置) 搭建环境、编译烧写 VSCode运行 hello world 常用的插件命令: Show Examples Projects :查找例子 Build your project:编…...
佛山做网站建设公司/职业技能培训学校
昨晚与闺中密友聚餐,话题自然少不了女人世界的种种。不知怎么,话题就扯到了女人的头发上。从头发谈到染发又谈到染发剂,又从染发剂谈到经常染发有致癌的可能。一位朋友刚换了一种染发剂的颜色,浅棕色里掺杂着丝丝灰白,…...