Jak usunąć tylko wpisany tekst w konsoli?

0

Witam
Potrzebuję pomocy chcę aby po wpisaniu błędnej danej w pętli nie nadpisywało się pytanie o zmienną tylko skasowało się to co wpisałem i wtedy mógłbym znowu wpisać dane w tym samym miejscu.

#include <iostream>

using namespace std;
    int a;
int main()
{
    cout << "Hello world!" << endl;
    do
    {
       cout << "Podaj a: ";cin >>a; // żeby nie powtarzało tej linijki tylko żeby wykasowało wartość zmiennej i mógłbym ją wpisać jeszcze raz dopóki nie podam właściwej wartości

    }while(a != 1);
    cout << "Koniec" << endl;


    return 0;
}
1

Nie ma standardowego sposobu na wycofanie tekstu z konsoli (ani często też potrzeby). O jakim systemie myślisz?

0

Na przykładnie który pokazałem.
Normalnie jak wpiszę coś innego niż 1 to pętla się powtórzy i będzie coś takiego.
Podaj a: 2
Podaj a: 1
Koniec
Chcę aby po wpisaniu 2 wykasowało mi tą wartość i do skutku mógłbym wpisywać aż podam 1.
Podaj a: 2 // kasuje tą dwójkę a ja wpisuję 1 i leci dalej
Koniec

2

Znając rodzaj konsoli czy terminala, możesz wprawdzie emitować znaki sterujące przenoszące kursor o 1 linię wyżej i kasować tę linię, ale to droga przez mękę którą rozwiązuje biblioteka ncurses. Jest jej implementacja także pod konsolę MS.

Tu masz kody dla cmd z MS: https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences

Są podobne (ale nie takie same) dla terminala VT100. Jeśli nie ncurses, to życzę (nie)miłej zabawy :)

PS. I nie daję gwarancji czy następnie nie zapytasz "a jak to zrobić dla Win 8.* czy XP"... może być wesoło..

0

To ja podziękuje w takim razie przeżyję bez tego.
Dzięki za pomoc.

0

Da się to zrobić przez zapisywanie każdego tekstu wyrzucanego do konsoli np. do std::vector<string>, a następnie wypisywanie wszystkich pozycji w kontenerze bez niechcianych + system("clear")

1 użytkowników online, w tym zalogowanych: 0, gości: 1