user618879
user618879

Reputation: 319

no output result when searching array or displaying array

I'm creating a list that allows me to input data then search or display the inputted data. For some reason I'm not able to produce an output. The problem may be the output function. How can i fix this? Here is the code:

#include<iostream>
#include<string>
#include<cstdlib>
#include <stdio.h>
#include <string.h>

using namespace std;

class contact{
private:
  string fn;
  string ln;
  string email;
  string number;
public:
  // Accessor and Mutator method for contacts variable
  void setfname(string f_n);
  string getfname();
  void setlname(string l_n);
  string getlname();
  void setemail(string emaila);
  string getemail();
  void setnumber(string num);
  string getnumber();
  // takes input entered for contacts
  void input();
  // display output
  void output();
  contact();

  contact(string f_n, string l_n, string emaila,string num);
};

void menu();
void EnterContact(contact contacts[], int size, int& numberUsed);
void show(contact contacts[], int sizeOfa);
int search_contacts(contact contacts[], string& lastname, int& size);

int main(){
  string opt="";
  const int MAX=2;
  int size;
  contact contacts[MAX];
  contact c[MAX];
  for(int i=0; i<MAX; i++){
    EnterContact(contacts, MAX, size);
  }
  menu();

  return 0;
}

//use these variables globally
const int MAX = 2;
contact contacts[MAX];

void EnterContact(contact contacts[], int size, int& numberUsed)
{
  char ans;
  bool done = false;
  int index = 0;
  cout << "Enter up to " << size << endl;
  while ((!done) && (index < size))
  {
    contacts[index].input();
    cout << "Do you want to add another contact?(y/n followed by Return): ";
    cin >> ans;
    if ((ans == 'y') && (ans == 'Y'))
      index++;
    else
      done = true;
  }
  numberUsed = index+1;
}

int search_contacts(contact contacts[], string& lastname, int& size)
{
  int index = 0;
  bool found = false;
  for(int index=0; index<size ; index++){
    if (lastname == contacts[index].getlname()){
      found = true;
      cout<<"found";
      break;
    }
  }

  if (!found)
    cout<<"no";
  return index;
}
void show(contact contacts[], int sizeOfa)
{
  for (int index = 0; index < sizeOfa; index++)
    contacts[index].output();
}

void menu()
{
  cout<<"\nContact Menu"<<endl;
  cout << "1. Add a New Contact. " << endl;
  cout << "2. Search for a Contact. " << endl;
  cout << "3. Delete Contact from list. " << endl;
  cout << "4. View All Contacts. " << endl;
  cout << "5. Exit the program. " << endl;
  cout << "Enter your choice: ";
  int opt; int result, a; char ans; string lastname;
  cin>>opt;
  switch (opt)
  {
  case 1: cout<<"func to Add a New Contact"<<endl;
    cout<<"\nAdd another contact";
    break;
  case 2:
    do
    {
      cout << "\nSearch contact by lastname: ";
      cin >> lastname;
      result = search_contacts(contacts, lastname, result);
      if (result == -1)
        cout << lastname << " Contact not found.\n";
      else
        contacts[result].output();

      cout << lastname << " is stored in array position "<< result << endl;
      cout << "Search again? (y/n): ";
      cin >> ans;
    } while ((ans != 'n') && (ans != 'N'));
    menu();
    break;
  case 3: cout<<"func to Delete Contact from list";
    break;
  case 4: cout<<"\nAll Contacts"<<endl;
    show(contacts, MAX);
    cout<<endl;
    menu();
    break;
  case 5: cout<<"\nContact Book is closed"<<endl;
    exit(1);
    break;
  default: cout<<"\nInvalid entry...Closing Contact Book"<<endl;
  }
}
contact::contact()
{
  fn=""; ln=""; email=""; number="";
}
contact::contact(string f_n, string l_n, string emaila,string num)
{
  fn= f_n; ln= l_n; email= emaila;number= num;
}
void contact::input()
{
  cout<<"\nFirst Name: ";
  cin>>fn;
  cout<<"Last Name: ";
  cin>>ln;
  cout<<"Email: ";
  cin>>email;
  cout<<"Phone number: ";
  cin>>number;
}

void contact::output()
{
  cout<<"\nName: "<<fn<<" "<<ln;
  cout<<"\nEmail: "<<email;
  cout<<"\nPhone number: "<<number;
  cout<<endl;
}
void contact::setfname(string f_n)
{
  fn= f_n;
}
string contact::getfname();
{
  return fn;
}
void contact::setlname(string l_n)
{
  ln= l_n;
}
string contact::getlname()
{
  return ln;
}
void contact::setemail(string emaila)
{
  email= emaila;
}
string contact::getemail()
{
  return email;
}
void contact::setnumber(string num)
{
  number= num;
}
string contact::getnumber()
{
  return number;
}

Upvotes: 0

Views: 339

Answers (3)

user836910
user836910

Reputation: 484

your problem is how you use your menu function, try using your select menu in your main function instead of declaring it as a function. if you want to use it as a function consider using the if else statement. that should take care of your input and output.

int main(){
  string opt="";
  const int MAX=2;
  int size;
  contact contacts[MAX];
contact c[MAX];
for(int i=0; i<MAX; i++){
  EnterContact(contacts, MAX, size);
}
cout<<"\nContact Menu"<<endl;
cout << "1. Add a New Contact. " << endl;
cout << "2. Search for a Contact. " << endl;
cout << "3. Delete Contact from list. " << endl;
cout << "4. View All Contacts. " << endl;
cout << "5. Exit the program. " << endl;
cout << "Enter your choice: ";
int opt; int result, a; char ans; string lastname;
cin>>opt;
switch (opt)
{
case 1: cout<<"func to Add a New Contact"<<endl;
  cout<<"\nAdd another contact";
  break;
case 2:
  do
  {
    cout << "\nSearch contact by lastname: ";
    cin >> lastname;
    result = search_contacts(contacts, lastname, result);
   if (result == -1)
     cout << lastname << " Contact not found.\n";
   else
     contacts[result].output();

   cout << lastname << " is stored in array position "<< result << endl;
   cout << "Search again? (y/n): ";
   cin >> ans;
 } while ((ans != 'n') && (ans != 'N'));
 menu();
 break;
case 3: cout<<"func to Delete Contact from list";
 break;
case 4: cout<<"\nAll Contacts"<<endl;
 show(contacts, MAX);
cout<<endl;
menu();
break;
case 5: cout<<"\nContact Book is closed"<<endl;
exit(1);
break;
default: cout<<"\nInvalid entry...Closing Contact Book"<<endl;
}
return 0;

}

also you already have a function that takes care of your input you dont need to put it in a for loop in the main function.

Upvotes: 2

Robᵩ
Robᵩ

Reputation: 168716

There are several errors in your program. The one that prevents you from displaying the contact list is this:

You have two variables named contacts. First, you have a local variable in main() declared thus:

  contact contacts[MAX];

Next, you have a global variable declared immediately after main() thus:

contact contacts[MAX];

Those two variables are distinct -- they are not related in any way, except coincidentally by name. EnterContact writes into one of the arrays, but show displays the values from the other one.

You should probably move all of your global declarations to before any of your code, and remove the similarly-named declarations from main().

Upvotes: 1

Mahesh
Mahesh

Reputation: 34625

contact contacts[MAX];  

for(int i=0; i<MAX; i++){
    EnterContact(contacts, MAX, size);
}

I think you need to pass i to EnterContact function, so as to give input for each object in the array of contacts. As of now, you are over writing the same object on every iteration of the loop.

Upvotes: 0

Related Questions