不知道为什么,但每次我显示链接列表时,它只显示乱码。当我将 _getche
添加到第 31 行,并使用 _putch(current->c);
在第 53 行显示值时发生此问题 如果有人可以帮助描述我的问题是并提供一个解决方案,我们将不胜感激!
#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)
=
有较低的 precedence !=
,因此它将 _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);
关于c++ - 链表显示乱码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52451833/