问题描述:编写一个程序,记录捐助给“维护合法权利团体”的资金。该程序要求用户输入捐献者数目,然后要求用户输入每一个捐献者的姓名和款项。这些信息被储存在一个动态分配的结构数组中。每个结构有两个成员:用来储存姓名的字符数组(或string对象)和用来存储款项的double成员。读取所有的数据后,程序将显示所有捐款超过10000的捐款者姓名及捐款数额。该列表前应包含一个标题,指出下面的捐款者是重要捐款人。然后,程序将列出其他的捐款者,该列表要以patrons开头。如果某种类别没有捐款者,则程序将打印单词“none”。该程序只显示两种类别,而不进行排序。
解决思路:1.创建一个动态分配的结构体数组,组内两个成员,一个是string存储名字,一个是double类型存储款项数额。
2.读取用户数据存储到结构体数组时,判断输入的字符是否大于10000,大于10000则将其序号存进一个数组中记录下来。
3.通过记录的数组打印标题“重要捐款人”之后打印所有捐款超过一万元的捐款者姓名,接着打印“patrons”后打印剩余的人的姓名,用判断结构,如果没有输出某种类别的捐款者姓名则打印none。
代码:
#include <iostream>
#include <string>
using namespace std;
struct patrons
{
string name;
double n;
};
int x;
int t = 0;
int main()
{
cout << "请输入捐款人总数"<<endl;
cin >> x;
cin.get();
int* b = new int[x];
patrons*a = new patrons[x];
for (int i = 0; i < x; i++)
{
cout << "请输入捐款人"<<i+1<<"姓名:";
getline(cin,a[i].name);
cout << "请输入捐款人" << i + 1 << "捐款金额:";
cin >> a[i].n;
cin.get();
if (a[i].n>10000)
{
b[t] = i;
t++;
}
}
cout << "重要捐款人:" << endl;
for (int i = 0; i < t; i++)
{
cout << a[b[i]].name << endl;
cout << a[b[i]].n << endl;
}
if (t == 0)
cout << "none"<<endl;
cout << "patrons:" << endl;
if (t == x)
{
cout << "none" << endl;
}
for (int i = 0; i < x - t; i++)
{
if (t == 0)
{
cout << a[i].name<<endl;
}
for (int j = 0; j < t; j++)
{
if (i != b[j])
cout << a[i].name << endl;
}
}
return 0;
}
标签:第一个,int,捐款者,++,cin,问题,第六天,patrons,cout From: https://www.cnblogs.com/czfznb/p/17330876.html