您的位置:首页 > 编程语言 > C语言/C++

C++primer plus第六版课后编程练习答案6.9

2015-11-26 16:17 477 查看
#include<iostream>
#include<cctype>
#include<cstdlib>//support for exit(),atoi()
#include<string>
#include<fstream>//文件I/O
#include<sstream>//stringstream转换各种数据格式

using namespace std;
struct donation{
<span style="white-space:pre">	</span>string name;
<span style="white-space:pre">	</span>double money;
};
void main()//从文件中读出捐款人
{
ifstream fin;
fin.open("1.txt");//打开文件
if(!fin.is_open())
{
cout<<"Could not open the file."<<endl;
cout<<"Program terminating."<<endl;
exit(EXIT_FAILURE);
}
int n,i;
int normal=0,special=0;//normal:普通捐款人的数目,special:重要捐款人(捐款超过10000)的数目
string num,money;
getline(fin,num);
/*	n=atoi(num.c_str());//c中方法,将string转化为int
if(errno==ERANGE)
{
cout<<"num可能由于过大或过小而不能完全存储"<<endl;
}
*/
stringstream ss;
ss<<num;
ss>>n;
//	cout<<n<<endl;
//	if(!ss.good())//判断数据转换有没有出错
//	{
//		cout<<"wrong"<<endl;
//	}
donation *d=new donation
;
donation *s=new donation
;//重要捐款人
donation *q=new donation
;//普通捐款人
for(i=0;i<n;i++)
{
getline(fin,d[i].name);
getline(fin,money);
//		cout<<money<<endl;
//	ss.str("");//清空字符串
ss.clear();//清空结束的标志eof,和内容
ss<<money;
ss>>d[i].money;
//		cout<<d[i].money<<endl;
//		if(!ss.good())
//		{
//			cout<<"wrong"<<endl;
//		}
if(d[i].money<10000)
{
q[normal]=d[i];
normal++;
}
else
{
s[special]=d[i];
special++;
}
}
//	cout<<normal<<endl
//		<<special<<endl;

cout<<"重要捐款人"<<endl;
if(0==special)
cout<<"none"<<endl;
else
{
for(i=0;i<special;i++)
cout<<s[i].name<<endl;
}

cout<<"普通捐款人"<<endl;
if(0==normal)
cout<<"none"<<endl;
else
{
for(i=0;i<normal;i++)
cout<<q[i].name<<endl;
}

delete [] d;//释放堆空间
delete [] s;
delete [] q;
fin.close();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: