Я пишу основной текстовый редактор как задание, и у меня возникли проблемы.Я использую связанные списки, и я могу перемещать курсор по списку, но каждый раз, когда я пытаюсь вставить букву (одну букву в узел) между другими, она просто вставляет букву в конец списка.В коде есть и другие ошибки, в общем, они ищут только помощь по этому основному вопросу, но любые предложения приветствуются.
#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 option\n"
<< "1. Create New\n"
<< "2. Load File" << endl;
cin >> choice;
system("CLS");
switch (choice)
{
case 1: { createNew(); }
break;
case 2: { loadFile(); }
break;
}
return 0;
}