2013-04-20 4 views
0
#include "PersonList.h" 
#include <iostream> 
#include <string> 
using namespace std; 

PersonList::PersonList() 
{ 
    head=NULL; //Head is a PersonRec* 
} 
struct PersonRec 
{ 
    string aName; 
    int aBribe; 
    PersonRec* link; 
}; 
void PersonList::AddToList() 
{ 

    //string a; 
    //int b; 
    PersonRec* p;     
    p=new PersonRec; 


    p->link=NULL; 
    cout << "\nEnter the person's name: "; 
    cin >> p->aName; 
    cout<< "\nEnter the person's contribution: "; 
    cin >> p->aBribe; 

    if(head==NULL) 
    { 
     cout<<1<<endl; 
     head=p; 
    } 
    else if(head!=NULL)  //The problem is in here. 
    { 
     PersonRec *currPtr=head; 
     bool x=true; 
     while(x==true) 
     { 
      currPtr=currPtr->link;  
      if(currPtr==NULL) 
      { 
       currPtr=p; 
       x=false; 
      } 

     } 
    } 

} 

Это программа, которая должна вводить имя и взятку в связанный список посредством распределения динамической памяти и выводить результат по запросу (я только разместил функцию ввода здесь, потому что это единственный с проблемами). Первый элемент входов и выходов отлично, но если я попытаюсь ввести второй, он не будет выводиться. Программа компилируется, но так как добавление узла для всех узлов после первого отличается, проблема должна быть связана с той частью, которую я прокомментировал как проблему. Любая помощь будет оценена по достоинству. Это домашнее задание, да, поэтому любые подсказки будут оценены.Связанный список программ с динамическим распределением памяти

+0

Пожалуйста, добавьте код, который вы используете для вывода содержимого списка. Что заставило вас думать, что проблемы нет? –

+0

Проблема была там, потому что я только что исправил ее, извините за то, что не опубликовал ее раньше. – user2167980

+0

Для добавления в список вам нужно установить 'tail-> link = newElement', правильно? Но вы, кажется, не делаете этого нигде, то как оно добавляется в список? – balki

ответ

0

Поскольку это ваша домашняя работа, я не собираюсь давать вам код, но скорее приведет вас к решению :)

Проблема заключается в том, что вы установили локальную переменную currPtr, чтобы указать на вновь добавленные вместо того, чтобы указывать на нее link последней записи.

Я считаю, что следующее может спутали вас:

a = 7; 
b = a; 
b = 6; 

Здесь значение a не изменится, независимо от того, что мы скопировали его значение в b во втором сообщении.

Аналогично, в следующей последовательности операторов

currPtr = currPtr->link; 
currPtr = p; 

значение currPtr-> ссылка не меняется независимо от того, что currPtr и ссылки являются указателями, потому что вы меняете свои значения, а не поля, на которые они указывают.

+0

Спасибо всем, я нашел решение! – user2167980

+0

Если бы это было решение, вы могли бы принять его. Если это не так, просто игнорируйте это :) –

Смежные вопросы