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

来源:互联网 发布:吕中 奚美娟 知乎 编辑:程序博客网 时间:2024/05/19 13:14
//思路:在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();  //关闭文件}

0 0