C++:文件及输入输出流

I/O 流,流类库

输入流:与输入设备(如键盘)相联系的流

输出流:与输出设备(如显示器)相联系的流

输入/输出流: 与输入输出设备(如磁盘)相联系的流

流类:C++中预先定义了一组类,用于处理输入/输出

流类库:C++中所有的流类组成的集合

streambuf 类(底层)

派生类

1. filebuf 类:使用文件来保存缓冲区的字符序列

2. strstreambuf 类:在内存中进行提取和插入操作的缓冲区管理

3. conbuf 类:提供控制光标、设置颜色、定义活动窗口、清屏、清行等功能

ios 类 (高层)

直接派生类

1. 输入流:istream

2. 输出流:ostream

3. 文件流:fstreambase

4. 串流:strstreambase

键盘输入与屏幕输出

一般的输入/输出

数据传输方法:

1. 使用在标准输入/输出头文件 stdio.h 中声明的库函数

2. 使用标准命名空间 std 中的输入输出流类文件 iostream 中定义的流对象 cin 和 cout

3. 使用 << 和 >> 

#include <iostream>
#include <string>using namespace std;const int size = 80;int main()
{char buffer[size],buffer2[size];char buffer3[size];string str1,str2;cout << "Enter a sentence: ";cin >> buffer;cout << "buffer with cin: " << buffer << endl;cin.get(buffer2,size);cout << "buffer2 with cin.get: " << buffer2 << endl;cout << "Enter a sentence: ";cin.getline(buffer3,size);cout << "buffer3 with cin.getline: " << buffer3 << endl;cout << "Enter strings: ";cin >> str1 ;cout << "str1 with cin: " << str1 << endl;getline(cin,str2);cout << "str2 with getline: " << str2 << endl;return 0;
}

格式化输入/输出

#include <iostream>
using namespace std;int main() 
{cout.setf(ios::showpos);    //符号显示cout.setf(ios::scientific); //科学计数法cout << 123 << " " << 123.3 << endl;cout.unsetf(ios::showpos);   //符号不显示cout << 123 << " " << 123.3 << endl;return 0;
}
#include <iostream>
#include <iomanip>
using namespace std;int main() 
{int i=6879;int j=1234;int k=-10;cout<<setw(6)<<i<<j<<k<<endl;cout<<setw(6)<<i<<setw(6)<<j<<setw(6)<<k<<endl;return 0;
}

自定义控制符函数

#include <iostream>
#include <iomanip>
using namespace std;ostream &setup(ostream &stream)
{stream.setf(ios::left);stream << setw(10)<<setfill('$');return stream;
}int main() 
{cout << 10 << "Hello" << endl;cout << setup << 10 << "Hello" << endl;cout << setup << 10 << 10 << "Hello" << endl;return 0;
}

重载提取运算符和插入运算符 

#include <iostream>
using namespace std;class CDate
{
private:int Date_Year;int Date_Month;int Date_Day;
public:friend istream & operator >> (istream &input, CDate &Date);friend ostream & operator << (ostream &output, const CDate &Date);
};istream & operator >> (istream &input, CDate &Date)
{input >> Date.Date_Year >> Date.Date_Month >> Date.Date_Day;return input;
}ostream & operator << (ostream &output, const CDate &Date)
{output << Date.Date_Year << "-" << Date.Date_Month << "-" << Date.Date_Day;return output;
}int main() 
{CDate d;cin >> d;cout << d << endl;return 0;
}

文件的输入/输出

cpp 读写文件操作:

1. 包含头文件 fstream

2. 定义一个文件流对象

3. 建立(或打开文件)

4. 进行读/写操作

5. 关闭文件

文件的打开与关闭

两种方式:

1. 先定义文件流对象,然后调用成员函数 open 打开文件

2. 在定义文件流对象时,直接利用其构造函数打开文件

get() 和 put() 一般成对使用,既可用于读写文本文件,也可用于读写二进制文件,每次读写一字节

#include <fstream>
#include <iostream>
#include <string>
using namespace std;void CreateFile(string filename);
void ReadFile(string filename);int main() {CreateFile("test.txt");ReadFile("test.txt");return 0;
}void CreateFile(string filename) {ofstream file(filename);if (file.is_open()) {file << "Hello, world!" << endl;file.close();}else {cout << "Error: Could not open file." << endl;}
}void ReadFile(string filename) {ifstream file(filename);if (file.is_open()) {string line;while (getline(file, line)) {cout << line << endl;}file.close();}else {cout << "Error: Could not open file." << endl;}
}

read()  和 write() 一般成对使用,既可用于读写文本文件,也可用于读写二进制文件,每次读写一个数据块

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

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

相关文章

学习java第一百零八天

Spring的AOP理解&#xff1a; OOP面向对象&#xff0c;允许开发者定义纵向的关系&#xff0c;但并不适用于定义横向的关系&#xff0c;会导致大量代码的重复&#xff0c;而不利于各个模块的重用。 AOP&#xff0c;一般称为面向切面&#xff0c;作为面向对象的一种补充&#xff…

重复文件清理软件怎么用?分享3个删除重复文件的方法!

删除重复文件能够为电脑腾出很大的存储空间&#xff0c;不信&#xff1f;可以试试看哦&#xff01; 电脑使用久了&#xff0c;都会积累大量的文件&#xff0c;这其中难免会出现重复的文件&#xff0c;这些重复文件没有任何作用&#xff0c;而且会占用着电脑的空间&#xff0c;…

不需要new关键字创建实例?jQuery是如何做到的

这篇文章是jQuery源码专栏的开篇文章了&#xff0c;有人会问为什么都2024年了&#xff0c; 还要研究一个已经过时的框架呢&#xff0c;其实&#xff0c;jQuery对比vue和react这种响应式框架&#xff0c;其在使用上算是过时的&#xff0c;毕竟直接操作DOM远不如操作虚拟DOM来的方…

Python 深入学习局部函数和闭包函数

目录 局部函数与闭包函数的关联 变量捕获与状态保留 应用场景的交集与差异 闭包的本质 局部函数示例 闭包函数示例 局部函数和闭包函数之间存在着密切的联系&#xff0c;同时也有一些本质的区别。 局部函数与闭包函数的关联 局部函数&#xff08;Nested Function&#…

Python hashlib 模块

Python 的 hashlib 模块提供了对哈希算法的支持&#xff0c;可以用于计算数据的哈希值&#xff0c;包括常见的哈希算法如 MD5、SHA-1、SHA-256 等。让我来详细介绍一下&#xff0c;并举例说明。 首先&#xff0c;你可以使用以下方式导入 hashlib 模块&#xff1a; python impo…

(八)ReactHooks使用规则

ReactHooks使用规则 只能在组件中或者其他自定义Hook函数中使用只能在组件的顶层调用&#xff0c;不能嵌套在if、for、其他函数中

Windows 11 安装hp 1020 plus 打印机驱动 (Ubuntu 20.04.3 LTS 部署cups局域网共享打印服务器)

1 win11 下载HP laserjet 1020 plus驱动,可以官网下载哦 链接下载 2 手动添加hp laserjet 1020驱动: 控制面板-->查看设备和打印机-->打印机和扫描仪-->添加设备-->我需要的打印机不在列表中-->通过手动添加-->按名称选择共享打印机 如果找不到&#xff0…

vue在script中使用过滤器

在 Vue.js 中&#xff0c;过滤器&#xff08;filters&#xff09;主要是用于在模板中格式化文本&#xff0c;它们并不是为了在 <script> 部分或 Vue 组件的 JavaScript 逻辑中使用的。但是&#xff0c;如果你希望在 Vue 组件的 <script> 部分执行类似过滤器的功能&…

Android应用保活实践

} override fun onBind(intent: Intent): IBinder? { return mBilder } override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int { //播放无声音乐 if (mediaPlayer null) { mediaPlayer MediaPlayer.create(this, R.raw.novioce) //声音设置为0 me…

【DevOps】Kubernetes中Pod的CPU和内存资源管理详解

目录 1. 基本概念 1.1 资源请求&#xff08;Requests&#xff09;和限制&#xff08;Limits&#xff09; 1.2 CPU资源 1.3 内存资源 1.4 QoS类 2. 设置方法 3. 资源设置的影响 3.1 CPU设置的影响 3.2 内存设置的影响 3.3 对调度的影响 3.4 对扩展的影响 4. 最佳实践…

Spring MVC拦截器、文件上传和全局异常处理

目录 1.拦截器1.1.什么是拦截器&#xff1f;1.2 拦截器的API1.3 拦截器的执行顺序1.5 自定义拦截器1.5 登录拦截器案例 2.文件上传2.1 添加依赖2.2 配置文件上传解析器2.3 编写控制器2.4 编写jsp页面2.5 注意事项 3.全局异常处理器3.1 异常处理思路3.2 创建异常处理器3.3 编写异…

FlinkCDC sink paimon 暂不支持exactly-once写入,而通过 幂等写

幂等写入&#xff1a; 一个幂等操作无论执行多少次都会返回同样的结果。例如&#xff0c;重复的向hashmap中插入同样的key-value对就是幂等操作&#xff0c;因为头一次插入操作之后所有的插入操作都不会改变这个hashmap&#xff0c;因为hashmap已经包含这个key-value对了。另一…

vuejs3用gsap实现动画

效果 gsap官网地址&#xff1a; https://gsap.com/ 安装gsap npm i gsap 创建Gsap.vue文件 <script setup> import {reactive, watch} from "vue"; import gsap from "gsap"; const props defineProps({value:{type:Number,default:0} }) cons…

FFmpeg编译4

CPUx86-64 TOOLCHAIN N D K / t o o l c h a i n s / x 8 6 6 4 − 4.9 / p r e b u i l t / l i n u x − x 8 6 6 4 S Y S R O O T NDK/toolchains/x86_64-4.9/prebuilt/linux-x86_64 SYSROOT NDK/toolchains/x866​4−4.9/prebuilt/linux−x866​4SYSROOTNDK/platforms/and…

Java | Leetcode Java题解之第174题地下城游戏

题目&#xff1a; 题解&#xff1a; class Solution {public int calculateMinimumHP(int[][] dungeon) {int n dungeon.length, m dungeon[0].length;int[][] dp new int[n 1][m 1];for (int i 0; i < n; i) {Arrays.fill(dp[i], Integer.MAX_VALUE);}dp[n][m - 1] …

QML 实现上浮后消失的提示框

基本效果&#xff1a;上浮逐渐显示&#xff0c;短暂停留后上浮逐渐消失 为了能同时显示多个提示框&#xff0c;一是需要动态创建每个弹框 Item&#xff0c;二是弹出位置问题&#xff0c;如果是底部为基准位置就把已经弹出的往上移动。 效果展示&#xff1a; 主要实现代码&…

46、基于自组织映射神经网络的鸢尾花聚类(matlab)

1、自组织映射神经网络的鸢尾花聚类的原理及流程 自组织映射神经网络&#xff08;Self-Organizing Map, SOM&#xff09;是一种用于聚类和数据可视化的人工神经网络模型。在鸢尾花聚类中&#xff0c;SOM 可以用来将鸢尾花数据集分成不同的类别&#xff0c;同时保留数据间的拓扑…

动态规划——买卖股票的最佳时机含冷冻期

1、题目链接 leetcode 309. 买卖股票的最佳时机含冷冻期 2、题目分析 该题有我们可以定义三种状态&#xff0c;买入状态&#xff0c;可交易状态 &#xff0c;冷冻期状态 我们可以建立一个n*3的二维数组来表示这三种状态&#xff1a; 根据这个图可以看出&#xff0c; 可以从…

Linux换源

文章目录 前言具体步骤国内源推荐 前言 在 Linux 发行版中更换软件源&#xff08;repository&#xff09;是一个常见的操作&#xff0c;用于加速软件的下载和更新。以下是更换软件源的详细步骤&#xff1a; 具体步骤 备份原始源列表&#xff1a; 在更改任何内容之前&#xff…

sqlalchemy给表新增注释和额外信息

sqlalchemy给表新增注释和额外信息 sqlalchemy使用__table_args__给表新增注释和额外信息,示例: class UserModel(CommonModel):__tablename__ = user # 表名称__table_args__ = {"mysql_engine": "MyISAM", # 设置数据表引擎,默认使用innodb引擎&quo…