搜索数组或显示数组时没有输出结果

时间:2011-11-04 20:21:46

标签: c++ visual-c++-2010

我正在创建一个列表,允许我输入数据,然后搜索或显示输入的数据。由于某种原因,我无法产生输出。问题可能是输出功能。我怎样才能解决这个问题?这是代码:

#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;
}

3 个答案:

答案 0 :(得分:2)

您的问题是如何使用菜单功能,尝试使用主功能中的选择菜单,而不是将其声明为功能。如果要将其用作函数,请考虑使用if else语句。这应该照顾你的输入和输出。

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;

}

你也已经有了一个功能来处理你的输入你不需要把它放在主函数的for循环中。

答案 1 :(得分:1)

您的计划中有多处错误。阻止您显示联系人列表的是:

您有两个名为contacts的变量。首先,您在main()声明了一个局部变量:

  contact contacts[MAX];

接下来,您在main()之后立即声明了一个全局变量:

contact contacts[MAX];

这两个变量是截然不同的 - 它们之间没有任何关系,除非是巧合的名字。 EnterContact写入其中一个数组,但show显示另一个数组的值。

您可能应该将所有全局声明移到任何代码之前,并从main()中删除类似命名的声明。

答案 2 :(得分:0)

contact contacts[MAX];  

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

我认为您需要将i传递给EnterContact函数,以便为contacts数组中的每个对象提供输入。截至目前,您在循环的每次迭代中都在编写相同的对象。