HM077 地址传入才能加人
HM077 地址传入才能加人
来源: 第 77 集 通讯录管理系统-添加联系人-功能实现
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
上一问只设计了类型。现在要在 main 里创建真正的通讯录变量,并把当前人数 mSize 初始化为 \(0\)。
封装 addPerson。必须用**地址传递**,形参写成 AddressBook *book,调用时传入 &book。若按值传递,子函数里加人不会改到主函数那本通讯录。
添加步骤:
- 先判断是否已满:
book->mSize == MAX。满了输出通讯录已满并立刻返回,不再写入。用户据此知道要先删人才能再加。 - 未满则依次读入姓名、性别、年龄、电话、住址,写入
personArray[book->mSize],再执行book->mSize++。下标不能写死成 \(0,1,2\),必须用当前人数当插入位置。 - 性别只允许 \(1\)(男)或 \(2\)(女)。用循环反复读入,直到读到合法值才离开;每读到非法值就输出一行
输入有误请重新输入。 - 全部字段写完后输出
添加成功。
本题容量仍用 #define MAX 1000。为了能测满员,第一行再读一个 \(C\)(\(1 \le C \le 1000\)),把「已满」理解成 mSize == C(相当于这次评测把宏改成了 \(C\))。
读入 \(C\) 和若干次添加请求,按上述规则处理,最后再输出当前人数和全部已存联系人,以证明地址传递确实改写了主函数里的通讯录。
输入格式
第一行两个整数 \(C\)、\(q\)(\(1 \le C \le 1000\),\(1 \le q \le 200\)),表示本次容量和添加次数。
接下来 \(q\) 段,每段为:
- 一行姓名(不含空白)。
- 若干个整数,最后一个属于 \(\{1,2\}\) 的作为性别,前面的非法值都要提示重输。
- 一行:年龄、电话、住址(年龄为整数,电话和住址不含空白)。
输出格式
每次添加先输出性别校验过程中的 输入有误请重新输入(若有),再输出 添加成功 或 通讯录已满。
全部请求结束后,一行 SIZE s,随后 \(s\) 行已存联系人:姓名、性别、年龄、电话、住址,空格分隔。行末换行。
样例
输入 #1
2 3
张三
3
4
1
18 13690000000 海淀
李四
2
20 13680000000 朝阳
王五
1
30 110 西城
输出 #1
输入有误请重新输入
输入有误请重新输入
添加成功
添加成功
通讯录已满
SIZE 2
张三 1 18 13690000000 海淀
李四 2 20 13680000000 朝阳
输入 #2
1 1
甲
1
16 123 东城
输出 #2
添加成功
SIZE 1
甲 1 16 123 东城
说明
样例 1 容量为 \(2\)。张三的性别先输入了 \(3\)、\(4\),都要提示有误,直到 \(1\) 才接受;第三人再加时已满。王五不能出现在最终名单里。addPerson 必须走指针,否则 SIZE 会一直是 \(0\)。
信息
- ID
- 1076
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者