链表显示垃圾字符

Linked list displays garbage characters

本文关键字:字符 显示 链表      更新时间:2023-10-16

不知道为什么,但每次我显示链表时,它只显示垃圾字符。当我将_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;
}

在:

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

=的优先级低于!=,因此它将_getche() != 27的结果分配给newNode->c

修复:

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

通过维护指向最后一个节点的next指针(使用head初始化ptail指针,可以更轻松地追加单向链表:

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);