HM077 地址传入才能加人

HM077 地址传入才能加人

HM077 地址传入才能加人

来源: 第 77 集 通讯录管理系统-添加联系人-功能实现

难度: 入门

时间限制: 1s

空间限制: 64MB

题目描述

上一问只设计了类型。现在要在 main 里创建真正的通讯录变量,并把当前人数 mSize 初始化为 \(0\)。

封装 addPerson。必须用**地址传递**,形参写成 AddressBook *book,调用时传入 &book。若按值传递,子函数里加人不会改到主函数那本通讯录。

添加步骤:

  1. 先判断是否已满:book->mSize == MAX。满了输出 通讯录已满 并立刻返回,不再写入。用户据此知道要先删人才能再加。
  2. 未满则依次读入姓名、性别、年龄、电话、住址,写入 personArray[book->mSize],再执行 book->mSize++。下标不能写死成 \(0,1,2\),必须用当前人数当插入位置。
  3. 性别只允许 \(1\)(男)或 \(2\)(女)。用循环反复读入,直到读到合法值才离开;每读到非法值就输出一行 输入有误请重新输入
  4. 全部字段写完后输出 添加成功

本题容量仍用 #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
通过率
?
上传者