09笔记 IO操作

news2025/5/26 5:03:09

目录

一.向一个文本文件中写入数据:

 二.从一个文本文件中读取数据,并对读取的数据做简单处理。

 三.二进制文件的写入操作

 四.对二进制文件的读取操作

五. 举例

六.IO操作的简单应用(代码和举例都在更新和完善中)


一.向一个文本文件中写入数据:

#include <iostream>
#include <fstream>//两个类的结合
//fstream是ifstream和ofstream的结合
//既包括了输入操作也包括输出操作
using namespace std;

int main()
{
	int a[5];
	//ofstream outfile("d:\\桌面\\0209实验.txt", ios::out);
		//d:\\表示d盘根目录
		//ios::out如果文件不存在,会按照定义的名称创建文件。
		//如果原来存在文件,会清空;如果不存在,创建
	ofstream outfile("d:\\桌面\\0209实验.txt", ios::app);
	//以输出方式打开,数据追加到文件末尾
	if (!outfile)
	{
		cout << "open error" << endl;
		return 0;
	}
	else
	{
		cout << "请输入数据" << endl;
		for (int i = 0; i < 5; i++)
		{
			cin >> a[i];
			outfile << a[i] << " ";
		}
	}
	outfile.close();//关闭文件输出流
	return 0;
}

 编译器运行结果:(例如我们输入1 2 3 4 5)

桌面上会自动创建一个txt文件。

txt文件会因为这段程序,而被写入1 2 3 4 5 这组数据,效果如下:

 

 二.从一个文本文件中读取数据,并对读取的数据做简单处理。

#include <iostream>
#include <fstream>//两个类的结合
//fstream是ifstream和ofstream的结合
//既包括了输入操作也包括输出操作
using namespace std;

int main()
{
	int a[20];
	int maxs = -1, index = 0;
	ifstream infile("d:\\桌面\\0209shiyan.txt", ios::in);
	if (!infile)
	{
		cout << "oper error" << endl;
		return 0;
	}
	else
	{
		for (int i = 0; i < 5; i++)
		{
			infile >> a[i];
			cout << a[i] << " ";
			if (a[i] > maxs)
			{
				maxs = a[i];
				index = i;
			}
		}
		cout << endl << "maxs is " << maxs << endl;
		cout << "pos is " << index << endl;
	}
	return 0;
}

编译器运行结果:

 

因为是读取“一”中写入的数据而没有对0209shiyan.txt这个文本文件中的数据做任何修改,因此文本文件中的数据不变。

 三.二进制文件的写入操作

#include <iostream>
#include <fstream>
using namespace std;
struct student
{
	string name;
	int age;
	char sex;
};
int main()
{
	student stu[3] = { "li",18,'F',"wu",19,'M',"zhang",17,'F' };
	ofstream outfile("d:\\桌面\\0209shiyan.txt",ios::out, ios::binary);
	//ios::binary 是“将数据转变为二进制的形式储存在文件中”的意思
	if (!outfile)
	{
		cout << "open error" << endl;
		exit(0);//代表终止所有程序的意思,和return 0; 功能类似
	}
	else
	{
		for (int i = 0; i < 3; i++)
		{
			outfile.write((char*)(&stu[i]), sizeof(stu[i]));
		}
		//write函数:write函数第一个参数必须是char*指针类型的数据,
		//如果不是这个类型的数据,需要进行强制转换
		//第二个参数是写入数据的大小。
		outfile.close();
		//关闭文件有终止缓冲区运行的作用,文本文件用完之后就要写close函数。
	}
	return 0;
}

 因为程序没有任何实质性的编译器层面的输出,所以编译器显示为0输出。

 由于是二进制的形式储存,所以文本文件执行显示层面展示的是一堆乱码,并且每次查看都不太一样。

 四.对二进制文件的读取操作

#include <iostream>
#include <fstream>
using namespace std;
struct student
{
	string name;
	int age;
	char sex;
};
int main()
{
	student stu[3];
	ifstream infile("d:\\桌面\\0209shiyan.txt", ios::out, ios::binary);
	if (!infile)
	{
		cout << "open error" << endl;
		exit(0);
	}
	else
	{
		for (int i = 0; i < 3; i++)
		{
			//outfile.write((char*)(&stu[i]), sizeof(stu[i]));
			infile.read((char*)&stu[i], sizeof(stu[i]));
		}
		//read函数:与write函数参数格式要求相同。
		//第一个参数 要求必须是char*类型的,第二个参数是读取数据的大小。
		infile.close();//infile用完了,就要close它。
		//上述代码实现的功能是将二进制文件从文件中读取出来,并储存在了程序的数组之中。
		//将程序中的数组存储的内容输出,看看读入的数据是否正确?
		for (int i = 0; i < 3; i++)
		{
			cout << "NO." << i + 1 << endl;
			cout << "name:" << stu[i].name << endl;
			cout << "age:" << stu[i].age << endl;
			cout << "sex:" << stu[i].sex << endl;
		}
	}
	return 0;
}

 运行效果:

发现读取到的数据和“三”中给文本文件写入的数据完全一致

由于本程序只涉及到“读取”操作,因此没有对0209shiyan.txt中的内容做任何修改。

五. 举例

从编译器的运行框中输入一串字符串,挑出其中属于字母的字符,在编译器运行框中输出的同时,将输出结果也储存在一个文本文档中;读取该文本文档中的数据,并将所有小写字母都转化为大写字母,将运行结果储存在另一个文本文档中。

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
void save_to_file()
{
	ofstream outfile("d:\\桌面\\0209shiyan.txt", ios::out);
	//如果不指定位置,不同编译器存储txt文件的位置不同。
	if (!outfile)
	{
		cout << "open error" << endl;
		exit(0);
	}
	else
	{
		char a[1000];
		cin.getline(a, 1000, '\n');
		for (int i = 0; i < strlen(a); i++)
			if (a[i] >= 'a' && a[i] <= 'z' || a[i] >= 'A' && a[i] <= 'Z')
			{
				outfile.put(a[i]);
				//outfile.put函数:将一个参数携带的数据传入到文本文件中并储存
				cout << a[i] << " ";//同时将数据送达显示器
			}
		cout << endl;
		outfile.close();
	}
}
void get_from_file()
{
	ifstream infile("d:\\桌面\\0209shiyan.txt", ios::in);//从0209shiyan.txt中读入数据
	ofstream outfile("d:\\桌面\\0209shiyan1.txt", ios::out);//将结果的数据传出,写到0209shiyan1.txt中
	if (!infile||!outfile)
	{
		cout << "open error" << endl;
		exit(0);
	}
	else
	{
		char ch;
		while (infile.get(ch))
		{
			if (ch >= 'a' && ch <= 'z')
			{
				ch -= 32;//将小写字母转化为大写字母
				outfile.put(ch);//储存。
			}
		}
		infile.close();
		outfile.close();
	}
}
int main()
{
	save_to_file();
	get_from_file();
	return 0;
}

运行结果:

 

 文本文档中的效果:

程序使得计算机自主创建了一个文本文档,被我命名为0209shiyan1.txt。

在0209shiyan.txt中

效果是这样的:

 

在0209shiyan1.txt中,效果是这样的:

 

 

六.IO操作的简单应用(代码和举例都在更新和完善中)

        一.对《06笔记 输入输出流重载》中代码补充IO操作:

#include <iostream>
#include<fstream>
using namespace std;
class complex
{
private:
	double real,imag;
public:
	complex() { real = 0; imag = 0; }
	complex(double a, double b) { real = a; imag = b; }
	complex operator + (complex&);
	void showcomplex(){ cout << "(" << real << "," << imag << "i)" << endl; }
	//friend complex operator +(complex&, complex&);
	friend istream& operator>>(istream&, complex&);//输入流重载的声明
	friend ostream& operator<<(ostream&, complex&);//输出流重载的声明

};
inline complex complex::operator+(complex& a)
//函数的返回值类型 上一级::下一级 运算符(数据类型 变量名称)
{
	complex c;
	c.real = this->real + a.real;
	c.imag = this->imag + a.imag;
	return c;
}
//写法2
/*
complex operator + (complex& a, complex& b)
{
	complex c;
	c.real = a.real + b.real;
	c.imag = a.imag + b.imag;
	return c;
}
*/
//输入流重载
//istream 输入流 ostream 输出流
istream& operator >>(istream &input, complex& c)
{
	cout << "请分别输入一个复数的实部和虚部:" << endl;
	input >> c.real >> c.imag;
	return input;
}
//输出流重载
ostream& operator<<(ostream& output, complex& c)
{
	output << "(" << c.real << "," << c.imag << "i)" << endl;
	return output;
}

int main()
{
	
	ofstream outfile("d:\\桌面\\complex.txt", ios::out);
	ifstream infile("d:\\桌面\\zhengshu.txt", ios::in);
    //声明:只有ostream才可以自主创建新的文本文件,
    //istream不能,需要用户提前创建并命名,并事先写入数据
	complex a, b, c;
	infile>> a >> b;
	c = a + b;
	//infile.close();
	a.showcomplex();
	b.showcomplex();
	c.showcomplex();
	cout << c; 
	outfile << a << endl;
	outfile << b << endl;
	outfile << c << endl;
	infile.close();
	outfile.close();
	return 0;
}



 声明:

    //声明:只有ostream才可以自主创建新的文本文件,
    //istream不能,需要用户提前创建并命名,并事先写入数据

实现部分:

 由上述声明,笔者自行创建了一个文本文件叫做zhengshu.txt,写入数据 1 2 3 4

效果如下:

 

 现在对原代码进行编译,运行效果为:

 

 此时,文本文件complex.txt中的效果如下:

 

 

 

 

 

 

 

 

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

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

相关文章

软件测试工程师成神之路2023整理版

版本 更新日期 审核 备注 V0.3 2020-06-01 三丰 增加3大自动化 V1.0 2021-10-01 Nick 添加持续集成 V2.0 2023-01-31 三丰 完整性能版本 我看到迄今为止最完整的软件测试技术路线梳理 Python 编程语言 自动化之Python 编程语言 编程语言介绍/编程概念讲解/环…

大数据技术架构(组件)29——Spark:Memory Model(2)

2.1.8.5、Memory addressing以上小节介绍了spark对堆的划分&#xff0c;根据使用目的不同&#xff0c;对堆进行了区域划分,并说明了spark1.6之前和之后使用的两种不同内存模型管理以及之间的区别&#xff0c;那么这里继续逐步分析&#xff0c;说到内存管理&#xff0c;spark是如…

CTFshow菜狗杯-misc-wp(详解 脚本 过程 全)

首先感谢ctf平台和各位出题的大佬其次感谢各位读者&#xff0c;对我的支持( •̀ ω •́ )y 有什么问题和建议可以私聊我废话不多话开启你们的旅程吧 这个也是我这几天才看 一些见解和思路分享给你们希望你们在旅途中玩的开心&#xff0c;学的开心✌( •̀ ω •́ )y杂项签到…

opencv+python物体检测【03-模仿学习】

仿照练习&#xff1a;原文链接 步骤一&#xff1a;准备图片 正样本集&#xff1a;正样本集为包含“识别物体”的灰度图&#xff0c;一般大于等于2000张&#xff0c;尺寸不能太大&#xff0c;尺寸太大会导致训练时间过长。 负样本集&#xff1a;负样本集为不含“识别物体”的…

无公网IP环境快解析实现医美ERP外网访问

现阶段&#xff0c;借助医学手段让人们变美逐渐成为时尚&#xff0c;医美走进公众生活的步伐也在不停加快&#xff0c;整个医美行业总体处于蓬勃发展之势&#xff0c;因此医美行业ERP需求量也不断增加。医美管理软件系统涵盖HIS、进销存、CRM、CallCenter、经营报表等模块&…

【王道数据结构】第七章| 查找 | 树

目录 一、查找 1、查找概念 2、顺序查找 3、折半查找 4、分块查找 二、树 1、B树 2、B树的基本操作 3、B树 4、散列查找及其性能分析 5、散列查找及性能分析 一、查找 1、查找概念 查找&#xff1a;在数据集合中寻找满足某种条件的数据元素的过程称为查找。查找…

当ChatGPT遇到前端开发

目录 一、ChatGPT是什么&#xff1f; 二、怎么注册使用ChatGPT&#xff1f; 1、注册账号 2.完成 ChatGPT 手机号码验证 3、登录 ChatGPT 账号并开始使用 三、当ChatGPT遇到前端开发 四、深思总结 AIGC 作画带给人们的惊艳感觉还未散去&#xff0c;ChatGPT 又来刺激人类脆…

leetcode 困难 —— N 皇后, N皇后 II,八皇后(简单递归)

&#xff08;不知道为啥总是给这种简单的递归设为困难题&#xff0c;虽然优化部分很不错&#xff0c;但是题目太好过了&#xff09; 题目&#xff1a; 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个…

java 自定义json解析注解 复杂json解析 工具类

java 自定义json解析注解 复杂json解析 工具类 目录java 自定义json解析注解 复杂json解析 工具类1.背景2、需求-各式各样的json一、一星难度json【json对象中不分层】二、二星难度json【json对象中出现层级】三、三星难度json【json对象中存在数组】四、四星难度json【json对象…

【Selenium学习】Selenium 八大定位法

1.1 ID定位HTML Tag 的 id 属性值是唯一的&#xff0c;故不存在根据 id 定位多个元素的情况。下面以在百度首页搜索框输入文本“python”为例。搜索框的 id 属性值为“kw”&#xff0c;如图1.1所示&#xff1a;代码如下&#xff0c;“find_element_by_id”方法已废弃&#xff0…

基于nodejs+vue的健身房课程预约平台

本系统主要实现了首页、个人中心、用户管理、教练管理、会员卡管理、购买会员管理、课程类型管理、课程信息管理、课程购买管理、场地信息管理、场地预约管理、系统管理,用户&#xff1a;首页、个人中心、购买会员管理、课程购买管理、场地预约管理,教练&#xff1a;首页、个人…

睿创转债,声迅转债上市价格预测

睿创转债基本信息转债名称&#xff1a;睿创转债&#xff0c;评级&#xff1a;AA&#xff0c;发行规模&#xff1a;15.6469亿元。正股名称&#xff1a;睿创微纳&#xff0c;今日收盘价&#xff1a;47.45元&#xff0c;转股价格&#xff1a;40.09元。当前转股价值 转债面值 / 转…

树生成工具泛型接口 TreeNode

1、定义泛型接口 // 实现接口需要传入两个参数&#xff0c;第一个T 为节点中的id&#xff0c;第二个R 为节点&#xff0c;TreeNode。 public interface TreeNode<T, R extends TreeNode<T, R>> {/*** 获取节点id** return 树节点id*/T id();/*** 获取该节点的父节…

读书笔记//《数据分析:企业的贤内助》

数据分析师是个杂家——作者陈哲。 为什么写这本书&#xff1f; 懂得再多知识却不会用&#xff0c;原因是缺少通往思路、方法和技能的两条路径——项目流程和项目应用&#xff08;案例&#xff09; —————————— 数据分析师的晋升空间 &#xff08;见第2章&#xff0…

NLP模型检查英语语法错误

当NLP模型产生了语法错误&#xff0c;怎么办&#xff1f;比如&#xff0c;He wants that you send him an email.没关系&#xff0c;现在可以像小时候的英语老师&#xff0c;改作文一样简单。只要装上一个专门纠正语法错误的库就可以&#xff0c;还是毫秒钟就可揪出来的那种。这…

【shell】awk、sed、sort是什么?怎么用?

目录 一、AWK 干什么用的&#xff1f; 使用起来有什么条件&#xff1f; 怎么使用&#xff1f; 二、sed 功能&#xff1f; sed怎样读取数据&#xff1f; 怎样调用sed &#xff1f; 三、sort 功能是什么&#xff1f; 命令有哪些&#xff1f; 本文只讲解了一些简略的知…

“千年之恋”注册页面制作

“千年之恋”注册页面制作一、实验名称&#xff1a;二、实验日期&#xff1a;三、实验目的&#xff1a;四、实验内容&#xff1a;五、实验步骤&#xff1a;六、实验结果&#xff1a;七、源程序&#xff1a;八、心得体会&#xff1a;一、实验名称&#xff1a; “千年之恋”注册…

算法导论—SAT、NP、NPC、NP-Hard问题

算法导论—SAT、NP、NP-Hard、NPC问题SAT 问题基本定义问题复杂性P、NP、NP-Hard、NP-Complete&#xff08;NPC&#xff09;证明NP-Hard关系图NP问题的概念约化的定义NPC问题NP-Hard问题SAT 问题基本定义 SAT 问题 (Boolean satisfiability problem, 布尔可满足性问题,SAT): 给…

C++之完美转发、移动语义(forward、move函数)

完美转发1. 在函数模板中&#xff0c;可以将自己的参数“完美”地转发给其它函数。所谓完美&#xff0c;即不仅能准确地转发参数的值&#xff0c;还能保证被转发参数的左、右值属性不变。2. C11标准引入了右值引用和移动语义&#xff0c;所以&#xff0c;能否实现完美转发&…

「敏捷架构」敏捷架构:规模化敏捷开发的策略

与流行的看法相反&#xff0c;架构是敏捷软件开发工作的一个重要方面&#xff0c;就像传统的工作一样&#xff0c;并且是扩展敏捷方法以满足现代组织的现实需求的关键部分。但是&#xff0c;敏捷专家的架构方式与传统主义者的方式略有不同。本文讨论以下问题&#xff1a; 迈向敏…