Связанный список и вставка строки в алфавитном порядке - PullRequest
0 голосов
/ 19 марта 2019

Я пишу программу, которая позволяет пользователю вставлять, удалять, искать и печатать книги. Книги должны распечатываться в алфавитном порядке. Когда я вставляю книги, они работают просто отлично, но не располагают их в правильном порядке и вылетает. Вот мой код для функции вставки.

void BookList::Insert(Book* nBook)
    {
        string name;
        int quant;
        double p;
        cout << "Enter the title of the book." << endl;
        cin.ignore();
        getline(cin, name);
        cout << "Enter the number of quanities of this book." << endl;
        cin >> quant;
        cout << "Enter the price of this book." << endl;
        cin.ignore();
        cin >> p;
        nBook->title = name;
        nBook->quantity = quant;
        nBook->price = p;
        nBook->next = nullptr;
        //cout << "test" << endl;
        //If the current book is lexicographically smallest.

        if (first == nullptr) {
            first = nBook;
            cout << first->title << endl;
        }
        else if (nBook->title <= first->title)
        {
            cout << "new first" << endl;
            nBook->next = first;
            first = nBook;
        }

        else
        {
            cout << first->title << endl;
            //if current book is lexicographically small between two books.
            Book* prevPtr = first;
            while (prevPtr != nullptr)
            {
                cout << "Looking at: " << prevPtr->title << endl;
                if (prevPtr->title > nBook->title)
                {
                    break;
                }
                else
                {
                    prevPtr = prevPtr->next;
                }
            }

            nBook->next = prevPtr->next;
            prevPtr->next = nBook;

        }
    }

P.S. Это в C ++ Спасибо

1 Ответ

0 голосов
/ 19 марта 2019

Если что-то не показывает ошибку при компиляции, это не значит, что она работает нормально. Почему вы используете cin.ignore () без параметров? Какого персонажа вы пытаетесь игнорировать? Вы понимаете, что cin >> (someint или somedouble) уже игнорирует пробел и возвращает символы, верно?

Для контекста требуется больше вашего кода, но похоже, что вы пытаетесь заполнить информацию для новой книги в узле nBook, прежде чем фактически инициализировать новый узел nBook.

Кроме того, я предлагаю не помещать этот вывод в конец метода. Если ваш метод заключается в добавлении новой книги в ваш список ссылок, просто используйте ее для добавления. Поместите эти выводы в отдельный метод или в вызывающий метод. (или, может быть, вы просто поместите их в целях отладки, в этом случае nvm) Просто мой 0,02

...