unable to get required output

Hello!
i've been working on a Contacts program, and i'm unable to get the desired output, can someone tell me what's wrong with my code?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
#include<iostream>
#include<string>
using namespace std;
int index1=0,index2=0;
int flag=0;

class Contact
{
    private:

     char Name[50];
     char Num[10];

    public:
    //operator overloading
        friend istream& operator >> (istream &in, Contact &str)
        {
            cout<<"\n\nenter contact information\n\n"<<endl;
            in>>str.Name>>str.Num;
            return in;
        }

        friend ostream& operator << (ostream &out, Contact &str)
        {
            cout<<"\n\ncontact details are:\n\n";
            out<<str.Name<<"\n"<<str.Num<<endl;
            return out;
        }
        void DeleteC()
        {
            delete this;
        }
        friend string GetName(Contact);
        friend string GetNum(Contact);
        friend void SetName(Contact,string);
        friend void SetNum(Contact,string);
};
//set and get methods
string GetName(Contact obj)
{
    return obj.Name;
}
string GetNum(Contact obj)
{
    return obj.Num;
}
void SetName(Contact obj, string name)
{
    name.copy(obj.Name,50);
}
void SetNum(Contact obj, string num)
{
    num.copy(obj.Num,10);
}

class AddressBook
{
    private:
        static int n;
        Contact Rec[];
    public:
        void Choice()
        {
            int c;
            for(;;)
            {
               cout<<"1. Add\n2. Display\n3. Find contact\n4. update\n5. Delete Contact\n6. Exit\n";
               cout<<"enter your choice\n";
               cin>>c;
               switch(c)
               {
                   case 1 : Add();
                            n++;
                            break;
                   case 2 : Display();
                            break;
                   case 3 : FindContact();
                            break;
                   case 4 : Update();
                            break;
                   case 5 : DeleteContact();
                            break;
                   case 6 : exit(0);

                   default : exit(0);

               }
            }
        }
        void Add()
        {
            cin>>Rec[n];
        }
        void Display()
        {
            for(int i=0;i<n;i++)
            cout<<Rec[i]<<endl;
        }



        void FindContact()
        {
            char name[50]; int flag;
            cout<<"enter the name you want to find\n";
            cin>>name;
            for(int i=0;i<=n;i++)
            {
                if(name==GetName(Rec[i]))
                   {
                        cout<<"\ncontact found\n";
                        flag=1;
                        cout<<Rec[i];
                        break;
                   }
                else
                    {
                        flag=0;
                    }
            }
            if(flag);
            else cout<<"\nContact not found\n";

        }
        void Update()
        {
            char input[50];
            int choice;
            char number[10],name[50];
            cout<<"\nenter the name or number of the contact you want to update\n";
            cin>>input;
            if(isdigit(input[1]))
               {
                for(int i=0;i<=n;i++)
                {
                    if(input==GetNum(Rec[i]))
                    {
                        cout<<"\ncontact found\nwhat do you want to edit?\n1. Name\n2. Number\nenter your choice\n";
                        cin>>choice;
                        switch(choice)
                        {
                            case 1 : cout<<"\nenter new name\n";
                                     cin>>name;
                                     SetName(Rec[i],name);
                                     cout<<"\ncontact updated!\n";
                                     break;
                            case 2 : cout<<"\nenter new number\n";
                                     cin>>number;
                                     SetNum(Rec[i],number);
                                     cout<<"\ncontact updated!\n";
                                     break;
                        }
                        flag=1;
                        break;
                    }
                    else
                    {
                        flag=0;
                    }

                }
                if(flag);
                else cout<<"\nContact not found\n";
               }
               else if(isalpha(input[1]))
               {
                   for(int i=0;i<=n;i++)
                   {
                    if(input==GetName(Rec[i]))
                    {
                        cout<<"\ncontact found\nwhat do you want to edit?\n1. Name\n2. Number\nenter your choice\n";
                        cin>>choice;
                        switch(choice)
                        {
                            case 1 : cout<<"\nenter new name\n";
                                     cin>>name;
                                     SetName(Rec[i],name);
                                     cout<<"\ncontact updated!\n";
                                     break;
                            case 2 : cout<<"\nenter new number\n";
                                     cin>>number;
                                     SetNum(Rec[i],number);
                                     cout<<"\ncontact updated!\n";
                                      break;
                        }flag=1; break;
                    }
                    else
                    {
                        flag=0;
                    }

                }
                if(flag);
                else cout<<"\nContact not found\n";

               }

        }
        void DeleteContact()
        {
            int contact=1,choice;
            for(int i=0;i<n;i++)
            {
                cout<<contact<<". "<<GetName(Rec[i])<<endl;
                contact++;
            }
            cout<<"enter the index of the contact that you want to delete\n";
            cin>>choice;
            Rec[choice-1].DeleteC();
            cout<<"\nContact deleted!\n";
        }
};
int AddressBook::n=0;

int main()
{
    AddressBook a;
    a.Choice();
}


the functions delete and update doesn't work, it is executed but when i display the contacts they are not updated!
Hi,

I compiled the code and had this warning:

60:21: warning: ISO C++ forbids zero-size array 'Rec' [-Wpedantic]


So maybe you don't have your warning levels set high enough.

Also, consider using a debugger - it is by the far the easiest thing to do.

Good Luck
hey, i did get that warning, i chose to ignore it lol, because i couldn't think of another way to define the index i tried Contact Rec[n]; I was getting errors, anyway, did you try the output? what's the logical error that i made?
and i'll give the debugger a shot...
i
chose to ignore it lol


Well that's a small lesson then: ignore warnings at your peril :+)

i couldn't think of another way to define the index i tried Contact Rec[n];


The best way is to not use an array at all, consider std::vector instead, then you don't have to worry about the size of it at any stage. you could use std::string instead of char arrays as well. Make use of the STL containers, they save a lot of problems.

anyway, did you try the output?


You have to fix your array problem first, that is very likely causing your other problems.

Also consider putting your class defintions into *.hpp header files, and class function defintions into their own *.cpp files, all named exactly after the class names.

There is a bit of a rule that functions shouldn't be more than 40 LOC, some go for even less. So consider splitting your functions. This can aid understanding because it's a kind of abstraction.

Good Luck !!

closed account (48T7M4Gy)
Use a vector. You've just come up against a serious limitation of arrays. There are ways around it but they will be very messy unless you allocate a constant specified number of elements to the rec array.
hey, I'm sticking to arrays because the project requirement kinda wants me to... And, other than that warning, everything looks okay! but Is my logic correct in the Update() function and delete functions?
the problem is that even you have deleted the instance at index i , the location is still allocated in memory so you have to make sure to recycle it, you can use a vector of available location using either index or flags, or you can use simply a vector container for Rec.

also dont ignore warnings, definetly declaring a c array without any size in a class declaration is an error. if you dont know the size yet use a pointer instead. Rec*
Hey thanks Ericool! I'll try it out...
Topic archived. No new replies allowed.