C++ einzelne Zeichen löschen, fortlaufende Zahl

T

toor

Jungspund
Hiallo liebe Unixboard-Benutzer,
Ich hab ein kleines Problem, ich würde gerne, so wie es oft bei Konsolen Programmen ist, eine Art fortlaufende Zahl programmieren. Nur leider weiß ich nicht wie die voherige Zahl löschen kann.
Man könnte es natürlich einfach mit system("clear") ( für Windows-System("cls") ) machen, aber dabei flackert das Bild, was auf die dauer nicht schön ist.

Als Beispiel wie es mit "System("clear") oder System("cls")" aussehen sollte:
Code:
int i=10;
while (i>0)
{
cout<<"text";
cout<<i;
cout<<"text";
--i;
system("clear");
}

Bei diesem Beispiel geht es noch mit dem flackern, aber wenn die Zahl zwischen langen Texten zum Beispiel steht, sieth das sehr unschön aus.

Mit freundlichen Grüßen toor
 
Was Du machen willst, ist hardware abhaengig und daher kein Standard-C. Das beste waere, Du wuerdest eine Library wie ncurses benutzen.
Als Abhilfe koenntest Du Dir auch den Effekt der Ausgabe
Code:
std::cout << "\r";
ansehen. Es loescht die zuletzt geschriebene Zeile, zumindest im Terminal. Bei einer Umleitung in eine Datei funktioniert das nicht.

Es mag auch ASCII-Code geben, der einzelne Zeichen loescht, weiss ich allerdings nicht auswendig.
 
Jo ncurses könnte dir helfen guck mal bei wikipedia da gibts ein wikibook, da ist eigentlich viel wichtiges drinnen. Und sollte dir weiterhelfen.
 
Vielen Dank für eure Antworten,
Ich bin leider noch nicht soweit das ich mit allen Antworten etwas anfangen kann, aber für andere die nach dem Thema suchen, sind dass gut Informationen.
Für mich war die Antwort von Ricola besonders interessant, denn mit "\r" klappt das so wie ich mir das vorgestellt habe. Darüber hinaus hab bin ich noch "\b" auf was eine ähnlich Funktion hat.
Vielen Dank für eure Hilfe.

Zusammenfassung:

Mögliche Lösungen:

int mvdelch()
http://www.die.net/doc/linux/man/man3/mvdelch.3.html

Eine Library wie ncurses benutzen.

Für einfache Consolen Fenster:

Zum an den Anfang der Zeile springen:
Code:
cout<<"\r";
Zum ein Zeichen zurück springen:
Code:
cout<<"\b";
Beispiel Programm:
Code:
int a=0; 
    
    while (a<4)
    {
          cout<<"\n12345";
          a++;
          
          if (a==2) {     
          cout<<"6789";
          }
          if (a==3) {
          cout<<"\b"; 
          cout<<"6789";
          }
          if (a==4) {
          cout<<"\r";
          cout<<"6789";
          }


Bildschirmausgabe:

12345 //erster Durchlauf
123456789 //hängt die if Anweisung die weiteren Zahlen an
12346789 //durch \b ein Zeichen zurück gegangen und dort angefangen
67895 //komplet an den Anfang der Zeile gesprungen und da wieder angefangen

Die Zeilen werden nicht gelöscht, wie man an der letzten Zahl sieth, sie wurden nur überschrieben.
Daher wenn man ein Zeichen nur entfernen möchte kann man das indem man es mit einem Leerzeichen überschreibt.

Mit freundlichen Grüßen Toor
 
Zuletzt bearbeitet:
Zurück
Oben