Как обновить данные в связанном списке? - PullRequest
0 голосов
/ 11 мая 2018

Я изучаю связанный список в свободное время.Итак, сейчас я хочу узнать, как изменить ввод данных пользователем в связанном списке, но я немного растерялся с этими указателями.Программа работает, но после того, как я вошел в возраст, программа перестала работать.Я думаю, что проблема в current=current->next; в цикле while, но я не знаю, где еще должен указывать ток, отличный от следующего.

void node::update()
{
    int updateAge;
    cout << "Please enter age: ";
    cin>>updateAge;
    int ch;
    node *current = start_ptr;
    node *temp;

    if (start_ptr == NULL)
        cout << "No record to update!" << endl;
    else
    {
        current = start_ptr;

        while((current!=NULL) && (current->temp->age!=updateAge))
        {
            current=current->next; // Is this correct?
        }

        if (current==NULL)
            {cout<<"The Requested age is Not Found" << endl;}


        else if(current->temp->age==updateAge)
        {
            cout<<"What Information You Want To Update?" << endl;
            cout<<"1. Name" << endl;
            cout<<"2. Height" << endl;
            cin>>ch;
            system("cls");

            switch(ch)
            {
                case 1 :
                {
                    cout << "Enter New Name: ";
                    cin.ignore();
                    getline(cin, current->temp->name);
                    break;
                }

                case 2 :
                {
                    cout<<"Enter New Height: ";
                    cin >> current->temp->height;
                    break;
                }

                default:
                {
                    cout<<"Wrong Input! Please choose again: ";
                    cin>>ch;
                }
            }
            cout<<"RECORD UPDATED !";
        }
    }
}

struct list
{
    list *head, *tail;
    list *next;
};

class node
{
    private:
        std::string name; // Name
        int age; // Age in integer
        float height; // In meters

    public:
        node *next; // Pointer to next node
        node *head, *tail;
        node *start_ptr = NULL; // Start Pointer (root)
        node *temp;
        node *temp2;
        node *pNextValue;
        node* prev; // empty header

        void update();
        void printList();
        void delete_end_node();
        void search();
        void sort_age();

    node()
        {
            head = NULL;
            tail = NULL;
        }


        void getInput()
        {
            temp = new node;
            cout << "Name: ";
            cin >> temp->name;
            cout << "Age: ";
            cin >> temp->age;
            cout << "Height: ";
            cin >> temp->height;

            cout<<"\n";
            temp->next = NULL; // Sets the node to be the last node
            if (start_ptr == NULL)
                start_ptr = temp;
            else
            {
                temp2 = start_ptr; // We know temp2 is not NULL - list not empty!
                while (temp2->next != NULL) // The loop will terminate when temp2
                    temp2 = temp2->next; // points to the last node in the list
                // Move to next link in chain
                temp2->next = temp; // Sets the pointer from that last node to point
                                    // to the node that has just declared
            }
        } // End of getInput() function
}; //End of class

1 Ответ

0 голосов
/ 11 мая 2018

я думаю, что проблема с вашим условием while ** попытаться удалить временную переменную, а затем попытаться, я думаю, после этого это сработает **

условие должно быть текущим -> age! = UpdatAge

...