需要stdio头
freopen属于输入输出流的重定向,一般我们默认的输入流是在黑黑的控制台,但是我们也可以选择从一个txt文本中读取信息,这和我们键入控制台是一样的,相当于把txt的内容拷贝到控制台
参数
/*
param filePath : 文件路径(string)
param mode : 模式 r=读 w=写(string)
param stream : 重定向到那个流 stdin or stdout
*/
freopen(filePath, mode, stream);
读取txt
现在有一txt文件
执行以下代码,相当于在控制台输入
3
2 5 8
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, x, sum=0;
freopen("C:/Users/用户名/Desktop/TXT.txt", "r", stdin);
cin>>n;
for(int i=0; i<n; i++) {cin>>x; sum+=x;}
cout<<sum<<endl;
return 0;
}
写入txt
现有两txt文件
执行以下代码,从TXT读取输入的数据,将输出的数据写入到TXT2,此时我们的cout不会再输出在控制台上,而是输出在TXT2中
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, x, sum=0;
freopen("C:/Users/用户名/Desktop/TXT.txt", "r", stdin);
freopen("C:/Users/用户名/Desktop/TXT2.txt", "w", stdout);
cin>>n;
for(int i=0; i<n; i++) {cin>>x; sum+=x;}
cout<<sum<<endl;
return 0;
}
读取,写入同一个文件
值得注意的是,一定要在读取完所有的数据之后,再把输出流重定向到文件中,而且这个操作会覆盖文件里面的值,也就是删除所有的,再输入进去
如果指定的输出流文件不存在,那么会帮你创建一个新的txt文件
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, x, sum=0;
freopen("C:/Users/用户名/Desktop/TXT.txt", "r", stdin);
cin>>n;
for(int i=0; i<n; i++) {cin>>x; sum+=x;}
freopen("C:/Users/用户名/Desktop/TXT.txt", "w", stdout);
cout<<sum<<endl;
return 0;
}
before
after