rsissick
asked on
Passing Linked list into function
I have a homework assignment to write an address list using a linked list. I am having a problem passing the list into a function. I know I want to pass by reference. in my menu program below, I pass the list into the function "newentry", but when I return to the menu and print the list it is empty.
Please help.
Please help.
#include <iostream>
#include <string>
using namespace std;
#include "menu.h"
void main()
{
mainmenu();
}
void mainmenu()
{
SortedType list;
AddrType address;
int select;
cout << "Enter your selection: " << endl << endl;
cout << "(1) New entry " << endl;
cout << "(2) Delete an entry " << endl;
cout << "(3) Edit an entry " << endl;
cout << "(4) Generate a birthday card " << endl;
cout << "(5) Generate an aniversary card " << endl;
cout << "(6) Print List " << endl;
cout << "(7) Exit program " << endl;
cin >> select;
switch (select)
{
case 1:
//cout << "New Entry" << endl;
newentry(list);
break;
case 2:
cout << "Delete an entry" << endl;
break;
case 3:
cout << "Edit an entry" << endl;
break;
case 4:
cout << "Generate BDay Card" << endl;
break;
case 5:
cout << "Gen Aniversay Card" << endl;
break;
case 6:
//cout << "Print List" << endl;
PrintList(list);
break;
case 7:
cout << "Exit" << endl;
break;
default:
cout << "Enter a number from 1-6: " << cout << endl;
mainmenu();
}
}
void newentry(SortedType& list)
{
string fname;
string lname;
string addr;
int bday;
int aniv;
AddrType address;
cout << "Enter First Name: ";
cin >> fname;
address.initfname(fname);
cout << fname << endl;
cout << "Enter Last Name: ";
cin >> lname;
address.initlname(lname);
cout << lname << endl;
cout << "Enter Address: ";
fflush(stdin);
getline(cin, addr);
address.initaddress(addr);
cout << addr << endl;
cout << "Enter Birthday: ";
cin >> bday;
address.initbday(bday);
cout << bday << endl;
cout << "Enter Aniversary: ";
cin >> aniv;
address.initaniv(aniv);
cout << aniv << endl;
list.InsertItem(address);
/*
int length;
AddrType address2;
list.ResetList();
cout << "List" << endl;
length = list.GetLength();
for (int counter = 1; counter <= length; counter++)
{
list.GetNextItem(address2);
address2.PrintFirst(cout);
cout << endl;
address2.PrintLast(cout);
cout << endl;
address2.PrintBday(cout);
cout << endl;
address2.PrintAniv(cout);
cout << endl;
}
*/
mainmenu();
}
void PrintList(SortedType &list)
{
int length;
AddrType address;
list.ResetList();
cout << "List" << endl;
length = list.GetLength();
for (int counter = 1; counter <= length; counter++)
{
list.GetNextItem(address);
address.PrintFirst(cout);
cout << endl;
address.PrintLast(cout);
cout << endl;
address.PrintBday(cout);
cout << endl;
address.PrintAniv(cout);
cout << endl;
}
}
ASKER
No, but I kinda figured someone would ask me that. It just resets the current pos pointer to NULL.
Thanks
void SortedType::ResetList()
{
currentPos = NULL;
}
void SortedType::GetNextItem(Ad drType& item)
{
if (currentPos == NULL)
currentPos = listData;
item = currentPos->info;
currentPos = currentPos->next;
}
Thanks
void SortedType::ResetList()
{
currentPos = NULL;
}
void SortedType::GetNextItem(Ad
{
if (currentPos == NULL)
currentPos = listData;
item = currentPos->info;
currentPos = currentPos->next;
}
void newentry(SortedType& list)
{
...
mainmenu(); <<--- This will generate a NEW list.
You need a loop in the main function
{
...
mainmenu(); <<--- This will generate a NEW list.
You need a loop in the main function
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Andy, it seems we simul-posted :)
@evilrix - No problems
ASKER
I understand. I want the menu to be displayed after the new item is entered. How do I do this without calling my menu function again?
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thank so much!
{
int length;
AddrType address;
list.ResetList(); <<------------------------
Does that empty the list?