如何使gotoxy()函数在光标所在的链接列表中选择节点
How to make gotoxy() function select the node in the link list the cursor is on?
我正在编写一个基本的文本编辑器作为作业,但我遇到了麻烦。我正在使用链表,我可以在列表周围移动光标,但每次我尝试在其他字母之间插入一个字母(一个字母一个节点(时,它只会在列表末尾插入字母。代码通常还有其他错误,只寻求有关此主要问题的帮助,但任何建议都值得赞赏。
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <fstream>
#include <string>
using namespace std;
class Node
{
public:
char c;
Node* next;
Node* prev;
};
void gotoxy(int x, int y)
{
COORD pos = { x, y };
HANDLE output = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(output, pos);
}
void createNew()
{
Node* start = nullptr;
Node* end = nullptr;
Node* prevNode = nullptr;
int xcur = 0, ycur = 0;
char letter = ' ';
while (letter != 27)
{
letter = _getch();
if (letter == 8) // backspace
{
Node *p;
p = end;
end = end->prev;
delete p;
end->next = nullptr;
xcur--;
}
else if (letter == 57) //save press '9'
{
ofstream outdoc;
outdoc.open("TheEditor.txt");
Node* save;
char data;
save = start;
while (save->next != nullptr)
{
data = save->c;
outdoc << data;
save = save->next;
}
outdoc.close();
}
else if (letter == -32)
{
// he pressed right up left or down
letter = _getch();
if (letter == 75) //72 is up 75 left 77 right 80 down
--xcur;
if (letter == 77)
xcur++;
//if (letter == 72)
//ycur++;
//if (letter == 80)
//ycur--;
}
else if (letter == 56) //load file
{
ifstream indoc;
string fname;
cout << "Please enter the name of the file" << endl;
cin >> fname;
indoc.open(fname);
char file[sizeof(indoc)];
for (int j = 0; j < sizeof(fname); j++)
{
indoc >> file[j];
cout << file[j];
j++;
}
}
else if (letter == 13) // enter
{
xcur = 1;
ycur++;
//start = arr[ycur];
}
else // normal eltter
{
Node* p;
p = new Node();
p->c = letter;
p->next = nullptr;
p->prev = nullptr;
if (start == nullptr)
{
start = p;
end = p;
prevNode = p;
}
else if (end->next != nullptr) // insert in middle
{
Node* m = new Node();
m->next = end;
m->c = letter;
m->prev = prevNode;
end->prev = m;
prevNode = m;
}
else
{
p->prev = prevNode;
end->next = p;
end = p;
prevNode = p;
}
//xcur++;
}
system("cls");
// display your linked list here.
Node *p;
p = start;
while (p != nullptr)
{
_putch(p->c);
p = p->next;
}
gotoxy(xcur, ycur);
}
}
void loadFile()
{
string fname;
ifstream indoc;
cout << "Please enter the name of the document" << endl;
cin >> fname;
system("CLS");
indoc.open(fname);
Node* start = nullptr;
Node* end = nullptr;
Node* prevNode = nullptr;
int xcur = 0, ycur = 0;
char letter = ' ';
char file[sizeof(indoc)];
for (int j = 0; j < sizeof(fname); j++)
{
indoc >> file[j];
cout << file[j];
j++;
}
indoc.close();
while (letter != 27)
{
_putch(letter);
if (start == nullptr)
{
Node* p;
p = new Node();
p->c = letter;
p->next = nullptr;
p->prev = nullptr;
start = p;
end = p;
prevNode = p;
}
else
{
Node* t;
t = new Node();
t->c = letter;
t->next = nullptr;
t->prev = prevNode;
end->next = t;
end = t;
prevNode = t;
}
letter = _getch();
if (letter == 57) //save press '9'
{
ofstream outdoc;
outdoc.open("RereTheEditor.txt");
Node* save;
char data;
save = start;
while (save->next != nullptr)
{
data = save->c;
outdoc << data;
save = save->next;
}
outdoc.close();
}
}
}
int main()
{
int choice;
cout << "Welcome to theEditor 2.0!n"
<< "Please select an optionn"
<< "1. Create Newn"
<< "2. Load File" << endl;
cin >> choice;
system("CLS");
switch (choice)
{
case 1: { createNew(); }
break;
case 2: { loadFile(); }
break;
}
return 0;
}
必须先在每个节点中记录相应的游标坐标,然后才能通过该节点。
class Node
{
public:
char c;
COORD pos;
Node* next;
Node* prev;
void setpos(int x, int y)
{
pos.X = x;
pos.Y = y;
}
};
获取当前光标坐标bInfo.dwCursorPosition
GetConsoleScreenBufferInfo:
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO bInfo;
GetConsoleScreenBufferInfo(hOut, &bInfo);
然后去链接列表找到相同位置的对应节点,然后插入,更新每个节点的坐标。
相关文章:
- 从链接列表c++中删除一个项目
- 读取文件的最后一行并输入到链接列表时出错
- 下面是我为检测链接列表中的循环而制作的代码
- 有人能帮我处理这个链接列表吗?C++
- C++ 创建包含链表和字符串的对象的链接列表时出错
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 链接列表运算符重载没有打印出我想要的内容
- 链接列表在 cpp 中包含不同的对象类
- 创建一个棋盘格或"Interweave"两个链接列表。IE 更改两个链表的指针
- 如何在构建链接列表时调整头、尾指针
- Shared_ptr双链接列表内存泄漏
- 为什么每当我尝试运行此链接列表删除功能时都会收到分段错误错误?
- 在链接列表中查找元素 - C++
- 删除链接列表中剩余的最后一个节点
- 只有我的"链接列表"中的第一个节点正在打印
- 避免在使用链接列表从 deque 中删除最后一个节点时出现内存泄漏
- C++ 分段错误:11 错误,同时编码将两个数字相加的链接列表
- 如何在C / C++中正确实现链接列表而不会使程序崩溃
- 将元素插入链接列表