C++基础——输入输出(文件)

一、标准输入输出流

C++ 的输入输出是程序与用户或外部设备(如文件、网络等)之间交换信息的过程。

C++ 提供了丰富的标准库来支持这种交互,主要通过流的概念来实现。

:抽象概念,表示一连串的数据(字节或字符),数据按先进先出的顺序传输。

        输入流是从外部源到程序的数据传输,而输出流则是从程序到外部目标的数据传输。

C++输入/输出类的层次结构

解释:

ios_base:这是IO流的基本信息类,它定义了所有IO流共有的属性和行为。

ios:这是IO流的基类,它继承自ios_base。ios类提供了通用的输入和输出功能。

istream:这是一个通用的输入类,它继承自ios。

                cin对象是istream的一个实例,用于从标准输入(通常是键盘)读取数据。

ostream:这是一个通用的输出类,它继承自ios。

                cout和cerr对象都是ostream的实例,分别用于向标准输出(通常是屏幕)和错误                          输出写入数据。

iostream:这是一个通用的输入/输出类,它同时继承自istream和ostream。

                iostream类可以进行双向的数据传输。

ifstream:这是一个文件输入类,它继承自istream。ifstream类用于从文件中读取数据。

ofstream:这是一个文件输出类,它继承自ostream。ofstream类用于向文件中写入数据。

fstream:这是一个文件输入/输出类,它同时继承自ifstream和ofstream。

                fstream类可以对文件进行双向的数据传输。

输入输出cin/cout和提取符和操作符:

在C++中,cin 和 cout 是两个常用的I/O流对象,它们分别代表标准输入流和标准输出流。

在C++中,>> 和 << 是两个常用的流操作符,它们分别用于从输入流中读取数据和向输出流写入数据。

通常两者结合

#include<iostream>int main()
{int a;std::cin >> a;std::cout << a;return 0;
}//输入:1
//输出结果是:1

get与getline函数:

get和getline函数都有两个用法 :

std::cin.get和std::get,std::cin.getline和std::getline

std::cin.get和std::cin.getline是在std::istream 类的成员函数

std::get和std::getline是标准库里的函数

两者的区别:

处理换行符:getline函数在读取完一行后会自动丢弃换行符,而get函数(特别是带有分隔符的版本)会保留分隔符(通常是换行符)在输入队列中。

目标容器:get通常用于填充字符数组,而std::getline的全局版本可以直接读入std::string。

自动终止:getline在达到指定长度或遇到分隔符时会自动停止并处理字符串结束标志,而使用get时可能需要手动处理字符串的结束。

get函数的使用:

std::get

std::get一般为访问一些容器中的元素:

举例子:

访问元组里的元素

std::tuple<int, std::string> my(10, "Test");
int i = std::get<0>(my); 
// 访问第一个元素,类型为 int
std::string s = std::get<1>(my); 
// 访问第二个元素,类型为 std::string
// 这里,get 是模板函数,它的模板参数是元素的位置(从0开始),返回对应类型引用。
std::cin.get

1.std::cin.gin()

这个版本没有参数,它从输入流中读取下一个字符,包括空格和换行符。

如果到达文件尾或者遇到错误,它会返回 EOF(通常定义为 -1),否则返回读取字符的 ASCII 值。

功能:主要是读入缓存区里的换行符

2.std::cin.get(a)

a是要输入数据的变量名

3.std::cin.get(a,b)

a是要输入数据的变量名,b是要读入的字符数会读入n-1个字符,最后一个是'/0'

4.std::cin.get(a,b,c)

a是要输入数据的变量名,b是要读入的字符数会读入n-1个字符,最后一个是'/0',c是要遇到哪个字符就提前结束输入

getline函数的使用:

std::getline

针对于string容器、

有两种常用的用法:

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

从输入流is读取字符直到遇到换行符(\n),并将读取的内容(不包括换行符)存入str中。

#include<iostream>
#include<string>
int main()
{std::string a;std::getline(std::cin, a);std::cout << a;return 0;
}

如果之前str已有内容,这些内容会被新读取的字符串覆盖。

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

同上,但允许用户指定分隔符delim。

当遇到此分隔符时停止读取,并将读取的内容(不包括分隔符)存入str。

#include<iostream>
#include<string>
int main()
{std::string a;std::getline(std::cin, a,'a');std::cout << a;return 0;
}
std::cin.getline

istream& getline(char* s, streamsize n);

从输入流读取最多n个字符(不包括终止的空字符'\0')到字符数组s中。

如果在读取n-1个字符之前遇到文件结束或换行符,则停止读取,并在s末尾添加'\0'。

istream& getline(char* s, streamsize n, char delim);

类似于上一个版本,但读取会在遇到delim字符或读取n-1个字符后停止,并在s末尾添加'\0'。


二、文件输入输出流:

程序运行时,产生的数据都属于临时数据,程序一旦运行结束就会被释放,通过文件可以将数据持久化。

C++中对文件进行操作需要包含头文件<fstream>

文件类型:

文本文件-文件以文本的ASCII码形式存储在计算机中

二进制文件-文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂他们

操作文件的三大类:

ofstream:写操作 ifstream:读操作 fstream:读写操作

ios::in 

为输入(读)而打开文件
ios::out为输出(写)而打开文件
ios::ate 初始位置:文件尾
ios::app所有输出附加在文件末尾
ios::trunc 如果文件已存在则先清空该文件,若文件不存在则创建文件
ios::binary二进制方式打开,不做字符转换(别用string 有大bug)

这些表示符可以 用    |   进行组合 

写文件:

简单的写一个文件: 

#include<iostream>
#include<fstream>
int main()
{std::ofstream is;is.open("test.txt",std::ios::out);is << "aaaa";is.close();return 0;
}

 如果不指定文件路径,默认和你项目的文件路径一样

运行结果: 

 实际产生的文件:

也可以使用write进行写文件

流对象.write(指向要写入数据的缓冲区的指针,字节数)

 读文件:

#include<iostream>
#include<fstream>
int main()
{std::ifstream os;os.open("test.txt",std::ios::in);//第一种/*char put[10] = { 0 };while (os>>buf){std::cout << put << endl;}*///第二种/*char buf[10] = { 0 };while (ifs.getline(put,sizeof(put))){std::cout << put << endl;}*///第三种/*#include<string>string put;while (getline(os,buf)){std::cout << put << endl;}*///第四种-不推荐char c;while ((c = os.get()) != EOF){std::cout << c;}os.close();return 0;
}

结果是:

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

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

相关文章

C++语言·string类

1. 为什么有string类 C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数(strcpy,strcat)&#xff0c;但是这些库函数与字符串是分离开的&#xff0c;不太符合OOP(Object Oriented Programming面向对…

Java 语法 (杂七杂八的知识)

面向对象三大特性 封装, 多态, 继承 基本数据类型 一字节 (Byte) 占八位 (bit) JDK, JRE, JVM JDK (Java Development Kit) : Java 开发工具包, 包括了 JRE, 编译器 javac, 和调试工具 Jconsole, jstack 等 JRE (Java Runtime Environment) : Java 运行时环境, 包括了 JVM , …

【牛客】Tokitsukaze and Average of Substring

原题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 前缀和。 开一个int类型的前缀和数组pre[30][N]&#xff08;pre[i][j]表示某字符转成的数字 i 在一段区间的前缀个数。因为字母表有‘a’~z…

【使用ChatGPT的API之前】OpenAI API提供的可用模型

文章目录 一. ChatGPT基本概念二. OpenAI API提供的可用模型1. InstructGPT2. ChatGPT3. GPT-4 三. 在OpenAI Playground中使用GPT模型-ing 在使用GPT-4和ChatGPT的API集成到Python应用程序之前&#xff0c;我们先了解ChatGPT的基本概念&#xff0c;与OpenAI API提供的可用模型…

云原生Kubernetes: K8S 1.29版本 部署Harbor

目录 一、实验 1.环境 2.Linux 部署docker compose 3.证书秘钥配置 4.K8S 1.29版本 部署Harbor 5.K8S 1.29版本 使用Harbor 二、问题 1.docker 登录harbor失败 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 主机架构版本IP备注masterK8S master节点1.2…

java报错:使用mybatis plus查询一个只返回一条数据的sql,却报错返回了1000多条

今天遇到一个问题 系统线上问题&#xff0c;经常出现这样的问题&#xff0c;刚重启系统时不报错了&#xff0c;可是运行一段时间又会出现。sql已经写了limit 1&#xff0c;mybatis的debug日志也返回total为1&#xff0c;可是却报错返回了1805条数据 乍一看&#xff0c;感觉太不…

基于Spring Boot的公司OA系统设计与实现

基于Spring Boot的银行OA系统设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 用户登录界面&#xff0c;在银行OA系统运行后&#x…

基于springboot+jsp+Mysql的商务安全邮箱邮件收发

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

STM32单片机实战开发笔记-PWM波输出频率及占空比配置【wulianjishu666】

单片机物联网开发资料&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1XzodQuML7CqZ4ZKinDGKkg?pwdbgep 提取码&#xff1a;bgep PWM模块测试 功能描述 脉冲宽度调制模式&#xff1a; PWM边沿对齐模式&#xff1a; 向上计数配置 当TIMX_CR1寄存器中的DIR为低的时…

基于Python的LSTM网络实现单特征预测回归任务(TensorFlow)

单特征&#xff1a;数据集中只包含2列&#xff0c;时间列价格列&#xff0c;仅利用价格来预测价格 目录 一、数据集 二、任务目标 三、代码实现 1、从本地路径中读取数据文件 2、数据归一化 3、创建配置类&#xff0c;将LSTM的各个超参数声明为变量&#xff0c;便于后续…

php开发-个人博客项目文件操作类编辑器上传下载删除读写

特地整了个软件 这就舒服了 文件操作类的开发 文件的任意上传&#xff0c;下载&#xff0c;读取&#xff0c;删除操作等 1.文件上传类-任意文件上传 分为三类 1&#xff0c;代码自主编写的 先写一个html的上传表单&#xff0c;这个网上搜索就有 标题看着不够明确啊&#…

【牛客】【模板】差分

原题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 差分模板。 b[0]a[0]; b[1]a[1]-a[0]; b[2]a[2]-a[1]; ...... b[n-1]a[n-1]-a[n-2]; b[n]a[n]-a[n-1]; 差分标记&#xff1a;b[l]k,b…

计算机网络chapter1——家庭作业

文章目录 复习题1.1节&#xff08;1&#xff09; “主机”和“端系统”之间有何不同&#xff1f;列举几种不同类型的端系统。web服务器是一种端系统吗&#xff1f;&#xff08;2&#xff09;协议一词常用来用来描述外交关系&#xff0c;维基百科是如何描述外交关系的&#xff1…

基于Springboot的校园悬赏任务平台(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的校园悬赏任务平台&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

Codigger:Web应用让开发者拥有更高效的开发之旅

在当今软件开发领域&#xff0c;Web应用以其跨平台、易访问和实时更新的特性&#xff0c;逐渐成为了主流的开发方向。从开发者的视角来看&#xff0c;Codigger借助B/S&#xff08;浏览器/服务器&#xff09;架构和云计算技术&#xff0c;为开发者带来了诸多便利和优势。这些优势…

【负载均衡式在线OJ项目day1】项目结构

一.功能 查看题目列表&#xff0c;在线编程&#xff0c;判题功能&#xff0c;即leetcode的部分功能 二.宏观结构 整个项目是BS模式&#xff0c;客户端是浏览器&#xff0c;和用户交互并向服务器发起请求。 服务端从功能上来说分为两个模块&#xff0c;第一个是OJServer&…

C++ 多态(一)

一、多态定义 同一种操作作用于不同的对象时&#xff0c;可以产生不同的行为。在面向对象编程中&#xff0c;多态性是指通过继承和重写实现的&#xff0c;同一个方法在不同的子类中可以表现出不同的行为。多态性可以提高代码的灵活性和可扩展性&#xff0c;使得程序更易于维护…

盘点企业信息防泄密软件对比|揭秘企业信息防泄密软件好用榜

在当今信息化社会&#xff0c;企业信息防泄密软件的需求日益凸显。这些软件不仅关乎企业的核心竞争力&#xff0c;更直接关系到企业的生死存亡。本文将对市面上几款主流的企业信息防泄密软件进行深入对比分析&#xff0c;以期为企业提供有益的参考。 一、企业信息防泄密软件好…

987: 输出用先序遍历创建的二叉树是否为完全二叉树的判定结果

解法&#xff1a; 一棵二叉树是完全二叉树的条件是&#xff1a; 对于任意一个结点&#xff0c;如果它有右子树而没有左子树&#xff0c;则这棵树不是完全二叉树。 如果一个结点有左子树但是没有右子树&#xff0c;则这个结点之后的所有结点都必须是叶子结点。 如果满足以上条…

docker学习笔记(三)搭建NFS服务实验

目录 什么是NFS 简单架构​编辑 一.搭建nfs服务器 二.新建共享目录和网页文件 三.设置共享目录 四&#xff1a;创建使用nfs共享目录的卷 五&#xff1a;创建容器使用nfs-web-1卷 六&#xff1a;测试访问 七&#xff1a;是否同步测试 什么是NFS NFS 服务器&#xff1a;ne…