В связанном списке отображаются символы мусора - PullRequest
0 голосов
/ 22 сентября 2018

Не знаю почему, но каждый раз, когда я отображаю связанный список, он просто отображает символы мусора.Эта проблема возникла, когда я добавил _getche в строку 31 и отобразил значения в строке 53 с _putch(current->c); Если кто-нибудь может помочь, опишите, в чем заключается моя проблема, и предоставьте решение, которое было бы очень признательно!

#include <iostream>
#include <string>
#include <conio.h>
using namespace std;

class ListNode
{
public:
    char c;
    ListNode *next;
};

int main()
{
    ofstream outputFile;
    ListNode *current;
    ListNode *start;
    ListNode *newNode = new ListNode();

    current = nullptr;
    start = newNode;
    newNode->next = nullptr;;

    cout << "Hit 'esc' when you are done.\n";
    while (newNode->c = _getche() != 27)
    {
        //If start is empty, create node
        if (current == nullptr)
        {
            current = newNode;
        }
        else //If start is not empty, create new node, set next to the new node
        {
            current->next = newNode;
            current = newNode;
        }

        newNode = new ListNode();
        newNode->next = nullptr;
    }

    //Display linked list
    cout << "Here is what you have typed so far:\n";
    current = start;
    while (current != nullptr)
    {
        _putch(current->c);
        current = current->next;
    }
    cout << endl;

    outputFile.close();
    system("pause");
    return 0;
}

1 Ответ

0 голосов
/ 22 сентября 2018

In:

while (newNode->c = _getche() != 27)

= имеет более низкий приоритет , чем !=, поэтому он присваивает результат _getche() != 27 newNode->c.

Исправлено:

while((newNode->c = _getche()) != 27)

Присоединение односвязных списков можно сделать проще, поддерживая указатель ptail на указатель next последнего узла, инициализированный head:

ListNode *head = nullptr, **ptail = &head;

cout << "Hit 'esc' when you are done.\n";
for(char c; (c = _getche()) != 27;) {
    auto node = new ListNode{c, nullptr}; // allocate and initialize a new node
    *ptail = node; // append to the end of the list
    ptail = &node->next; // move the end of list to the new node
}

//Display linked list
cout << "Here is what you have typed so far:\n";
for(auto next = head; next; next = next->next)
    _putch(next->c);
...