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

C++ Primer Plus第六版编程练习6.9解答

2015-03-09 23:40 423 查看
//思路:在main()中创建一个动态数组,通过函数调用的方式
//把文件中的内容读取进该动态数组,最后把捐款数是否超过
//10000的捐款人分开显示

#include <iostream>
#include <fstream>  //for ifstream
#include <cstdlib>  //for exit()

using namespace std;

struct member
{
char name[30];
double money;
};

void ReadFile(member *p);

ifstream inFile;  //定义为全局变量,因为在main()与ReadFile()函数中都有用到

int main()
{
inFile.open("member.txt");  //打开文件
if(!inFile.is_open())
{
cout<<"Could not open the file.\nProgram terminating.\n";
exit(EXIT_FAILURE);
}
int number;
inFile>>number;  //读取文件的第一项,即捐款人数
member *donor=new member[number];
inFile.get();
ReadFile(donor);
cout<<endl;
cout<<"Grand Patrons:\n";
int i,count=0;
member *q=donor;  //避免直接移动donor指针
for(i=0; i<number; i++,q++)
{
if(q->money>10000)
{
cout<<q->name<<": "<<q->money<<endl;
count++;
}
}
if(count==0)
cout<<"none\n";
q=donor;  //q重新指向第一个捐款人
cout<<endl;
cout<<"Partrons:\n";
for(i=0,count=0; i<number; i++,q++)
{
if(q->money<=10000)
{
cout<<q->name<<": "<<q->money<<endl;
count++;
}
}
if(count==0)
cout<<"none\n";
cout<<endl;
delete [] donor;  //释放用new创建的动态数组
cin.get();
cin.get();
return 0;
}

void ReadFile(member *p)
{
while(inFile.good())
{
inFile.getline(p->name,30);
inFile>>p->money;
inFile.get();  //读取换行符,一定不要漏了!!否则后面的数据会不匹配!!
p++;
}
if(inFile.eof())
cout<<"End of file reached.\n";
else if(inFile.fail())
cout<<"Input terminated by data mismatch.\n";
else
cout<<"Input terminated for unknown reason.\n";
inFile.close();  //关闭文件
}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: