VC与DEV编译器关于ifstream的文本反复读取问题存在的不同

运行以下代码,进行文本的反复读取

#include<fstream> 
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
	ifstream infile;
	
	cout<<"**************1显示文本内容***************"<<endl;
	
	char c[256];
	infile.open("test.txt");
 	while(infile>>c)
 	{
 		cout<<c;
 		cout<<endl;
 	}
	infile.close();
	cout<<endl;

	cout<<"**************2显示正文(非注释)内容***************"<<endl;

	infile.open("test.txt");
	while(infile>>c)
 	{
 		if(c[0]!='*')
 		{
 			cout<<c;
 			cout<<endl;
 		}
 		
 	}
 	infile.close();
 	cout<<endl;	
 
 	cout<<"**************3显示被注释字符个数***************"<<endl;
 
 	infile.open("test.txt");
 	int num=0;
	while(infile>>c)
 	{
 		if(c[0]=='*')
 		{
 			num+=(strlen(c)-1)/2; 		
 		}
 		
 	}	
	cout<<"注释字符个数:"<<num;
 	infile.close();
}


DEV运行结果如图所示

 

 

然后用Microsoft Visual C++运行,结果如图所示

 

 

infile.is_open()进行测试,结果表明文本成功进行打开和关闭。

 

将代码第二段进行以下修改

	cout<<"**************2显示正文(非注释)内容***************"<<endl;
	ifstream infile1;
	infile1.open("test.txt");
	while(infile1>>c)
 	{
 		if(c[0]!='*')
 		{
 			cout<<c;
 			cout<<endl;
 		}
 		
 	}

 	infile1.close();
 	cout<<endl;	



结果发现第二段成功显示

 

于是猜想在vc中关闭流并不能改变流对象的内部状态。

修改代码

#include<fstream> 
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
	ifstream infile;
	
	cout<<"**************1显示文本内容***************"<<endl;
	
	char c[256];
	infile.open("test.txt");
 	while(infile>>c)
 	{
 		cout<<c;
 		cout<<endl;
 	}
	infile.clear();
	infile.close();
	cout<<endl;

	cout<<"**************2显示正文(非注释)内容***************"<<endl;

	infile.open("test.txt");
	while(infile>>c)
 	{
 		if(c[0]!='*')
 		{
 			cout<<c;
 			cout<<endl;
 		}
 		
 	}
	infile.clear();
 	infile.close();
 	cout<<endl;	
 
 	cout<<"**************3显示被注释字符个数***************"<<endl;
 
 	infile.open("test.txt");
 	int num=0;
	while(infile>>c)
 	{
 		if(c[0]=='*')
 		{
 			num+=(strlen(c)-1)/2; 		
 		}
 		
 	}	
	cout<<"注释字符个数:"<<num;
 	infile.close();
	cout<<endl;
}


在关闭之前加入语句infile.clear()清除流的状态

结果如图

 

结果成功显示

 

由此得到以下猜想,在vc中用同一个ifstream对文本进行反复读取时需要清除流状态,而DEV会自动清除。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bekote

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值