C++ 输入输出流 知识点 例代码 总结

使用ostream,istream通用输入输出流时,通常情况下不用创建对象,可以直接使用,文本主要针对需要创建对象的文件输入输出流和字符串输入输出流

1.文件输出流ofstream

包含文件#include<fstream>

①open函数

用途:把该输出流与一个特定磁盘文件关联起来

语法

ofstream file("filename",打开模式);

ofstream file;

file.open("filename",打开模式);

打开模式

可以用按位或符号"|"组合多种模式

模式标志描述
ios_base::app追加模式。所有写入都追加到文件末尾。
ios_base::ate文件打开后定位到文件末尾。
ios_base::in打开文件用于读取。(可以避免删除文件现存内容)
ios_base::out打开文件用于写入。(默认)
ios_base::trunc

如果该文件已经存在,删除原有内容(默认)

ios_base::binary以二进制模式打开一个文件(默认文本模式)

②close函数

语法:

file.close()

③write函数

用途:把一个内存中的一块内容写到一个文件输出流中

格式:一个char指针(指向内存数据的其实地址)+ 字节数

// 文件输出流
#include<fstream>
using namespace std;
struct Date {
	int monday, day, year;
};
int main() {
	Date dt = { 6,10,92 };
	// 以二进制形式打开
	ofstream file("文件路径", ios_base::binary);
    // 显示转换该对象地址的类型
	file.write(reinterpret_cast<char*>(&dt), sizeof(dt));
	file.close();
	return 0;
}

④put函数

用途:把字符写到输出流中

cout.put('A');

相当于cout<<'A';

⑤seekp和tellp函数

用途:一个文件输出流保存一个内部指针指向下一次写数据的位置

seekp设置这个指针,tellp返回该文件位置指针值

2.字符串输出流ostringstream

包含文件#include<sstream>

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

template<class T>
// 该函数模板可以把任何支持<<插入符的对象转换为字符串
inline string tostring(const T& v) {
	ostringstream os;
	// 创造字符串输出流
	os << v;
	// 将变量v的值写入字符串流
	return os.str();
	// 返回输出流生成的字符串
}

int main() {
	string str1 = tostring(5);
	cout << str1 << endl;
	string str2 = tostring(1.2);
	cout << str2 << endl;
	string str3 = tostring("Hello World");
	cout << str3 << endl;
	return 0;
}

3.文件输入流ifstream

包含文件:#include<fstream>

构造输入流对象->用文件流对象从文件读取数据

①.open构造

ifstream myfile;

myfile.open("filename");

提取运算符>>不能读入空格

ios_base::in打开文件用于读取。(默认)
ios_base::binary以二进制模式打开一个文件(默认文本模式)

②close函数(与输出流一样)

用于手动关闭打开的文件

③get函数

与提取运算符>>很相像,但是可以读取空白字符

#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main() {
	char ch;
	while ((ch = cin.get()) != EOF)
		cout.put(ch);
	return 0;
}

④getline函数

非成员函数:包含#include<string>

//从键盘读入
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main() {
	string line;
	// 可以指定终止字符
	// (一定要有终止字符,不指定则默认换行符,终止字符不读入)
	// cin表示从键盘读入
	getline(cin, line,'t');
	cout << line << endl;
	return 0;
}
// 输入
people today
// 输出
people
//从文件读入
#include<iostream>
#include<fstream>
#include<string>
#include<Windows.h>
using namespace std;

int main() {
	//输出流输入文件内容
	string line;
	getline(cin, line);
	ofstream file1("filename",ios_base::out);
	file1.write(reinterpret_cast<char*>(&line), sizeof(line));
	file1 << line << endl;
	file1.close();

	//输入流读取文件内容
	 string line2;
	 ifstream file2("filename", ios_base::in);
	 getline(file2, line2);
	 cout << line2 << endl;
	return 0;
}

⑤read函数

// 文件输出流(一个结构体)
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
struct Date {
	int monday, day, year;
};
int main() {
	//读入
	Date dt = { 6,10,92 };
	// 以二进制形式打开
	ofstream file("filename",ios_base::binary);
	// 显示转换该对象地址的类型
	file.write(reinterpret_cast<char*>(&dt), sizeof(dt));
	file.close();

	//输出
    //以二进制打开
	ifstream is("filename", ios_base::in | ios_base::binary);
	if ( is ) {
		Date dt2;
		is.read(reinterpret_cast<char*>(&dt2), sizeof(dt2));
		cout << dt2.monday << " " << dt2.day << " " << dt2.year << endl;
	}
    //添加打开错误提示
	else {
		cout << "ERROR to open file" << endl;
	}
	return 0;
}

⑥seekg.tellg函数

// seekg.tellg
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main() {
	int values[] = { 3,7,0,5,4 };
	//建立一个输出流对象
	ofstream os("filename", ios_base::out | ios_base::binary);
	//写入内容
	os.write(reinterpret_cast<char*>(&values), sizeof(values));
	os.close();

	//建立一个输入流
	//输出指定位置
	ifstream is("filename", ios_base::in | ios_base::binary);
	if (is) {
		// 移动指针位置(移动三个到达第四个)
		is.seekg(3 * sizeof(int));
		int v;
		is.read(reinterpret_cast<char*>(&v), sizeof(int));
		cout << "The 4th integer in the file is: " << v << endl;
	}
	is.close();

	//建立输入流对象
	//找出其中0元素的位置
	is.open("filename", ios_base::in | ios_base::binary);
	//打开时默认seekg,tellg在最开始的位置
	if (is) {
		is.seekg(1*sizeof(int));
		//seekg为tellg的起始位置
		while (is) {
			//每一次移动的是一个int单位
			//tellg的返回值是streampos类型,seekg不是,seekg用于移动
			streampos here = is.tellg();
			cout << here << endl;
			int v2;
			is.read(reinterpret_cast<char*>(&v2), sizeof(v2));
			if (is && v2 == 0) {
				cout << "Postition " << here << " is 0 " << endl;
			}
			//不用手动移动tellg指针
		}
	}
	is.close();
	return 0;
}
//输出
/*
The 4th integer in the file is : 5
4
8
Postition 8 is 0
12
16
20
*/

4.字符串输入流

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

template<class T>
inline T fromString(const string& str) {
	istringstream is(str);
	// 创建字符串输入流
	T v;
	is >> v;
	// 从字符串输入流中读取变量v
	return v;
	// 返回变量v
}

int main() {
    // 显示转换类型
	int v1 = fromString<int>("5");
	cout << v1 << endl;
	double v2 = fromString<double>("1.2");
	cout << v2 << endl;
	string v3 = fromString<string>("Hello World");
	cout << v3 << endl;
	// 只能输出Hello(不能读取空格)
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【快讯】山东省第四批软件产业高质量发展重点项目开始申报

为加快落实《山东省高端软件“铸魂”工程实施方案&#xff08;2023-2025&#xff09;》&#xff0c;提高软件产业规模能级&#xff0c;提升关键软件技术创新和供给能力&#xff0c;塑强数字经济发展核心竞争力&#xff0c;确定开展第四批软件产业高质量发展重点项目申报工作&am…

深入探讨利用大型语言模型的力量的策略 (LLMs)

Note: 提示词工程是一门融合了艺术和科学的学科——它既是对技术的理解&#xff0c;也是对创造力和战略思维的理解。 本文为对LLMS策略分享内容学习后的整理&#xff0c;尝试抛开网上广泛讨论和记录的传统提示词工程技术&#xff0c;展示通过实验学到的新见解&#xff0c;以及…

树和二叉树的定义和基本术语

文章目录 前言一、树的定义二、树的基本术语三、二叉树的定义总结 前言 T_T此专栏用于记录数据结构及算法的&#xff08;痛苦&#xff09;学习历程&#xff0c;便于日后复习&#xff08;这种事情不要啊&#xff09;。所用教材为《数据结构 C语言版 第2版》严蔚敏。 一、树的定义…

React:Router-2. createBrowserRouter函数式

参考文档&#xff1a;ReactRouter官网 前边的文章 BrowserRouter组件式路由 提供了组件式路由的方式&#xff0c;在react-router6.4.0及以上版本&#xff0c;提供了 createBrowserRouter 函数式路由创建方式。 一、创建路由 1. 新建router.js文件&#xff0c;使用createBrow…

线程-进程-多线程 概述简介

01 线程简介 任务, 进程, 线程, 多线程 多任务 什么是多任务? 生活中的例子 第一个例子: 这张图片, 一个人边吃饭边玩手机, 同时做了两件任务,大家不要去当这样的低头族. 第二个例子: 第二张图, 开车的时候能打电话, 能打点滴 第三个例子: 第三个图, 说明了我们可以边…

HTML4(三):表单

文章目录 表单1. 基本结构2. 常用表单控件2.1 文本输入框2.2 密码输入框2.3 单选框2.4 复选框2.5 隐藏域2.6 提交按钮2.7 重置按钮2.8 普通按钮2.9 文本域2.10 下拉框2.11 示例 3. 禁用表单控件4. lable标签5. fieldset与legend标签6. 总结 表单 概念&#xff1a;一种包含交互…

vue3中如何更优雅的使用echarts?

echarts在vue或者react中使用存在的问题 每个图表需要从头到尾写地一遍完整的option配置&#xff0c;这样一来的话就会显得十分的冗余在同一个项目中&#xff0c;其实不难发现各类图表设计十分相似&#xff0c;甚至是相同&#xff0c;因此我们没必要一直做重复的工作&#xff…

基于Java+SpringBoot+Vue前后端分离教学资源共享平台系统

基于JavaSpringBootVue前后端分离教学资源共享平台系统 &#x1f345; 作者主页 网顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统…

标准参编征集|《第三方运维服务水平评价指南 工业废水处理设施》

目前&#xff0c;对于工业废水处理设施第三方运维服务的标准&#xff0c;国家和行业未曾出台有针对性的评价标准和规范&#xff0c;工业企业和工业园区对第三方运维服务的监督、考核、评价体系需要进一步补充和完善。 本标准的编制旨在帮助第三方运营单位从运营技术和管理举措…

Linux 第二十五章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

定制聚四氟乙烯砂芯抽滤装置

聚四氟乙烯布氏漏斗及其抽滤装置&#xff0c;是实验室中使用的一种仪器&#xff0c;用来使用真空或负压力抽吸进行过滤。 布氏漏斗形状为扁圆筒状&#xff0c;圆筒底面上开了很多小孔。下连一个狭长的筒状出口。 使用的时候&#xff0c;一般先在圆筒底面垫上滤纸&#xff0c;…

使用PyTorch实现L1, L2和Elastic Net正则化

在机器学习中&#xff0c;L1正则化、L2正则化和Elastic Net正则化是用来避免过拟合的技术&#xff0c;它们通过在损失函数中添加一个惩罚项来实现。 正则化介绍 L1 正则化&#xff08;Lasso回归&#xff09;&#xff1a; L1 正则化通过向损失函数添加参数的绝对值的和来实施惩…

JavaScript异步编程——07-Promise实例的方法【万字长文,感谢支持】

Promise 实例的方法简介 Promise 的 API 分为两种&#xff1a; Promise 实例的方法&#xff08;也称为&#xff1a;Promis的实例方法&#xff09; Promise 类的方法&#xff08;也称为&#xff1a;Promise的静态方法&#xff09; Promise 实例的方法&#xff1a;我们需要实…

Go 单元测试完全指南(一)- 基本测试流程

为什么写单元测试&#xff1f; 关于测试&#xff0c;有一张很经典的图&#xff0c;如下&#xff1a; 说明&#xff1a; 测试类型成本速度频率E2E 测试高慢低集成测试中中中单元测试低快高 也就是说&#xff0c;单元测试是最快、最便宜的测试方式。这不难理解&#xff0c;单元…

游戏工作室如何利用惯性动作捕捉技术制作动画?

随着动捕设备不断进步和游戏行业的发展&#xff0c;惯性动作捕捉技术在游戏开发领域逐渐普及。惯性动作捕捉技术&#xff0c;可以精准捕捉现实世界中的真人动作&#xff0c;并将其精准应用于虚拟角色上&#xff0c;使游戏中的角色动作可以呈现出更写实、逼真和沉浸感&#xff0…

【机器学习300问】80、指数加权平均数是什么?

严格讲指数加权平均数并不是机器学习中的专有知识&#xff0c;但他是诸多梯度下降优化算法的基础&#xff0c;所有我打算专门写一篇文章来介绍这种计算平均数的方法。还是老规矩&#xff0c;首先给大家来两个例子感受一下什么是指数加权平均数。 一、两个例子感性理解什么是指…

【Spring源码分析】ResolvableType

【Spring源码分析】ResolvableType 参考 目录 文章目录 【Spring源码分析】ResolvableType一、ParameterizedType 参数化类型&#xff0c;即泛型&#xff1b;例如&#xff1a;List< T>、Map< K,V>等带有参数化的对象;二、GenericArrayType—— 泛型数组 泛型数组…

竖排文字识别原理与实践操作方法

在当今数字化时代&#xff0c;OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;技术已经广泛应用于各个领域&#xff0c;特别是在文档处理方面&#xff0c;OCR软件能够帮助用户快速将纸质文档转化为可编辑的电子文档。然而&#xff0c;对于竖…

day-31 给植物浇水 II

思路 用两个变量start和end记录浇水位置&#xff0c;当前剩余水量大于需要浇水量时&#xff0c;进行浇水并前进一步&#xff0c;否则需要返回加水&#xff08;即重新灌满水罐的次数1&#xff09; 解题方法 用while&#xff08;start<end&#xff09;进行上述循环&#xff0…
最新文章