保存数据——C++文件输入输出_fstream类

一、代码展示

玩C++游戏的时候可能会有点尴尬,就是玩到所有装备满级时退出,再打开还得重玩,此时天空一声巨响,fstream类闪亮登场,于是我们就可以用文件输入输出了(怎么这么突然……)

以文件版A+B Problem为例:

原版A+B Problem题目)原版代码:

#include <bits/stdc++.h>
using namespace std;
#define LL long long 
int a,b,c;
int main() {
    cin>>a>>b;
    c=a+b;
    cout<<c;
	return 0;
}

不会有人不会吧? 不会请去重开

文件版代码:

#include <fstream>
using namespace std;
#define LL long long

int main(){
	ifstream in;
	in.open("in.txt");
	int a=0,b=0;
	in >> a >> b;
	ofstream out;
	out.open("out.txt");
	out << a + b;
	in.close();
	out.close();
	return 0;
}

虽然感觉fopen和freopen好用一点

二、分析代码

看到ifstream和ofstream了没?这些是文件输入输出需要的类(class),这两个类包含在#include <fstream>里。其中,我个人认为(也不知道是不是)ifstream是i(input)+fstream的组合,ofstream是o(output)+fstream的组合。ifstream的定义方式和普通定义差不多,定义方式为ifstream 变量名;ofstream同理,定义方式为ofstream 变量名;。

那么文件版A+B Problem之中的in.open("in.txt");和out.open("out.txt");是什么意思呢?

首先在编程的时候可能会出现这个:

一般在这个黑色框里的都是此类的成员函数,open也在其中,得出open是ifstream类、ofstream类的成员函数;open是打开的意思,.txt又是文本文档的后缀名,得出结论:

open()函数是用来让ifstream和ofstream定义的对象与存储数据或用来存储数据的文本文档关联的。

此外,在使用open函数关联后,就可以把定义的ifstream类对象当成cin、ofstream类对象当成cout使用啦!例如有如下定义:

ifstream InFile;
ofstream OutFile;

对它实行open关联:

InFile.open("input.txt");
OutFile.open("output.txt");

然后,假设input.txt中有数据8和9,你想把这两个数据读入到a和b中,就可以:

InFile >> a >> b;

同理,如果a=8,b=9,你想把这两个数据写入到output.txt中,就可以:

OutFile << a << " " << b << '\n';

最后我们来说close()。因为和open反义,所以close的作用可得出:

close()是用来与文本文档解除关联的。假设本来InFile与input.txt关联,使用InFile.close()解除关联后,即可让InFile与其他文本文档关联。

上述方法的用途:先将一局的数据写入一个文本文档,因为程序重新运行时文本文档是不会重置的,所以只要第二次再将文本文档的数据读入就好啦!

注意,如果文本文档里已有数据,再次将数据写入后,将会覆盖原数据。如果输出时本来不存在与ofstream关联的对象,那么程序将会创造一个以ofstream关联的对象为名称的文本文档。

多余地说一句,有一个is_open()函数,会检测文本文档有没有正常打开,打开返回true,否则返回false。

三、补充

这种方法有一个缺陷,就是如果在你使用InFile >> a >> b;的时候,如果在此代码保存的文件夹里不存在input.txt,那么将不会读入。所以,在你运行我的代码的时候,你将会发现在此代码保存的文件夹里有一个output.txt,且里面的数据是0。

解决办法:在第一次运行时在此代码保存的文件夹里创建input.txt并输入数据。这样,程序就可以正常运行了!

文章都看完了,给个赞呗!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值