C++Primer Plus第六章分支语句和逻辑运算编程练习6.11,第6题new delete[]的使用

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

#pragma region 第五章练习6
/*
*/
#if 1
#include<iostream>
#include <array>
#include<string>
using namespace std;
struct people
{
	string name;
	unsigned rmb;
};
int main() {
	unsigned cntpeople;
	cout << "请输入捐款人的数量:";
	cin >> cntpeople;

	people* peop = new people[cntpeople];

	for (unsigned i = 0; i < cntpeople; i++)
	{
		cout << "输入捐赠者#" << i<<"姓名:";
		//cin >> peop[i].name;
		char ch = cin.get();
		//cout<<"cin.get获取到的十进制数是:"<<(int)ch<<endl;
		getline(cin, peop[i].name);
		cout << "输入捐赠者#" << i<<"金额:";
		cin >> peop[i].rmb;
	}
	unsigned peopa = 0,peopb = 0;
	cout << "重要捐赠者:"<<endl;
	for (unsigned i = 0; i < cntpeople; i++)
	{
		if (peop[i].rmb >= 10000)
		{
			peopa = 1;
			cout << peop[i].name << "\t";
			cout << peop[i].rmb << endl;
		}
	}
	if (!peopa)
	{
		cout << "NONE" << endl;
	}
	cout << "普通捐赠者:"<<endl;
	for (unsigned i = 0; i < cntpeople; i++)
	{
		if (peop[i].rmb < 10000)
		{
			peopb = 1;
			cout << peop[i].name << "\t";
			cout << peop[i].rmb << endl;
		}
	}
	if (!peopb)
	{
		cout << "NONE" << endl;
	}
	return 0;
}
delete[] peop;
#endif 
#pragma endregion

注意事项:
对于cin输入,有空格的时候,这里处理是有点问题的,这里改用getline()函数,但是使用getline()
函数之前需要把队列中的回车换行清除掉,用cin.get()下面我们cin.get()方法获取到的是具体的啥内容
如图
在这里插入图片描述
获取到的是十进制的10 .查询ASCII表得知
在这里插入图片描述

10 是换行键
综上所述;cin输入捐赠人数量的时候,按回车,队列中会添加一个换行符号,这里需要主要使用的时候,一定要主要,特别是使用getline的时候,getline碰到换行符就终止的,所以不清楚掉队列缓冲区的换行符,getline()不能正常接受输入
最后一点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值