Как вывести в консоль строку, которую потом можно будет изменять? C++
Я новичок и создаю простейший консольный ТуДу Лист на плюсах. Хочу создать метод, изменяющий выбранную задачу(в случае опечатки например). При этом хочется чтобы в консоль выводилось предыдущее содержимое этой задачи, которое можно было бы изменять, а затем считать и отправить исправленный вариант. Всё это чтобы не пришлось перепечатывать задачу заново из-за мелкой ошибки. Пока он просто выводит прошлую строку без возможности изменения. Есть ли возможность подобное реализовать?
void ChangingTask(){
cout << "Which task you want to change?\n";
cout << "0. Back\n";
cin >> TaskNumber;
if(TaskNumber == 0){
return ShowMainMenu();
}
else if(TaskNumber < 0 || TaskNumber > allTasks.size()){
cout << "Incorrect task number!\n\n";
return ChangingTask();
}
cout << allTasks[TaskNumber]
cin.ignore();
getline(cin, singleTask);
allTasks[TaskNumber - 1] = singleTask;
ChangedOrNot = true;
return ShowMainMenu();
}
Ответы (2 шт):
попробуйте отлавливать нажатие backspace. например, так:
#include <iostream>
#include <conio.h>
#include <string>
#define BACKSPACE 8
#define ESC 27
std::string EditText(std::string text) {
std::cout << text;
while (true) {
int inp = _getch();
if (inp == BACKSPACE) {
text = text.substr(0, text.length()-1);
}
else if (inp == ESC) {
return text;
}
else {
text += inp;
}
system("cls");
std::cout << text;
}
}
Строчный редактор с редактированием командами. В примере программа в цикле печатает строку, позицию курсора и приглашение для ввода команды. Пользователь печатает команду, жмёт Enter. Например:
Купить свежую рыбу. # строка которую предлагается редактировать - # позиция курсора > w # команда "курсор на следующее слово" Купить свежую рыбу. # программа печатает строку снова - # положение курсора изменилось > cw консервированную # "change word" и аргумент Купить консервированную рыбу. # слово над курсором замено новым текстом - # курсор тоже подвинулся > u # отменить последнюю команду Купить свежую рыбу. # правка отменена - # положение курсора вернулось > q # редактирование завершилось
Нужны команды для перемещения курсора (0 h l w b e $ f F ;), для редактирования (d x X r i I a A c dw cw y yw p P s/.../.../), для отмены/повтора команд (u U uu UU).
P.S. Я вимер (пользователь Vim) - мне будет удобно. Если вы привыкли к редактированию на экране, то придётся попотеть.
P.P.S. Не нужно топать ногами, если вам не удобно. Я всё понимаю, нормальный строчный редактор удобнее. Предложенный вариант хорош тем что его можно реализовать на стандартном C/C++ и он будет работать везде. Строчные редакторы зависят от платформы. Ни одного переносимого я не нашёл.