C++的读入和输出在文件和操作窗口间的切换【freopen和ifstream、ofstream】

在调试过程中,经常需要使用文件读入和文件输入,有时还需在文件和窗口间切换读入和输出。

以下总结freopen和ifstrem的用法。

freopen语句

文件读入语句为:

	freopen("abc.in","r",stdin);
    ....
	fclose(stdin);

上述语句 freopen("abc.in","r",stdin); 的作用是把标准输入流重定向到一个名为abc.in的文件中,这样在用scanf或是用cin输入时便不会从标准输入流读取数据(也就是不会从C++操作窗口键盘读入数据),而是从abc.in文件中获取输入。

fclose(stdin); 的作用是关闭这个读入文件,也就是abc.in这个文件,这里是从文件的安全性考虑的,用完文件要关闭。
如果想结束文件读入,而改用C++的操作窗口键盘输入数据,使用 fclose(stdin);语句是不对的。因为fclose(stdin);作用则是关闭这个读入文件(也就是文件从可读可写,变成了只可读),所以之后的读入流还是会从这个文件中读入(这里会感觉关了和没关一样,与下边的fclose(stdout);有很大的对比性)。
要想回到C++窗口输入,需要语句:freopen("CON", "r", stdin);  con的意思是操作平台,这样修改回标准输入流后,就可以实现窗口的读入了。

文件输出语句为:

	freopen("abc.out","w",stdout);	
    .....
    fclose(stdout);

freopen("abc.out","w",stdout); 的作用是把标准输出流重定向到一个名为abc.out的文件中,这样在用printf或是用cout输出时便不会输出到C++操作窗口,而是输出至文件。

fclose(stdout); 的作用是关闭输出文件abc.out。这里关闭了输出文件,那么其可写性也就被关闭了(文件不能再被修改),关闭之后再使用cout等输出,既不会被写入abc.out,也不会输出至C++窗口。
若想使得输出至C++操作窗口,需要语句:freopen("CON", "w", stdout); 

注意:

1.文件名称abc.in和abc.out可随意自定义。

2.文件读入和文件输出可以分别单独使用,也可一起用。

3.使用文件读入时要先在源程序根目录下创建读入文件(如abc.in),并输入数据,保存;使用文件输出不用创建输出文件,系统会自动创建。

示例:

#include<iostream>  
using namespace std;
int a[100];
int main(){
	freopen("abc.in","r",stdin);
	freopen("abc.out","w",stdout);
	int n;
	cin>>n;
	for(int i=1; i<=n; i++) 
		cin>>a[i];
	for(int i=n; i>=1; i--)
		cout<<a[i]<<" ";
	fclose(stdin);
	fclose(stdout);
	return 0;
}

 

ifstream和ofstream

用法:

#include<fstream>

	ifstream fin; //定义一个输入流
	fin.open("a.txt");  //打开a.txt文件
	ofstream fout;
	fout.open("b.txt");

首先要包含头文件fstream。
ifstream fin;  fin.open("a.txt");  两个语句的意思是新定义一个输入流,并且把这个输入流绑定到a.txt文件上,这样以后只要是使用fin的读入就会从a.txt文件中读取。
ofstream的用法基本一致。

ifstream和ofstream的好处是不修改标准输入输出流,在一个程序中,想用文件读入,那么就可以用自定义的输入流(如fin),想用键盘读入,就用标准输入流cin

示例:

#include<iostream>  
#include<fstream>
using namespace std;
int a[100];
int main(){
	ifstream fin; //定义一个输入流
	fin.open("a.txt");  //打开a.txt文件
	ofstream fout;
	fout.open("b.txt");
	int n;
	cin>>n;
	for(int i=1; i<=n; i++) 
		fin>>a[i];
	for(int i=n; i>=1; i--)
		fout<<a[i]<<" ";
	return 0;
}

n的读入用的是标准输入流,而a[i]的读入用自定义文件读入fin。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值