Skip to content

Commit 3538007

Browse files
committed
Revert some changes and make some function more generic
1 parent 5143c1e commit 3538007

File tree

1 file changed

+43
-43
lines changed

1 file changed

+43
-43
lines changed

c/AddressBook/main.c

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
#include <stdio.h>
55
#include <stdlib.h>
66
#include <string.h>
7-
7+
// #define NOT_FOUND -1
8+
// #define MALLOC_FAILED -2
9+
// #define SUCCESS 0
810
struct Person
911
{
1012
char name[20];
@@ -17,31 +19,33 @@ void GetInput(struct Person *person);
1719
void PrintPerson(struct Person *person);
1820

1921
/*
20-
malloc failed -> -1 -> exit(1);
21-
Success -> 0
22+
malloc failed -> NULL -> exit(1);
23+
Success -> struct Person*
2224
*/
23-
int AddPerson(struct Person **contacts);
25+
struct Person *AddPerson(struct Person **contacts);
2426

2527
/*
26-
Not Found -> -1
27-
Success -> 0
28+
Not Found -> NULL
29+
Success -> struct Person*
2830
*/
29-
int ChangePerson(struct Person *contacts);
31+
struct Person *ChangePerson(struct Person *contacts);
3032

3133
/*
32-
Not Found -> -1
33-
Success -> 0
34+
Not Found -> NULL
35+
Success -> struct Person*
3436
*/
35-
int DeletePerson(struct Person **contacts);
37+
struct Person *DeletePerson(struct Person **contacts);
3638

3739
/*
3840
Not Found -> NULL
39-
Success -> struct Person*
41+
Success -> struct Person* -> remember to release!
4042
*/
4143
struct Person *FindPerson(struct Person *contacts);
4244

4345
void DisplayContacts(struct Person *contacts);
4446

47+
inline void ReleasePerson(struct Person *person);
48+
4549
void ReleaseContacts(struct Person **contacts);
4650

4751
int main()
@@ -60,16 +64,11 @@ int main()
6064
break;
6165
}
6266
case 1: {
63-
switch (AddPerson(&contacts))
67+
struct Person *person = AddPerson(&contacts);
68+
if (person == NULL)
6469
{
65-
case -1: {
6670
printf("ERROR: malloc failed");
6771
exit(1);
68-
break;
69-
}
70-
case 0: {
71-
break;
72-
}
7372
}
7473
break;
7574
}
@@ -88,30 +87,24 @@ int main()
8887
}
8988
case 3: {
9089
printf("Please input the name:\n");
91-
switch (ChangePerson(contacts))
90+
struct Person *person = ChangePerson(contacts);
91+
if (person == NULL)
9292
{
93-
case -1: {
9493
printf("The person is not found\n");
95-
break;
9694
}
97-
case 0: {
98-
break;
99-
}
100-
}
101-
10295
break;
10396
}
10497
case 4: {
10598
printf("Please input the name:\n");
106-
switch (DeletePerson(&contacts))
99+
struct Person *person = DeletePerson(&contacts);
100+
if (person == NULL)
107101
{
108-
case -1: {
109102
printf("The person is not found\n");
110-
break;
111-
}
112-
case 0: {
113-
break;
114103
}
104+
else
105+
{
106+
// ReleasePerson(person);
107+
free(person);
115108
}
116109
break;
117110
}
@@ -149,13 +142,13 @@ void PrintPerson(struct Person *person)
149142
printf("Phone number:\n%s\n", person->phone);
150143
}
151144

152-
int AddPerson(struct Person **contacts)
145+
struct Person *AddPerson(struct Person **contacts)
153146
{
154147
struct Person *person = (struct Person *)malloc(sizeof(struct Person));
155148

156149
if (person == NULL)
157150
{
158-
return -1;
151+
return NULL;
159152
}
160153

161154
GetInput(person);
@@ -171,7 +164,7 @@ int AddPerson(struct Person **contacts)
171164
*contacts = person;
172165
person->next = NULL;
173166
}
174-
return 0;
167+
return person;
175168
}
176169

177170
struct Person *FindPerson(struct Person *contacts)
@@ -191,7 +184,7 @@ struct Person *FindPerson(struct Person *contacts)
191184
return current;
192185
}
193186

194-
int ChangePerson(struct Person *contacts)
187+
struct Person *ChangePerson(struct Person *contacts)
195188
{
196189
struct Person *current = FindPerson(contacts);
197190

@@ -200,29 +193,30 @@ int ChangePerson(struct Person *contacts)
200193
printf("Please input new Phone number:\n");
201194
scanf("%s", current->phone);
202195
// Bounds Check Elimination is required
203-
return 0;
196+
return current;
204197
}
205198
else
206199
{
207-
return -1;
200+
return NULL;
208201
}
209202
}
210203

211-
int DeletePerson(struct Person **contacts)
204+
struct Person *DeletePerson(struct Person **contacts)
212205
{
213206
struct Person *person = FindPerson(*contacts);
214207

215208
if (person == NULL)
216209
{
217-
return -1;
210+
return NULL;
218211
}
219212
else
220213
{
221214
struct Person *current = *contacts;
222215
if (current == person)
223216
{
224217
*contacts = current->next;
225-
free(current);
218+
// free(current);
219+
return current;
226220
// target is the first struct
227221
}
228222
else
@@ -233,9 +227,10 @@ int DeletePerson(struct Person **contacts)
233227
}
234228
struct Person *target = current->next;
235229
current->next = current->next->next;
236-
free(target);
230+
// free(target);
231+
return target;
237232
}
238-
return 0;
233+
// return NULL;
239234
}
240235
}
241236

@@ -248,6 +243,11 @@ void DisplayContacts(struct Person *contacts)
248243
}
249244
}
250245

246+
inline void ReleasePerson(struct Person *person)
247+
{
248+
free(person);
249+
}
250+
251251
void ReleaseContacts(struct Person **contacts)
252252
{
253253
struct Person *temp = *contacts;

0 commit comments

Comments
 (0)