初学C++,练习题编程无法运行。请高手帮忙看下程序!

做书上的练习题:第六章6.编写一个程序,记录捐助给“维护合法权利团体”的钱。该程序要求用户输入捐献者数目,然后要求用户输入每一个捐献者的姓名和款项。这些信息被储存在一个动... 做书上的练习题:第六章 6.编写一个程序,记录捐助给“维护合法权利团体”的钱。该程序要求用户输入捐献者数目,然后要求用户输入每一个捐献者的姓名和款项。这些信息被储存在一个动态分配的结构数组中。每个结构有两个成员:用来存储姓名的字符数组(或string对象)和用来存储款项的double成员。读取所有的数据后,程序将显示所有捐款超过10000的捐款者的姓名及其捐款数额。该列表前应包含一个标题,指出下面的捐款者是重要捐款人(Grand Patrons)。然后,程序将列出其他的捐款者,该列表要以Patrons开关。如果某种类别没有捐款者,则程序将打印单词“none”。该程序只显示这两种类别,而不进行排序。
编程如下:
// donation patrons.cpp : 定义控制台应用程序的入口点。

#include <iostream>
#include <string>
using namespace std;
struct patrons
{
double money;
string name[20];
}

int main()

{
int n,i;
int sign=0;
cout<<"请输入捐献者数目:"<<endl;
cin>>n;
patrons *n_patrons=new patrons[n];
for (i=0,i<n,i++)
{
cout<<"请输入第"<<i<<"名捐献者姓名:"<<endl;
cin.getline(n_patrons[i].name,20);
cout<<"请输入第"<<i<<"名捐献数额:"<<endl;
cin.get();
cin>>n_patrons[i].money;
}

while(n!=0)
{
if(n_patrons[i].money>=10000)
{
cout<<"Grand patrons:"<<endl;
cout<<n_patrons[i].name<<"捐款:"<<n_patrons[i].money<<endl;
i++;
}

else if(n_patrons[i].money<10000)
{
cout<<"Patrons:"<<endl;
cout<<n_patrons[i].name<<"捐款:"<<n_patrons[i].money<<endl;
i++;
}
}
cout<<"none"<<endl;

return 0;
}

请高手帮我看看 程序里有那几处错误,关于输入捐款者名字, 用cin.getline格式应该如何编写,试了好几种方法,都不行。
还有请教高手,初学C++应该如何练习编程,看了书上的内容总也记不住,有没有有效点的方法适合初学者一步一步学习的。
万分感谢!
展开
 我来答
陈宗权8d804
2013-07-01 · TA获得超过3766个赞
知道小有建树答主
回答量:1159
采纳率:0%
帮助的人:958万
展开全部
// donation patrons.cpp : 定义控制台应用程序的入口点。

#include <iostream>
#include <string>
using namespace std;
struct patrons
{
double money;
string name; //
};//

int main()
{
int n,i;
int sign;//=0;
cout<<"请输入捐献者数目:"<<endl;
cin>>n;
patrons *n_patrons=new patrons[n];
for (i=0,i<n,i++)
{
cout<<"请输入第"<<i<<"名捐献者姓名:"<<endl;
cin.ignore(100, '\n');//
getline(cin, n_patrons[i].name);//
cout<<"请输入第"<<i<<"名捐献数额:"<<endl;
//cin.get();
cin>>n_patrons[i].money;
}
cout << "Grand patrons:" << endl;//
sign=0;//
for(i=0;i<n;i++) //while(n!=0)
{
if(n_patrons[i].money>=10000)
{
//cout<<"Grand patrons:"<<endl;
cout<<n_patrons[i].name<<"捐款:"<<n_patrons[i].money<<endl;
sign++; //i++;
}
}//
if(sign==0) cout << "none" << endl;//
cout << "Patrons:" << endl;//
sign=0;//

for(i=0;i<n;i++)//

{//
if(n_patrons[i].money<10000)
{
//cout<<"Patrons:"<<endl;
cout<<n_patrons[i].name<<"捐款:"<<n_patrons[i].money<<endl;
sign++;//i++;
}
}
if(sign==0) cout<<"none"<<endl; //
delete[] n_patrons;//
return 0;
}
cooke1234
2013-07-01 · TA获得超过6861个赞
知道大有可为答主
回答量:4617
采纳率:72%
帮助的人:3590万
展开全部
  1. struct patrons { .... }中 大括号结束后,后面添加一个分号。

  2. struct patrons中的string name[20];改称string name;

  3. for (i=0,i<n,i++) 中的逗号改成分号

  4. cin.getline(n_patrons[i].name,20); 改成 cin >> n_patrons[i].name;

  5. cin.get(); 一行去掉

  6. while(n!=0) 一行改成for(i=0;i<n;)

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jsjdxysuper
2013-07-01 · 超过14用户采纳过TA的回答
知道答主
回答量:70
采纳率:100%
帮助的人:18.6万
展开全部
照着书写的错误太多了。
确定string name[20],不是char name[20];,
还有for循环用逗号分隔吗?
getline是用char数组为参数的
#include <iostream>
#include <string>
using namespace std;
struct patrons
{
double money;
char name[20];
};
int main()
{
int n,i;
int sign=0;
cout<<"请输入捐献者数目:"<<endl;
cin>>n;
patrons *n_patrons=new patrons[n];
for (i=1;i<=n;i++)
{
cout<<"请输入第"<<i<<"名捐献者姓名:"<<endl;
//cin.getline(n_patrons[i].name,19);
cin>>n_patrons[i].name;
cout<<"请输入第"<<i<<"名捐献数额:"<<endl;
cin>>n_patrons[i].money;
}
i=0;
while(i<n)
{
if(n_patrons[i].money>=10000)
{
cout<<"Grand patrons:"<<endl;
cout<<n_patrons[i].name<<"捐款:"<<n_patrons[i].money<<endl;
i++;
}

else if(n_patrons[i].money<10000)
{
cout<<"Patrons:"<<endl;
cout<<n_patrons[i].name<<"捐款:"<<n_patrons[i].money<<endl;
i++;
}
}
cout<<"none"<<endl;
system("pause");
return 0;
}

这是改过之后的

c++你就是找一本经典的书,照着上面的例子一点一点的敲吧,一边敲一边琢磨,认真看就是了,应该是没有捷径的吧。
c++ primer这本书不错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
印鸿运a
2013-07-01
知道答主
回答量:12
采纳率:0%
帮助的人:14.2万
展开全部
问题有点多!下面是我改的你试试!
#include <iostream>
#include <string>
using namespace std;
struct patrons
{
double money;
char name[20];
};

int main()

{
int n,i;
int sign=0;
cout<<"请输入捐献者数目:"<<endl;
cin>>n;
patrons *n_patrons=new patrons[n];
for (i=0;i<n;i++)
{
cout<<"请输入第"<<i+1<<"名捐献者姓名:"<<endl;
cin.ignore();
cin.getline(n_patrons[i].name,20);
//cin>>n_patrons[i].name;
cout<<"请输入第"<<i+1<<"名捐献数额:"<<endl;
//cin.get();
cin>>n_patrons[i].money;
}
i = 0;
while(i<n)
{
if(n_patrons[i].money>=10000)
{
cout<<"Grand patrons:"<<endl;
cout<<n_patrons[i].name<<"捐款:"<<n_patrons[i].money<<endl;
i++;
}

else if(n_patrons[i].money<10000)
{
cout<<"Patrons:"<<endl;
cout<<n_patrons[i].name<<"捐款:"<<n_patrons[i].money<<endl;
i++;
}
}
if (n==0)
cout<<"none"<<endl;
system("pause");
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式